{
  "openapi": "3.1.0",
  "info": {
    "version": "latest",
    "title": "Core APIs",
    "contact": {
      "name": "Rebilly API Support",
      "url": "https://www.rebilly.com/contact/",
      "email": "integrations@rebilly.com"
    },
    "license": {
      "name": "Rebilly",
      "url": "https://www.rebilly.com/api-license/"
    },
    "termsOfService": "https://www.rebilly.com/terms-of-use/",
    "x-logo": {
      "url": "https://rebilly-core.redoc.ly/rb_apiLogo.svg",
      "backgroundColor": "#0044d4"
    },
    "description": "# Introduction\n[comment]: <> (x-product-description-placeholder)\nThe Rebilly API is built on HTTP and is RESTful.\nIt has predictable resource URLs and returns HTTP response codes to indicate errors.\nIt also accepts and returns JSON in the HTTP body.\nUse your favorite HTTP/REST library in your programming language when using this API,\nor use one of the Rebilly SDKs,\nwhich are available in [PHP](https://github.com/Rebilly/rebilly-php) and [JavaScript](https://www.npmjs.com/package/rebilly-js-sdk).\n\nEvery action in the [Rebilly UI](https://app.rebilly.com) is supported by an API which is documented and available for use, so that you may automate any necessary workflows or processes.\nThis API reference documentation contains the most commonly integrated resources.\n\n# Authentication\n\nThis topic describes the different forms of authentication that are available in the Rebilly API, and how to use them.\n\nRebilly offers four forms of authentication: secret key, publishable key, JSON Web Tokens, and public signature key.\n\n- Secret API key: Use to make requests from the server side.\n  Never share these keys.\n  Keep them guarded and secure.\n- Publishable API key: Use in your client-side code to tokenize payment information.\n- JWT: Use to make short-life tokens that expire after a set period of time.\n\n<!-- ReDoc-Inject: <security-definitions> -->\n\n## Manage API keys\n\nTo create or manage API keys, select one of the following:\n\n- Use the Rebilly UI: see [Manage API keys](https://www.rebilly.com/docs/dev-docs/api-keys/#manage-api-keys)\n- Use the Rebilly API: see the [API key operations](https://www.rebilly.com/catalog/all/api-keys).\n\nFor more information on API keys, see [API keys](https://www.rebilly.com/docs/concepts-and-features/concept/api-keys).\n\n# Errors\nRebilly follows the error response format proposed in [RFC 9457](https://tools.ietf.org/html/rfc9457), which is also known as Problem Details for HTTP APIs.\nAs with any API responses, your client must be prepared to gracefully handle additional members of the response.\n\n# SDKs\n\nRebilly provides a JavaScript SDK and a PHP SDK to help interact with the Rebilly API.\nHowever, no SDK is required to use the API.\n\nRebilly also provides [FramePay](https://www.rebilly.com/docs/developer-docs/framepay/),\na client-side iFrame-based solution, to help create payment tokens while minimizing PCI DSS compliance burdens\nand maximizing your customization ability.\n[FramePay](https://www.rebilly.com/docs/developer-docs/framepay/) interacts with the [payment tokens creation operation](https://www.rebilly.com/catalog/all/payment-tokens/posttoken).\n\n## JavaScript SDK\n\nFor installation and usage instructions, see [SDKs](https://www.rebilly.com/docs/dev-docs/sdks/).\nAll JavaScript SDK code examples are included in the API reference documentation.\n\n## PHP SDK\n\nFor installation and usage instructions, see [SDKs](https://www.rebilly.com/docs/dev-docs/sdks/).\nAll SDK code examples are included in the API reference documentation.\nTo use them, you must configure the `$client` as follows:\n\n```php\n$client = new Rebilly\\Client([\n    'apiKey' => 'YourApiKeyHere',\n    'baseUrl' => 'https://api.rebilly.com',\n]);\n```\n\n# Get started\n\nThe full [Rebilly API](https://www.rebilly.com/catalog/all/) has over 500 operations.\nThis is likely more than you may need to implement your use cases.\nIf you would like to implement a particular use case,\n[contact Rebilly](https://www.rebilly.com/support/) for guidance and feedback on the best API operations to use for the task.\n\nTo integrate Rebilly, and learn about related resources and concepts,\nsee [Get started](https://www.rebilly.com/docs/dev-docs#get-started).\n\nTo create and manage API keys, see [API keys](https://www.rebilly.com/docs/dev-docs/api-keys/).\n\n# Rate limits\n\nRebilly enforces rate limits on the API to ensure that no single organization consumes too many resources.\nRate limits are applied to the organization, and not to the API key.\nIn sandbox environment, rate limits are enforced for non-GET endpoints and are set at 3000 requests per 10 minutes.\nYou can find the exact number of consumed requests in the `X-RateLimit-Limit` and `X-RateLimit-Remaining` headers in the response.\nIf the rate limit is exceeded, the API returns a `429 Too Many Requests` response\nand a `X-RateLimit-Retry-After` header that includes a UTC timestamp of when the rate limit resets.\n"
  },
  "security": [
    {
      "SecretApiKey": []
    },
    {
      "JWT": []
    }
  ],
  "servers": [
    {
      "url": "https://api-sandbox.rebilly.com/organizations/{organizationId}",
      "description": "Sandbox server",
      "variables": {
        "organizationId": {
          "default": "{organizationId}",
          "description": "Unique organization identifier.\nAn organization is an entity that represents a company.\nFor more information, see [Obtain an organization ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id)."
        }
      }
    },
    {
      "url": "https://api.rebilly.com/organizations/{organizationId}",
      "description": "Live server",
      "variables": {
        "organizationId": {
          "default": "{organizationId}",
          "description": "Unique organization identifier.\nAn organization is an entity that represents a company.\nFor more information, see [Obtain an organization ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id)."
        }
      }
    }
  ],
  "components": {
    "securitySchemes": {
      "JWT": {
        "description": "JWT is a short lifetime token that can be assigned a specific expiration time.\n\nUsage format: `Bearer <JWT>`.",
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      },
      "ApplicationJWT": {
        "description": "Applications in the Rebilly App Store can create a JSON Web Token (JWT) by fetching an user's instance.\nFor more information, see [Retrieve an application instance](https://www.rebilly.com/catalog/all/application-owners/getapplicationinstancebyorganization/).\n\nUsage format: `Bearer <JWT>`.",
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      },
      "PublishableApiKey": {
        "description": "This authentication method is applicable to specific operations.\n\nTo create a publishable API key, see [Create an API key](https://www.rebilly.com/catalog/all/api-keys/postapikey).",
        "name": "Authorization",
        "type": "apiKey",
        "in": "header"
      },
      "SecretApiKey": {
        "description": "Never share your secret keys.\nKeep them guarded and secure.\n\nUse your secret API key only to make requests from the server side.\nTo authenticate, provide your secret key in the request header.",
        "name": "REB-APIKEY",
        "type": "apiKey",
        "in": "header"
      },
      "CustomerJWT": {
        "description": "To create a JSON Web Token (JWT) using Storefront authentication,\nsee [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin).\n\nUsage format: `Bearer <JWT>`.",
        "type": "http",
        "scheme": "bearer",
        "bearerFormat": "JWT"
      }
    },
    "parameters": {
      "collectionLimit": {
        "name": "limit",
        "in": "query",
        "description": "Limits the number of collection items to be returned.",
        "schema": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1000
        }
      },
      "collectionOffset": {
        "name": "offset",
        "in": "query",
        "description": "Specifies the starting point within the collection of items to be returned.",
        "schema": {
          "type": "integer",
          "minimum": 0,
          "maximum": 1000
        }
      },
      "collectionSort": {
        "name": "sort",
        "in": "query",
        "description": "Sorts and orders the collection of items. To sort in descending\norder, prefix with `-`. Multiple fields can be sorted by separating each with `,`.",
        "style": "form",
        "explode": false,
        "schema": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      },
      "collectionFilter": {
        "name": "filter",
        "in": "query",
        "description": "Criteria for filtering collection items.\nThis field requires a special format.\nUse `,` to specify multiple allowed values.\nUse `;` to specify multiple fields.\n\nFor more information, see [Search filters](https://www.rebilly.com/docs/dev-docs/search-filters).",
        "schema": {
          "type": "string"
        }
      },
      "collectionQuery": {
        "name": "q",
        "in": "query",
        "description": "Use this field to perform a partial search of text fields.",
        "schema": {
          "type": "string"
        }
      },
      "resourceId": {
        "name": "id",
        "in": "path",
        "description": "ID of the resource.",
        "required": true,
        "schema": {
          "type": "string",
          "maxLength": 50,
          "pattern": "^[@~\\-\\.\\w]+$"
        }
      },
      "collectionExpand": {
        "name": "expand",
        "in": "query",
        "description": "Expands a request to include embedded objects within the `_embedded`\nproperty of the response. This field accepts a comma-separated list of objects.\n\nFor more information, see\n[Embedded resources](https://www.rebilly.com/docs/dev-docs/expand-embedded-resources).",
        "schema": {
          "type": "string"
        }
      },
      "collectionFields": {
        "name": "fields",
        "in": "query",
        "description": "Limits the returned fields to the specified list, each field separated by a comma.\nThe ID value is always returned.",
        "schema": {
          "type": "string"
        }
      },
      "customFieldResource": {
        "name": "resource",
        "in": "path",
        "description": "Type of resource schema.",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "customers",
            "payment-instruments",
            "orders",
            "subscriptions",
            "transactions",
            "websites",
            "products",
            "plans",
            "gateway-accounts",
            "deposit-requests"
          ]
        }
      },
      "externalIdentifierResource": {
        "name": "resource",
        "in": "path",
        "description": "Type of resource.",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "customers",
            "invoices",
            "invoice-items",
            "transactions",
            "journal-accounts",
            "journal-entries"
          ]
        }
      },
      "externalIdentifierResourceId": {
        "name": "resourceId",
        "in": "path",
        "description": "ID of the resource.",
        "required": true,
        "schema": {
          "type": "string",
          "maxLength": 50,
          "pattern": "^[@~\\-\\.\\w]+$"
        }
      },
      "externalIdentifierService": {
        "name": "service",
        "in": "path",
        "description": "Name of the external service.",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "quickbooks-online"
          ]
        }
      },
      "imageSize": {
        "name": "imageSize",
        "in": "query",
        "description": "Resize image to specified size.\nSupports any sizes from 10x10 to 2000x2000, in the following format: `{width}x{height}`.\nIf the value is invalid, the image returns the original size.\nThis parameter is ignored for non-image files.",
        "schema": {
          "type": "string",
          "example": "700x700",
          "pattern": "^[1-9]{1}[0-9]{1,3}x[1-9]{1}[0-9]{1,3}$"
        }
      },
      "applicationId": {
        "name": "applicationId",
        "in": "path",
        "description": "Unique identifier of the application.",
        "required": true,
        "schema": {
          "type": "string",
          "maxLength": 50,
          "pattern": "^[@~\\-\\.\\w]+$"
        }
      },
      "organizationId": {
        "name": "organizationId",
        "in": "path",
        "description": "Unique organization identifier.\nAn organization is an entity that represents a company.\nFor more information, see [Obtain an organization ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).",
        "required": true,
        "schema": {
          "type": "string",
          "maxLength": 50,
          "pattern": "^[@~\\-\\.\\w]+$"
        }
      },
      "mediaTypeJsonPdf": {
        "name": "Accept",
        "in": "header",
        "description": "Type of response media.",
        "schema": {
          "type": "string",
          "enum": [
            "application/json",
            "application/pdf"
          ],
          "default": "application/json"
        }
      },
      "orderExpand": {
        "name": "expand",
        "in": "query",
        "description": "Expand a response to receive a full related object in the `_embedded` path.\n\nTo expand multiple objects, use a comma-separated list.\nExample: `expand=customer,activationInvoice`.\n\nAvailable arguments are:\n\n  - `customer`\n  - `activationInvoice`\n  - `recentInvoice`\n  - `upcomingInvoice`\n  - `paymentInstrument`\n  - `website`\n\nFor more information, see [Embedded resources](https://www.rebilly.com/docs/dev-docs/expand-embedded-resources).",
        "schema": {
          "type": "string"
        }
      },
      "subscriptionExpand": {
        "name": "expand",
        "in": "query",
        "description": "Expand a response to receive a full related object in the `_embedded` path.\n\nTo expand multiple objects, use a comma-separated list.\nExample: `expand=recentInvoice,initialInvoice`.\n\nAvailable arguments are:\n\n  - `customer`\n  - `leadSource`\n  - `website`\n  - `shippingRate`\n  - `initialInvoice`\n  - `recentInvoice`\n  - `upcomingInvoice`\n  - `paymentInstrument`\n\nFor more information, see [Embedded resources](https://www.rebilly.com/docs/dev-docs/expand-embedded-resources).",
        "schema": {
          "type": "string"
        }
      },
      "tag": {
        "name": "tag",
        "in": "path",
        "description": "Name of the tag.",
        "required": true,
        "schema": {
          "type": "string",
          "pattern": "^[@~\\-\\.\\w\\s]+$"
        }
      },
      "customerId": {
        "name": "customerId",
        "in": "path",
        "description": "ID of the customer.",
        "required": true,
        "schema": {
          "type": "string",
          "maxLength": 50,
          "pattern": "^[@~\\-\\.\\w]+$"
        }
      },
      "kycDocumentId": {
        "name": "kycDocumentId",
        "in": "path",
        "description": "ID of the KYC document.",
        "required": true,
        "schema": {
          "type": "string",
          "maxLength": 50,
          "pattern": "^[@~\\-\\.\\w]+$"
        }
      },
      "credentialType": {
        "name": "type",
        "in": "path",
        "description": "Type of service credential.",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "smtp",
            "webhook",
            "mailgun",
            "sendgrid",
            "aws-ses",
            "oauth2",
            "postmark",
            "experian",
            "taxjar",
            "avalara",
            "plaid"
          ]
        }
      },
      "token": {
        "name": "token",
        "in": "path",
        "description": "Token string.",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "systemEventType": {
        "name": "eventType",
        "in": "path",
        "description": "Type of event.",
        "required": true,
        "schema": {
          "type": "string"
        }
      },
      "rulesVersion": {
        "name": "version",
        "in": "path",
        "required": true,
        "description": "Version of the ruleset.\n\nTo retrieve the full related object instead of the ID, expand the response.\nFor more information, see [Embedded resources](https://www.rebilly.com/docs/dev-docs/expand-embedded-resources).",
        "schema": {
          "type": "integer",
          "minimum": 1
        }
      },
      "integrationLabel": {
        "name": "label",
        "in": "path",
        "description": "Label of the integration.",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "google-sheets",
            "intuit-quickbooks"
          ]
        }
      },
      "storefrontCustomFieldResource": {
        "name": "resource",
        "in": "path",
        "description": "Type of resource schema.",
        "required": true,
        "schema": {
          "type": "string",
          "enum": [
            "customers",
            "payment-instruments",
            "subscriptions",
            "transactions"
          ]
        }
      }
    },
    "headers": {
      "Pagination-Total": {
        "description": "Total number of items.",
        "schema": {
          "type": "integer"
        },
        "example": 332
      },
      "Pagination-Limit": {
        "description": "Maximum number of items per page.",
        "schema": {
          "type": "integer"
        },
        "example": 100
      },
      "Pagination-Offset": {
        "description": "Specifies the starting point within the\ncollection of resource results. For example, a request with\n`limit=20` retrieves and displays the first 20 results on a page. A\nfollowing request with `limit=20` and `offset=20`, retrieves the next\npage of 20 results.",
        "schema": {
          "type": "integer"
        },
        "example": 2
      },
      "Location": {
        "description": "Location of the related resource.",
        "schema": {
          "type": "string",
          "format": "uri"
        },
        "example": "https://api.rebilly.com/example"
      },
      "X-RateLimit-Limit": {
        "description": "Total number of rate limit tokens for this request within a rate limit period.\nFor more information, see [Rate limits](#section/Rate-limits).",
        "schema": {
          "type": "integer"
        },
        "example": 3600
      },
      "X-RateLimit-Remaining": {
        "description": "Remaining number of rate limit tokens for this request within the rate limit period. \nFor example, in the sandbox environment, rate limits for non-GET endpoints are set at 3000 requests per 10 minutes.",
        "schema": {
          "type": "integer"
        },
        "example": 3600
      },
      "X-RateLimit-Retry-After": {
        "description": "UTC timestamp after which the rate limit resets and the request can be retried.",
        "schema": {
          "type": "integer"
        },
        "example": 1713187500
      }
    },
    "schemas": {
      "CreatedTime": {
        "type": "string",
        "description": "Date and time when the resource is created.\nThis value is set automatically when the resource is created.",
        "format": "date-time",
        "readOnly": true,
        "x-sortable": true,
        "x-label": "Creation Time"
      },
      "UpdatedTime": {
        "type": "string",
        "description": "Date and time when the resource is updated.\nThis value is set automatically when the resource is updated.",
        "format": "date-time",
        "readOnly": true,
        "x-sortable": true,
        "x-label": "Last Update Time"
      },
      "ResourceId": {
        "type": "string",
        "description": "Unique resource ID.",
        "maxLength": 50,
        "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
      },
      "SelfLink": {
        "type": "array",
        "description": "Related links.",
        "readOnly": true,
        "items": {
          "type": "object",
          "properties": {
            "href": {
              "description": "Link URL.",
              "type": "string"
            },
            "rel": {
              "description": "Type of link.",
              "type": "string",
              "enum": [
                "self"
              ]
            }
          }
        }
      },
      "AML": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "description": "First name of the individual, or name of entity.",
            "readOnly": true,
            "example": "Benjamin"
          },
          "lastName": {
            "type": [
              "string",
              "null"
            ],
            "description": "Last name of the individual.\nThis field returns a `null` value for single-named entities.",
            "readOnly": true,
            "example": "Franklin"
          },
          "source": {
            "type": "string",
            "readOnly": true,
            "description": "Describes which list the result is from."
          },
          "sourceType": {
            "readOnly": true,
            "description": "Describes the categories of the individual or entity.",
            "type": "array",
            "example": [
              "sanctions",
              "enforcements"
            ],
            "items": {
              "type": "string",
              "enum": [
                "pep",
                "sanctions",
                "adverse-media",
                "enforcements",
                "state-owned-enterprise"
              ]
            }
          },
          "gender": {
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "description": "If `type`=`individual`, this field describes the gender of the individual."
          },
          "title": {
            "type": [
              "array",
              "null"
            ],
            "readOnly": true,
            "description": "Individual's job title.",
            "example": [
              "Postmaster General",
              "Ambassador to France",
              "Ambassador to Sweden",
              "Supreme Executive Council of Commonwealth of Pennsylvania"
            ],
            "items": {
              "type": "string"
            }
          },
          "type": {
            "type": "string",
            "readOnly": true,
            "description": "Describes whether the source is an individual or an entity.",
            "enum": [
              "individual",
              "entity"
            ]
          },
          "legalBasis": {
            "type": "array",
            "readOnly": true,
            "description": "List of references to legal documents, if they exist.",
            "items": {
              "type": "string"
            }
          },
          "regime": {
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "description": "Describes the government, administration, or political entity.",
            "example": "United States Government"
          },
          "confidence": {
            "type": "string",
            "description": "Degree of confidence in the source list information.",
            "readOnly": true,
            "enum": [
              "weak",
              "medium",
              "strong",
              "very-strong"
            ]
          },
          "nationality": {
            "type": "string",
            "readOnly": true,
            "description": "Nationality of the individual or entity."
          },
          "address": {
            "type": "array",
            "readOnly": true,
            "description": "Addresses associated with the individual or entity.",
            "items": {
              "type": "object",
              "properties": {
                "address": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "readOnly": true,
                  "description": "Street address line 1."
                },
                "address2": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "readOnly": true,
                  "description": "Street address line 2."
                },
                "city": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "readOnly": true,
                  "description": "City."
                },
                "region": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "readOnly": true,
                  "description": "State, province, or region."
                },
                "country": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "readOnly": true,
                  "description": "Country."
                },
                "birthplace": {
                  "type": "boolean",
                  "default": false,
                  "readOnly": true,
                  "description": "Individual's place of birth."
                }
              }
            }
          },
          "dob": {
            "type": "array",
            "readOnly": true,
            "description": "One or more possible dates of birth.",
            "items": {
              "type": "string",
              "readOnly": true,
              "description": "Date of birth.",
              "format": "date",
              "example": "1706-01-17"
            }
          },
          "aliases": {
            "type": "array",
            "readOnly": true,
            "description": "List of aliases, if any.",
            "items": {
              "type": "object",
              "properties": {
                "firstName": {
                  "type": "string",
                  "description": "First name of alias.",
                  "readOnly": true
                },
                "lastName": {
                  "type": "string",
                  "description": "Last name of alias.",
                  "readOnly": true
                },
                "authenticity": {
                  "type": "string",
                  "description": "Degree of confidence in the alias.",
                  "readOnly": true,
                  "enum": [
                    "strong",
                    "weak",
                    "unknown"
                  ]
                }
              }
            }
          },
          "passport": {
            "type": "array",
            "readOnly": true,
            "description": "Individual's passport information.",
            "items": {
              "type": "object",
              "properties": {
                "number": {
                  "type": "string",
                  "readOnly": true,
                  "description": "Passport number."
                },
                "registrationDate": {
                  "type": "string",
                  "format": "date",
                  "readOnly": true,
                  "description": "Passport registration date."
                }
              }
            }
          },
          "comments": {
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "description": "Additional information.\nThis content varies per list."
          },
          "matchDetails": {
            "type": [
              "object",
              "null"
            ],
            "description": "Details of the matching logic and confidence scoring.",
            "properties": {
              "confidenceFactors": {
                "type": "array",
                "readOnly": true,
                "description": "List of factors that contributed to the confidence score calculation.",
                "items": {
                  "type": "string",
                  "enum": [
                    "confidence_exact_country",
                    "confidence_mismatch_country",
                    "confidence_missing_country",
                    "confidence_exact_dob",
                    "confidence_mismatch_dob",
                    "confidence_missing_dob",
                    "confidence_exact_yob",
                    "confidence_inexact_yob",
                    "confidence_strong_hit_relevance",
                    "confidence_weak_hit_relevance",
                    "confidence_exact_full_name",
                    "confidence_fuzzy_full_name"
                  ]
                }
              },
              "matchCriteria": {
                "type": "array",
                "readOnly": true,
                "description": "List of specific criteria that matched against the watchlist.",
                "items": {
                  "type": "string",
                  "enum": [
                    "match_exact_name",
                    "match_phonetic_first_name",
                    "match_phonetic_last_name",
                    "match_exact_full_name",
                    "match_aka_exact_name",
                    "match_aka_phonetic_first_name",
                    "match_aka_phonetic_last_name",
                    "match_aka_exact_full_name",
                    "match_fuzzy_nationality",
                    "match_exact_address",
                    "match_exact_city",
                    "match_exact_region",
                    "match_exact_country",
                    "match_exact_post_code"
                  ]
                }
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "Tag": {
        "type": "object",
        "description": "Use tags to organise and categorize customers or KYC documents based on keywords.\nFor more information, see [Tags](https://www.rebilly.com/docs/dev-docs/api/tags/).",
        "required": [
          "name",
          "type"
        ],
        "properties": {
          "id": {
            "description": "ID of the tag.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "name": {
            "description": "Unique name for the tag.\nTag names are not case-sensitive.",
            "type": "string",
            "maxLength": 255,
            "pattern": "^[@~\\-\\.\\w\\s]+$",
            "example": "New"
          },
          "type": {
            "description": "Type of tag.\nTags of a specific type can only be assigned to corresponding entity types.\nFor example, you can only use customer tags on customers.",
            "type": "string",
            "enum": [
              "customer",
              "kyc-document",
              "aml-check"
            ]
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "AmlCheck": {
        "type": "object",
        "readOnly": true,
        "description": "AML check result.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique resource ID.",
            "maxLength": 50,
            "example": "aml_chk_0YV8XJT2ZWDR398Q8NFEM7DEPM"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "websiteId": {
            "type": "string",
            "description": "Website ID associated with the customer.",
            "maxLength": 50,
            "example": "web_0YV7DE4Z26DQSA1AC92FBJ7SEG"
          },
          "reviewerId": {
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "description": "User ID of the person who reviewed the AML check.",
            "example": "44433322-2c4y-483z-a0a9-158621f77a21"
          },
          "reviewerType": {
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "description": "Type of reviewer for the current review outcome.",
            "enum": [
              "human",
              "bot"
            ],
            "example": "bot"
          },
          "reviewerName": {
            "type": [
              "string",
              "null"
            ],
            "description": "First and last name of the person who reviewed the AML check.\nIf the result is inherited, this field is set to \"bot\"."
          },
          "reviewStartTime": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Date and time when the AML check review is started."
          },
          "reviewTime": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Date and time when the AML check review is completed."
          },
          "priority": {
            "type": [
              "string",
              "null"
            ],
            "default": null,
            "description": "Highest matched priority of all hits within an AML check."
          },
          "source": {
            "type": "string",
            "description": "Source of the AML check.",
            "enum": [
              "sign-up",
              "recurring",
              "purchase"
            ]
          },
          "status": {
            "type": "string",
            "description": "Status of the AML check.",
            "readOnly": true,
            "enum": [
              "pending-review",
              "in-review",
              "no-match",
              "confirmed-match",
              "false-positive"
            ],
            "x-enumDescriptions": {
              "pending-review": "Possible AML match detected and waiting to be manually reviewed.",
              "in-review": "A manual AML match review is in progress.",
              "no-match": "No possible AML match detected.",
              "confirmed-match": "Possible AML match manually reviewed and marked as confirmed.",
              "false-positive": "Possible AML match manually reviewed and marked as false positive."
            }
          },
          "customer": {
            "type": "object",
            "properties": {
              "id": {
                "description": "ID of the customer.",
                "$ref": "#/components/schemas/ResourceId"
              },
              "primaryAddress": {
                "type": "object",
                "description": "Customer's data at the time of the AML check.",
                "properties": {
                  "firstName": {
                    "type": "string",
                    "maxLength": 45,
                    "description": "Customer's first name at the time of the AML check."
                  },
                  "lastName": {
                    "type": "string",
                    "maxLength": 45,
                    "description": "Customer's last name at the time of the AML check."
                  },
                  "dob": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date",
                    "description": "Customer's date of birth.",
                    "example": "1971-02-14"
                  },
                  "address": {
                    "description": "First line of the customer's street address at the time of the AML check.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "pattern": "^[\\u0000-\\uFFFF]+$",
                    "maxLength": 60,
                    "example": "36 Craven St"
                  },
                  "address2": {
                    "description": "Second line of the customer's street address at the time of the AML check.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "pattern": "^[\\u0000-\\uFFFF]+$",
                    "maxLength": 60
                  },
                  "city": {
                    "description": "Customer's city of residence at the time of the AML check.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "pattern": "^[\\u0000-\\uFFFF]+$",
                    "maxLength": 45,
                    "example": "Austin"
                  },
                  "region": {
                    "description": "Customer's region of residence at the time of the AML check.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "pattern": "^[\\u0000-\\uFFFF]+$",
                    "maxLength": 45,
                    "example": "Texas"
                  },
                  "country": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Customer's country of residence at the time of the AML check."
                  },
                  "postalCode": {
                    "description": "Customer's postal code at the time of the AML check.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "pattern": "^[\\w\\s\\-]+$",
                    "maxLength": 10,
                    "example": "WC2N 5NF"
                  }
                }
              },
              "organizationId": {
                "type": "string",
                "description": "ID of the customer's organization.",
                "maxLength": 50,
                "example": "org_0YVDM8RC7GDADADSBSMW124JA8"
              }
            }
          },
          "hits": {
            "description": "List of hits returned during the AML check.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AML"
            }
          },
          "tags": {
            "description": "List of AML check tags.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tag"
            }
          },
          "provenance": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Origin of the AML check result.",
            "properties": {
              "inherited": {
                "type": "boolean",
                "description": "Specifies if the result is inherited from a previous AML check.",
                "example": true
              },
              "inheritedFromAmlCheckId": {
                "type": "string",
                "description": "ID of the AML check from which the check inherits its result.",
                "maxLength": 50,
                "example": "aml_chk_0YV8XJT2ZWDR398Q8NFEM7DEPM"
              },
              "scope": {
                "type": "array",
                "description": "Scope of what is inherited from the source AML check.",
                "items": {
                  "type": "string",
                  "enum": [
                    "status-only"
                  ]
                },
                "example": [
                  "status-only"
                ]
              },
              "reasons": {
                "type": "array",
                "description": "Reasons that triggered the inheritance of the result.",
                "items": {
                  "type": "string",
                  "enum": [
                    "customer_duplicated_by_person_exact_match",
                    "customer_duplicated_by_primary_phone_number_exact_match",
                    "customer_previous_check_exact_match"
                  ]
                },
                "example": [
                  "customer_duplicated_by_person_exact_match"
                ]
              }
            }
          },
          "noMatchReason": {
            "readOnly": true,
            "description": "Reason for the no-match result.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "no_hits_found",
              "mismatched_hits",
              "hits_are_below_relevance_score_threshold",
              "internal_system_error"
            ],
            "example": "no_hits_found"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer"
                  ]
                }
              }
            }
          }
        }
      },
      "BaseProblem": {
        "type": "object",
        "additionalProperties": true,
        "minProperties": 1,
        "description": "RFC-7807 [problem details](https://tools.ietf.org/html/rfc7807) JSON object.",
        "properties": {
          "type": {
            "type": "string",
            "description": "Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.\nIt should provide human-readable documentation for the problem type.\nWhen this member is not present, its value is assumed to be \"about:blank\".",
            "format": "uri"
          },
          "title": {
            "type": "string",
            "description": "Short, human-readable summary of the problem type.\nOther than for the purposes of localization, this should not change from occurrence to occurrence of the problem."
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation that is specific to this occurrence of the problem."
          },
          "instance": {
            "type": "string",
            "description": "URI reference that identifies the specific occurrence of the problem.\nIt may or may not yield further information if dereferenced."
          }
        }
      },
      "Unauthorized": {
        "allOf": [
          {
            "title": "Unauthorized"
          },
          {
            "type": "object",
            "properties": {
              "status": {
                "type": "integer",
                "description": "HTTP status code.",
                "minimum": 401,
                "maximum": 401
              }
            }
          },
          {
            "$ref": "#/components/schemas/BaseProblem"
          }
        ]
      },
      "Forbidden": {
        "allOf": [
          {
            "title": "Forbidden"
          },
          {
            "type": "object",
            "properties": {
              "status": {
                "type": "integer",
                "description": "HTTP status code.",
                "minimum": 403,
                "maximum": 403
              }
            }
          },
          {
            "$ref": "#/components/schemas/BaseProblem"
          }
        ]
      },
      "NotFound": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "status": {
                "type": "integer",
                "description": "HTTP status code.",
                "minimum": 404,
                "maximum": 404
              }
            }
          },
          {
            "$ref": "#/components/schemas/BaseProblem"
          }
        ]
      },
      "ValidationError": {
        "allOf": [
          {
            "title": "Validation error"
          },
          {
            "type": "object",
            "properties": {
              "status": {
                "type": "integer",
                "description": "HTTP status code.",
                "minimum": 422,
                "maximum": 422
              }
            }
          },
          {
            "$ref": "#/components/schemas/BaseProblem"
          },
          {
            "type": "object",
            "properties": {
              "invalidFields": {
                "description": "Invalid field details.",
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "field": {
                      "type": "string",
                      "description": "Name of the field.\nDot notation is used for nested object field names."
                    },
                    "message": {
                      "description": "Message field.",
                      "type": "string"
                    }
                  }
                },
                "example": [
                  {
                    "field": "field1",
                    "message": "field1 is invalid"
                  },
                  {
                    "field": "subObject.field2",
                    "message": "field2 is invalid"
                  },
                  {
                    "field": "subObject.field2",
                    "message": "another error in the field2"
                  }
                ]
              }
            }
          }
        ]
      },
      "TooManyRequests": {
        "type": "object",
        "additionalProperties": true,
        "minProperties": 1,
        "description": "RFC-7807 [problem details](https://tools.ietf.org/html/rfc7807) JSON object.",
        "properties": {
          "type": {
            "type": "string",
            "description": "Problem type in the form of a [URI](https://tools.ietf.org/html/rfc3986) reference.\nIt should provide human-readable documentation for the problem type.\nWhen this member is not present, its value is assumed to be \"about:blank\".",
            "format": "uri",
            "example": "about:blank"
          },
          "title": {
            "type": "string",
            "description": "Short, human-readable summary of the problem type.\nOther than for the purposes of localization, this should not change from occurrence to occurrence of the problem.",
            "example": "Rate Limit Exceeded"
          },
          "status": {
            "type": "integer",
            "description": "HTTP status code.",
            "minimum": 429,
            "maximum": 429
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation that is specific to this occurrence of the problem.",
            "example": "A request cannot be executed because the user has sent too many requests within a certain period of time"
          },
          "instance": {
            "type": "string",
            "description": "URI reference that identifies the specific occurrence of the problem.\nIt may or may not yield further information if dereferenced."
          }
        }
      },
      "AmlCheckReview": {
        "type": "object",
        "description": "AML check review.",
        "properties": {
          "status": {
            "type": "string",
            "description": "Status of the AML check.",
            "enum": [
              "confirmed-match",
              "false-positive"
            ]
          }
        }
      },
      "AmlConfidence": {
        "type": [
          "string",
          "null"
        ],
        "description": "Degree of confidence to assign.",
        "enum": [
          "weak",
          "medium",
          "strong",
          "very-strong"
        ]
      },
      "AmlCompoundConfidence": {
        "type": "object",
        "properties": {
          "addressMatch": {
            "type": "object",
            "description": "Match for the customer's city or region, or both, is found.",
            "properties": {
              "matchingCountry": {
                "$ref": "#/components/schemas/AmlConfidence"
              },
              "mismatchingCountry": {
                "$ref": "#/components/schemas/AmlConfidence"
              },
              "noCountry": {
                "$ref": "#/components/schemas/AmlConfidence"
              }
            }
          },
          "addressMismatch": {
            "type": "object",
            "description": "Match for the customer's city or region, or both, is not found.",
            "properties": {
              "matchingCountry": {
                "$ref": "#/components/schemas/AmlConfidence"
              },
              "mismatchingCountry": {
                "$ref": "#/components/schemas/AmlConfidence"
              },
              "noCountry": {
                "$ref": "#/components/schemas/AmlConfidence"
              }
            }
          },
          "noAddress": {
            "type": "object",
            "description": "No city and no region is available to match against.",
            "properties": {
              "matchingCountry": {
                "$ref": "#/components/schemas/AmlConfidence"
              },
              "mismatchingCountry": {
                "$ref": "#/components/schemas/AmlConfidence"
              },
              "noCountry": {
                "$ref": "#/components/schemas/AmlConfidence"
              }
            }
          }
        }
      },
      "AmlPriority": {
        "type": [
          "string",
          "null"
        ],
        "description": "Priority level of matched AML customer information.",
        "default": null,
        "enum": [
          "p0",
          "p1",
          "p2",
          "p3"
        ]
      },
      "AmlSettings": {
        "type": "object",
        "description": "Settings for AML checking.",
        "properties": {
          "confidence": {
            "type": "object",
            "description": "Confidence level settings for AML matches.",
            "properties": {
              "dob": {
                "type": "object",
                "description": "Confidence level settings for AML matches based on date of birth.",
                "properties": {
                  "exactMatch": {
                    "description": "Exact match of the customer's date of birth and name is found.",
                    "$ref": "#/components/schemas/AmlCompoundConfidence"
                  },
                  "inexactMatch": {
                    "description": "Exact match of the customer's date of birth and a fuzzy, or inexact, name match is found.",
                    "$ref": "#/components/schemas/AmlCompoundConfidence"
                  }
                }
              },
              "noDob": {
                "type": "object",
                "description": "Confidence level settings for AML matches based on a missing date of birth.",
                "properties": {
                  "exactMatch": {
                    "description": "Exact match of the customer's name is found, but a date of birth is not.",
                    "$ref": "#/components/schemas/AmlCompoundConfidence"
                  },
                  "inexactMatch": {
                    "description": "Fuzzy, or inexact match of the customer's name is found, but a date of birth is not.",
                    "$ref": "#/components/schemas/AmlCompoundConfidence"
                  },
                  "weakMatch": {
                    "description": "Weak match of the customer's name is found, but a date of birth is not.",
                    "$ref": "#/components/schemas/AmlCompoundConfidence"
                  }
                }
              },
              "yob": {
                "type": "object",
                "description": "Confidence level settings for AML matches based on year of birth.",
                "properties": {
                  "exactMatch": {
                    "description": "Exact match of the customer's year of birth and exact name is found.",
                    "$ref": "#/components/schemas/AmlCompoundConfidence"
                  },
                  "inexactMatch": {
                    "description": "Exact match of the customer's year of birth and a fuzzy, or inexact, name match is found.",
                    "$ref": "#/components/schemas/AmlCompoundConfidence"
                  }
                }
              },
              "inexactYob": {
                "type": "object",
                "description": "Confidence level settings for AML matches based on a near match of year of birth.",
                "properties": {
                  "exactMatch": {
                    "description": "Near match of the customer's year of birth and an exact name match is found.",
                    "$ref": "#/components/schemas/AmlCompoundConfidence"
                  },
                  "inexactMatch": {
                    "description": "Near match of the customer's year of birth and a fuzzy, or inexact, name match is found.",
                    "$ref": "#/components/schemas/AmlCompoundConfidence"
                  }
                }
              }
            }
          },
          "priority": {
            "type": "object",
            "description": "Priority level settings for AML source matches. \\\n`p0` is critical priority level, and `p3` is low priority level.",
            "properties": {
              "pep": {
                "type": "object",
                "description": "Priorities for the `pep` source type.",
                "properties": {
                  "veryStrong": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "strong": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "medium": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "weak": {
                    "$ref": "#/components/schemas/AmlPriority"
                  }
                }
              },
              "enforcements": {
                "type": "object",
                "description": "Priorities for the `enforcement` source type.",
                "properties": {
                  "veryStrong": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "strong": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "medium": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "weak": {
                    "$ref": "#/components/schemas/AmlPriority"
                  }
                }
              },
              "stateOwnedEnterprise": {
                "type": "object",
                "description": "Priorities for the `state-owned-enterprise` source type.",
                "properties": {
                  "veryStrong": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "strong": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "medium": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "weak": {
                    "$ref": "#/components/schemas/AmlPriority"
                  }
                }
              },
              "sanctions": {
                "type": "object",
                "description": "Priorities for the `sanctions` source type.",
                "properties": {
                  "veryStrong": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "strong": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "medium": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "weak": {
                    "$ref": "#/components/schemas/AmlPriority"
                  }
                }
              },
              "adverseMedia": {
                "type": "object",
                "description": "Priorities for the `adverse-media` source type.",
                "properties": {
                  "veryStrong": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "strong": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "medium": {
                    "$ref": "#/components/schemas/AmlPriority"
                  },
                  "weak": {
                    "$ref": "#/components/schemas/AmlPriority"
                  }
                }
              }
            }
          }
        }
      },
      "Attachment": {
        "type": "object",
        "required": [
          "fileId",
          "relatedId",
          "relatedType"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the attachment.",
            "maxLength": 50,
            "example": "att_0YV7J787J0DW0918MQQMDHWA7M"
          },
          "fileId": {
            "type": "string",
            "description": "ID of the linked file object.",
            "maxLength": 50,
            "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
          },
          "relatedType": {
            "description": "Linked object type.",
            "type": "string",
            "enum": [
              "customer",
              "customer-timeline-comment",
              "customer-edd-timeline-comment",
              "dispute",
              "gateway-timeline-comment",
              "invoice",
              "invoice-timeline-comment",
              "order-timeline-comment",
              "organization",
              "payment",
              "plan",
              "product",
              "subscription",
              "transaction",
              "transaction-timeline-comment"
            ]
          },
          "relatedId": {
            "description": "ID of the linked object.",
            "type": "string"
          },
          "name": {
            "description": "Name of original attachment.",
            "type": "string"
          },
          "description": {
            "description": "Description of the attachment.",
            "type": "string"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "file"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              }
            }
          }
        }
      },
      "Conflict": {
        "allOf": [
          {
            "title": "Conflict"
          },
          {
            "type": "object",
            "properties": {
              "status": {
                "type": "integer",
                "description": "HTTP status code.",
                "minimum": 409,
                "maximum": 409
              }
            }
          },
          {
            "$ref": "#/components/schemas/BaseProblem"
          }
        ]
      },
      "AuthenticationOptions": {
        "type": "object",
        "properties": {
          "passwordPattern": {
            "description": "Allowed password pattern.",
            "type": [
              "string",
              "null"
            ],
            "example": "/^[0-9]+$/"
          },
          "credentialTtl": {
            "description": "Default credential lifetime, in seconds.",
            "type": "integer"
          },
          "authTokenTtl": {
            "description": "Default auth-token lifetime, in seconds.",
            "type": "integer"
          },
          "resetTokenTtl": {
            "description": "Default reset-token lifetime, in seconds.",
            "type": "integer"
          },
          "otpRequired": {
            "description": "Specifies if a One-Time Password (OTP) is required to exchange a token.",
            "type": "boolean"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "CustomerId": {
        "type": "string",
        "description": "ID of the customer resource.",
        "maxLength": 50,
        "example": "cus_0YV7DDSDD1C8DA64KHH2W33CPF",
        "x-basic": true
      },
      "AuthenticationTokenResponse": {
        "type": "object",
        "title": "Authentication token",
        "required": [
          "username"
        ],
        "properties": {
          "username": {
            "description": "Username of the customer who is associated with the authentication token.",
            "type": "string"
          },
          "customerId": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomerId"
              }
            ]
          },
          "token": {
            "description": "ID of the authentication token.",
            "type": "string",
            "readOnly": true
          },
          "otpRequired": {
            "description": "Specifies if a One-Time Password (OTP) is required to exchange the authentication token.",
            "type": "boolean"
          },
          "credentialId": {
            "description": "ID of the user associated with the authentication token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "expiredTime": {
            "description": "Date and time when the token expired.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "AuthenticationTokenPasswordMode": {
        "type": "object",
        "required": [
          "username",
          "password"
        ],
        "properties": {
          "username": {
            "description": "Username associated with the authentication token.",
            "type": "string"
          },
          "password": {
            "description": "Password associated with the authentication token.",
            "type": "string",
            "format": "password",
            "writeOnly": true
          },
          "mode": {
            "type": "string",
            "description": "Specifies the authentication verification method.\nThe `password` token requires the user to enter a password to log in.\nThe `passwordless` token, requires a secret API key to log in.\nTo obtain an API key, see [Manage API keys](https://www.rebilly.com/docs/dev-docs/api-keys/#manage-api-keys).",
            "writeOnly": true,
            "enum": [
              "password"
            ]
          },
          "customerId": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomerId"
              }
            ]
          },
          "token": {
            "description": "ID of the authentication token.",
            "type": "string",
            "readOnly": true
          },
          "otpRequired": {
            "description": "Specifies if a One-Time Password (OTP) is required to exchange the authentication token.",
            "type": "boolean"
          },
          "credentialId": {
            "description": "ID of the user associated with the authentication token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "expiredTime": {
            "description": "Date and time when the token expired.",
            "type": "string",
            "format": "date-time"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "AuthenticationTokenPasswordlessMode": {
        "type": "object",
        "required": [
          "customerId"
        ],
        "properties": {
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "mode": {
            "type": "string",
            "description": "Specifies the authentication verification method.\nThe `password` token requires the user to enter a password to log in.\nThe `passwordless` token, requires a secret API key to log in.\nTo obtain an API key, see [Manage API keys](https://www.rebilly.com/docs/dev-docs/api-keys/#manage-api-keys).",
            "writeOnly": true,
            "enum": [
              "passwordless"
            ]
          },
          "token": {
            "description": "ID of the authentication token.",
            "type": "string",
            "readOnly": true
          },
          "otpRequired": {
            "description": "Specifies if a One-Time Password (OTP) is required to exchange the authentication token.",
            "type": "boolean"
          },
          "credentialId": {
            "description": "ID of the user associated with the authentication token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "expiredTime": {
            "description": "Date and time when the token expired.",
            "type": "string",
            "format": "date-time"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "AuthenticationToken": {
        "type": "object",
        "discriminator": {
          "propertyName": "mode",
          "mapping": {
            "password": "#/components/schemas/AuthenticationTokenPasswordMode",
            "passwordless": "#/components/schemas/AuthenticationTokenPasswordlessMode"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/AuthenticationTokenPasswordMode"
          },
          {
            "$ref": "#/components/schemas/AuthenticationTokenPasswordlessMode"
          }
        ]
      },
      "ApiKeyScope": {
        "type": "object",
        "properties": {
          "organizationId": {
            "description": "Array of account IDs.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResourceId"
            }
          },
          "productId": {
            "description": "Array of product IDs.",
            "type": "array",
            "items": {
              "type": "string",
              "description": "Unique resource ID.",
              "maxLength": 50,
              "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
            }
          },
          "planId": {
            "description": "Array of plan IDs.",
            "type": "array",
            "items": {
              "type": "string",
              "description": "Unique resource ID.",
              "maxLength": 50,
              "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
            }
          },
          "customFieldName": {
            "description": "Array of custom field names.",
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 60,
              "pattern": "^[\\w-]+$"
            }
          }
        },
        "example": {
          "organizationId": [
            "organizationId-id-1"
          ]
        }
      },
      "AclPermissions": {
        "type": "array",
        "items": {
          "type": "string",
          "format": "operationId"
        },
        "example": [
          "PostFile",
          "StorefrontGetAccount",
          "StorefrontGetWebsite",
          "StorefrontGetKycDocumentCollection",
          "StorefrontGetKycDocument",
          "StorefrontPostKycDocument"
        ]
      },
      "Acl": {
        "type": "array",
        "description": "Access Control List (ACL) information.",
        "items": {
          "type": "object",
          "required": [
            "scope",
            "permissions"
          ],
          "properties": {
            "scope": {
              "description": "Scope of the API key.",
              "$ref": "#/components/schemas/ApiKeyScope"
            },
            "permissions": {
              "description": "If you are creating a restricted API key, use this field to specify individual permissions.\nUse the wildcard character `*` to provide full access.",
              "$ref": "#/components/schemas/AclPermissions"
            }
          }
        }
      },
      "CustomerJWT": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the session.",
            "maxLength": 50,
            "example": "jwt_0YV7DEJX80CDRAKVTV478ZNJDR",
            "readOnly": true
          },
          "type": {
            "description": "Type of session.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "customer"
            ]
          },
          "token": {
            "description": "Token used for authentication.",
            "type": "string",
            "readOnly": true
          },
          "invalidate": {
            "description": "Specifies if the token must be invalidated after the exchange is performed.",
            "type": "boolean",
            "default": true,
            "example": true,
            "writeOnly": true
          },
          "oneTimePassword": {
            "description": "One-time password that is sent by email.\nThis value must contain digits only.",
            "type": "string",
            "pattern": "^[0-9]{6}$",
            "example": "123456",
            "writeOnly": true
          },
          "customerId": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomerId"
              }
            ]
          },
          "acl": {
            "$ref": "#/components/schemas/Acl"
          },
          "customClaims": {
            "type": "object",
            "additionalProperties": true,
            "example": {
              "documents": [
                "identity-proof",
                "address-proof"
              ],
              "redirectUrl": "https://mywebsite.com"
            }
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "expiredTime": {
            "description": "Date and time when the session expires.\nThe default value is one hour after the `createdTime` value.",
            "type": "string",
            "format": "date-time"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "customer"
                  ]
                }
              }
            }
          }
        }
      },
      "Blocklist": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the blocklist.",
            "readOnly": true,
            "maxLength": 50,
            "example": "blkl_0YV8XTSH9MD578386XQDWSEBNF"
          },
          "type": {
            "description": "Type of blocklist.",
            "type": "string",
            "enum": [
              "payment-card",
              "bank-account",
              "customer-id",
              "email",
              "email-domain",
              "ip-address",
              "country",
              "fingerprint",
              "bin",
              "address"
            ]
          },
          "value": {
            "description": "Value of the blocklist.",
            "type": "string"
          },
          "expirationTime": {
            "description": "Date and time when the blocklist expires.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "source": {
            "description": "Source that triggered the creation of the blocklist.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "enum": [
              "automated-blocklists",
              "manual-blocklists",
              "risk-score-rules"
            ],
            "example": "manual-blocklists"
          },
          "entityId": {
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "description": "ID of the user, transaction or dispute that triggered the creation of the blocklist.",
            "example": "txn_0YVDTQJ8YWDGQACV2N2N5SPWQ0"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "CouponRestrictionDiscountPerRedemption": {
        "type": "object",
        "description": "Restricts the number of times that the coupon can be applied by one\nredemption. For example, use this restriction to configure a coupon\nthat can only be applied to the first subscription renewal of a\nparticular product.",
        "required": [
          "type",
          "quantity"
        ],
        "properties": {
          "type": {
            "description": "Type of coupon restriction.",
            "type": "string",
            "enum": [
              "discounts-per-redemption"
            ]
          },
          "quantity": {
            "type": "integer",
            "description": "Permitted number of discounts per redemption."
          }
        }
      },
      "CurrencyCode": {
        "type": "string",
        "description": "Currency code in ISO 4217 format.",
        "minLength": 3,
        "maxLength": 3,
        "example": "USD",
        "x-label": "Currency",
        "x-sortable": true
      },
      "CouponRestrictionMaximumOrderAmount": {
        "type": "object",
        "description": "Specifies a maximum order amount for a coupon application.\nFor example, if the restriction amount is $20, \nthe coupon is only applied to invoices with a total amount of $20 or less.",
        "required": [
          "type",
          "amount",
          "currency"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "maximum-order-amount"
            ]
          },
          "amount": {
            "type": "number",
            "format": "double",
            "description": "Maximum order amount that is allowed to apply the coupon."
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          }
        }
      },
      "CouponRestrictionMinimumOrderAmount": {
        "type": "object",
        "description": "Specifies a minimum order amount for a coupon application. For\nexample, if the restriction amount is $20, the coupon is only\napplied to invoices with a total amount of $20 or more.",
        "required": [
          "type",
          "amount",
          "currency"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "minimum-order-amount"
            ]
          },
          "amount": {
            "type": "number",
            "format": "double",
            "description": "Minimum order quantity that is required to apply the coupon."
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          }
        }
      },
      "CouponRestrictionPaidByTime": {
        "type": "object",
        "description": "Specifies a date and time at which a coupon redemption expires if the invoice is not paid.",
        "required": [
          "type",
          "time"
        ],
        "properties": {
          "type": {
            "description": "Type of coupon restriction.",
            "type": "string",
            "enum": [
              "paid-by-time"
            ]
          },
          "time": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when a coupon redemption is no longer valid, and the coupon is removed from unpaid invoices if applied.\n\n> **Note:** This date-time cannot be changed."
          }
        }
      },
      "CouponRestrictionRestrictToInvoices": {
        "type": "object",
        "description": "Restricts a coupon to specific invoices.",
        "required": [
          "type",
          "invoiceIds"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "restrict-to-invoices"
            ]
          },
          "invoiceIds": {
            "type": "array",
            "description": "Invoice IDs on which a coupon can be applied.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CouponRestrictionRestrictToPlans": {
        "type": "object",
        "description": "Restricts a coupon to specific pricing plans.",
        "required": [
          "type",
          "planIds"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "restrict-to-plans"
            ]
          },
          "planIds": {
            "type": "array",
            "description": "Plan IDs on which a coupon can be applied.",
            "items": {
              "type": "string"
            }
          },
          "minimumQuantity": {
            "type": "integer",
            "default": 1,
            "description": "Minimum quantity that is required to apply the restriction and subsequent discount."
          }
        }
      },
      "CouponRestrictionRestrictToProducts": {
        "type": "object",
        "description": "Restricts a coupon to specific products.",
        "required": [
          "type",
          "productIds"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "restrict-to-products"
            ]
          },
          "productIds": {
            "type": "array",
            "description": "Product IDs on which a coupon can be applied.",
            "items": {
              "type": "string"
            }
          },
          "minimumQuantity": {
            "type": "integer",
            "default": 1,
            "description": "Minimum quantity that is required to apply the restriction and subsequent discount."
          }
        }
      },
      "CouponRestrictionRestrictToSubscriptions": {
        "type": "object",
        "description": "Restricts a coupon to specific order subscriptions.",
        "required": [
          "type",
          "subscriptionIds"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "restrict-to-subscriptions"
            ]
          },
          "subscriptionIds": {
            "type": "array",
            "description": "Subscription IDs on which a coupon can be applied.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "RedemptionRestriction": {
        "description": "Redemption restrictions.",
        "type": "object",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "discounts-per-redemption": "#/components/schemas/CouponRestrictionDiscountPerRedemption",
            "maximum-order-amount": "#/components/schemas/CouponRestrictionMaximumOrderAmount",
            "minimum-order-amount": "#/components/schemas/CouponRestrictionMinimumOrderAmount",
            "paid-by-time": "#/components/schemas/CouponRestrictionPaidByTime",
            "restrict-to-invoices": "#/components/schemas/CouponRestrictionRestrictToInvoices",
            "restrict-to-plans": "#/components/schemas/CouponRestrictionRestrictToPlans",
            "restrict-to-products": "#/components/schemas/CouponRestrictionRestrictToProducts",
            "restrict-to-subscriptions": "#/components/schemas/CouponRestrictionRestrictToSubscriptions"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/CouponRestrictionDiscountPerRedemption"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionMaximumOrderAmount"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionMinimumOrderAmount"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionPaidByTime"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToInvoices"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToPlans"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToProducts"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToSubscriptions"
          }
        ]
      },
      "CouponRedemption": {
        "type": "object",
        "description": "Coupon redemption log.",
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "Unique resource ID.",
            "maxLength": 50,
            "example": "cpn_rdm_01HXC82EEPW6YD3MPWJY7151VR"
          },
          "couponId": {
            "type": "string",
            "description": "ID of the coupon.",
            "maxLength": 50,
            "example": "cpn_0YVCNKF81GD778N4YNVGDJK558"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "additionalRestrictions": {
            "description": "Additional coupon redemption restrictions.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RedemptionRestriction"
            }
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "canceledTime": {
            "description": "Date and time when the coupon is canceled.",
            "readOnly": true,
            "x-sortable": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer",
                    "coupon"
                  ]
                }
              }
            }
          }
        }
      },
      "DiscountContext": {
        "type": "string",
        "description": "Context in which the discount applies.",
        "default": "items",
        "x-label": "Context",
        "x-sortable": true,
        "x-basic": true,
        "x-enumDescriptions": {
          "items": "items (less discounts)",
          "shipping": "shipping (less discounts)",
          "items-and-shipping": "items and shipping (less discounts)"
        },
        "enum": [
          "items",
          "shipping",
          "items-and-shipping"
        ]
      },
      "DiscountFixed": {
        "type": "object",
        "description": "Coupon fixed amount discount.",
        "required": [
          "amount",
          "currency",
          "type"
        ],
        "properties": {
          "amount": {
            "description": "Amount of discount.",
            "type": "number",
            "format": "double",
            "minimum": 0.01
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "type": {
            "type": "string",
            "enum": [
              "fixed"
            ],
            "x-label": "Type",
            "x-sortable": true,
            "x-basic": true
          },
          "context": {
            "$ref": "#/components/schemas/DiscountContext"
          }
        }
      },
      "DiscountPercent": {
        "type": "object",
        "description": "Coupon percent discount.",
        "required": [
          "value",
          "type"
        ],
        "properties": {
          "value": {
            "description": "Percentage of discount.",
            "type": "number",
            "format": "double",
            "minimum": 0.01,
            "maximum": 100
          },
          "type": {
            "type": "string",
            "enum": [
              "percent"
            ],
            "x-label": "Type",
            "x-sortable": true,
            "x-basic": true
          },
          "context": {
            "$ref": "#/components/schemas/DiscountContext"
          }
        }
      },
      "Discount": {
        "type": "object",
        "description": "Coupon discount.",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "fixed": "#/components/schemas/DiscountFixed",
            "percent": "#/components/schemas/DiscountPercent"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/DiscountFixed"
          },
          {
            "$ref": "#/components/schemas/DiscountPercent"
          }
        ]
      },
      "CouponRestrictionRedemptionsPerCustomer": {
        "type": "object",
        "description": "Restricts the number of times that a coupon can be redeemed by one\ncustomer. For example, use this restriction to limit the number of\nredemptions to one per customer.",
        "required": [
          "type",
          "quantity"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "redemptions-per-customer"
            ]
          },
          "quantity": {
            "type": "integer",
            "description": "Permitted number of redemptions per customer."
          }
        }
      },
      "CouponRestrictionRestrictToBxgy": {
        "type": "object",
        "description": "Provides \"buy X get Y\" promotions.\nThese promotions incentivize new customers to buy and also reward existing customers.\nThis restriction type enables you to add discounted plans to an invoice when a certain quantity of other plans are purchased.\nFor example, if a customer buys two or more books, they get one free bookmark.",
        "required": [
          "type",
          "buy",
          "get"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "restrict-to-bxgy"
            ]
          },
          "buy": {
            "type": "array",
            "description": "One or more plan and quantity definitions that must be purchased to receive all plans and quantities that are defined in the `get` instruction.\nAll `planId` values in this array must be unique.",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "planId",
                "quantity"
              ],
              "properties": {
                "planId": {
                  "type": "string",
                  "description": "Plan ID of the item being purchased.\nThis value must be unique within the `buy.items` array.",
                  "maxLength": 50,
                  "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                },
                "quantity": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Total quantity of the associated plan ID that must be purchased for this restriction to apply."
                }
              }
            }
          },
          "get": {
            "type": "array",
            "description": "One or more plan and quantity definitions that are added to a purchase if all definitions in the `buy` condition are met.\nAll `planId` values in this array must be unique.",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "planId",
                "quantity"
              ],
              "properties": {
                "planId": {
                  "type": "string",
                  "description": "Plan ID of the item that is to be received by the customer.\nThis value must be unique within the `get.items` array.",
                  "maxLength": 50,
                  "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                },
                "quantity": {
                  "type": "integer",
                  "minimum": 1,
                  "description": "Total quantity of the associated plan ID that is to be received by the customer."
                }
              }
            }
          }
        }
      },
      "CouponRestrictionRestrictToCountries": {
        "type": "object",
        "description": "Restricts a coupon for use in specific countries.",
        "required": [
          "type",
          "countries"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "restrict-to-countries"
            ]
          },
          "countries": {
            "type": "array",
            "description": "Countries where the coupon can be applied, in ISO Alpha-2 code format.\nFor examples, see [ISO.org](https://www.iso.org/obp/ui/#search/code/).",
            "items": {
              "type": "string",
              "pattern": "^[A-Z]{2}$"
            }
          }
        }
      },
      "CouponRestrictionRestrictToCustomerTags": {
        "type": "object",
        "description": "Restricts a coupon to customers with specific tags.",
        "required": [
          "type",
          "tags",
          "requireAllTags"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "restrict-to-customer-tags"
            ]
          },
          "tags": {
            "type": "array",
            "description": "Customer tags on which a coupon can be applied.",
            "items": {
              "type": "string"
            }
          },
          "requireAllTags": {
            "type": "boolean",
            "description": "Specifies if the customer must have all listed tags,\nor at least one of the listed tags, to redeem a coupon.",
            "enum": [
              true,
              false
            ],
            "x-enumDescriptions": {
              "true": "Customer must have all listed tags to redeem a coupon.",
              "false": "Customer must have at least one of the listed tags to redeem a coupon."
            }
          }
        }
      },
      "CouponRestrictionRestrictToCustomers": {
        "type": "object",
        "description": "Restricts a coupon to specific customers.",
        "required": [
          "type",
          "customerIds"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "restrict-to-customers"
            ]
          },
          "customerIds": {
            "type": "array",
            "description": "Customer IDs on which a coupon can be applied.",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CouponRestrictionExclusiveApplication": {
        "type": "object",
        "description": "Restricts a coupon so that it cannot be used in combination with other coupons.\nIf more than one coupon is active, a coupon with this restriction is only applied if it provides a larger discount than the other coupons combined.\nIf a coupon with this restriction is applied, all other coupons are removed.",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "restrict-to-exclusive-application"
            ]
          }
        }
      },
      "CouponRestrictionTotalRedemptions": {
        "type": "object",
        "description": "Restricts the number of times a coupon can be redeemed by different customers.",
        "required": [
          "type",
          "quantity"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of coupon restriction.",
            "enum": [
              "total-redemptions"
            ]
          },
          "quantity": {
            "type": "integer",
            "description": "Permitted total number of redemptions."
          }
        }
      },
      "CouponRestriction": {
        "description": "Coupon restrictions.",
        "type": "object",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "discounts-per-redemption": "#/components/schemas/CouponRestrictionDiscountPerRedemption",
            "maximum-order-amount": "#/components/schemas/CouponRestrictionMaximumOrderAmount",
            "minimum-order-amount": "#/components/schemas/CouponRestrictionMinimumOrderAmount",
            "paid-by-time": "#/components/schemas/CouponRestrictionPaidByTime",
            "redemptions-per-customer": "#/components/schemas/CouponRestrictionRedemptionsPerCustomer",
            "restrict-to-bxgy": "#/components/schemas/CouponRestrictionRestrictToBxgy",
            "restrict-to-countries": "#/components/schemas/CouponRestrictionRestrictToCountries",
            "restrict-to-customer-tags": "#/components/schemas/CouponRestrictionRestrictToCustomerTags",
            "restrict-to-customers": "#/components/schemas/CouponRestrictionRestrictToCustomers",
            "restrict-to-exclusive-application": "#/components/schemas/CouponRestrictionExclusiveApplication",
            "restrict-to-invoices": "#/components/schemas/CouponRestrictionRestrictToInvoices",
            "restrict-to-plans": "#/components/schemas/CouponRestrictionRestrictToPlans",
            "restrict-to-products": "#/components/schemas/CouponRestrictionRestrictToProducts",
            "restrict-to-subscriptions": "#/components/schemas/CouponRestrictionRestrictToSubscriptions",
            "total-redemptions": "#/components/schemas/CouponRestrictionTotalRedemptions"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/CouponRestrictionDiscountPerRedemption"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionExclusiveApplication"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionMaximumOrderAmount"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionMinimumOrderAmount"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionPaidByTime"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRedemptionsPerCustomer"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToBxgy"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToCountries"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToCustomerTags"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToCustomers"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToInvoices"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToPlans"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToProducts"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionRestrictToSubscriptions"
          },
          {
            "$ref": "#/components/schemas/CouponRestrictionTotalRedemptions"
          }
        ]
      },
      "Coupon": {
        "type": "object",
        "description": "Coupons and discounts.",
        "required": [
          "discount",
          "issuedTime"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the coupon.\nThis value is also known as the coupon redemption code.",
            "readOnly": true,
            "maxLength": 50,
            "example": "cpn_0YVCNKF81GD778N4YNVGDJK558"
          },
          "discount": {
            "$ref": "#/components/schemas/Discount"
          },
          "restrictions": {
            "description": "Coupon restrictions.\nAll `type` values in this array must be unique.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CouponRestriction"
            }
          },
          "redemptionsCount": {
            "type": "integer",
            "description": "Total number of times that a coupon is redeemed.",
            "minimum": 0,
            "readOnly": true
          },
          "status": {
            "type": "string",
            "description": "Specifies the current status of the coupon.",
            "readOnly": true,
            "enum": [
              "draft",
              "issued",
              "expired"
            ]
          },
          "description": {
            "type": "string",
            "x-basic": true,
            "description": "Description of the coupon.\nUse this field to provide a description for the invoice discount item.\n\nIf this field is empty,\nthe invoice discount item description uses the related coupon ID,\nin the following format: `Coupon \"COUPON-ID\"`."
          },
          "issuedTime": {
            "description": "Date and time when the coupon is issued.\nThis value may also be described as start time of the coupon.",
            "type": "string",
            "x-label": "Valid from",
            "x-sortable": true,
            "x-basic": true,
            "format": "date-time"
          },
          "expiredTime": {
            "description": "Date and time when the coupon expires.",
            "type": [
              "string",
              "null"
            ],
            "x-label": "Valid until",
            "x-sortable": true,
            "x-basic": true,
            "format": "date-time"
          },
          "revision": {
            "description": "Number of times the coupon data has been modified.\n\nUse the revision number when analyzing webhook data to\ndetermine if a change should take precedence over the current\nrepresentation.",
            "type": "integer",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "CouponExpiration": {
        "type": "object",
        "required": [
          "expiredTime"
        ],
        "properties": {
          "expiredTime": {
            "description": "Date and time when the coupon expires.\nThis value must be greater than the `issuedTime` value.\nIf this field contains a null or empty string, the coupon expires immediately.",
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "BlankProblem": {
        "description": "Problem Details JSON Object [[RFC7807](https://tools.ietf.org/html/rfc7807)].",
        "type": "object",
        "minProperties": 1,
        "additionalProperties": true,
        "properties": {
          "status": {
            "type": "integer",
            "description": "HTTP status code.",
            "minimum": 400,
            "maximum": 599
          },
          "title": {
            "type": "string",
            "description": "Short, human-readable summary of the problem type.\nIt SHOULD NOT change from occurrence to occurrence of the problem, except for purposes of localization."
          }
        }
      },
      "DocumentedProblem": {
        "type": "object",
        "allOf": [
          {
            "properties": {
              "type": {
                "type": "string",
                "description": "URI reference [[RFC3986](https://tools.ietf.org/html/rfc3986)] that identifies the problem type.\nIt should provide human-readable documentation for the problem type.\nWhen this member is not present, its value is assumed to be \"about:blank\".",
                "format": "uri",
                "example": "https://www.rebilly.com/docs/"
              }
            }
          },
          {
            "$ref": "#/components/schemas/BlankProblem"
          }
        ]
      },
      "DetailedProblem": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/BlankProblem"
          },
          {
            "properties": {
              "detail": {
                "type": "string",
                "description": "Human-readable explanation specific to this occurrence of the problem."
              }
            }
          }
        ]
      },
      "Problem": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/DocumentedProblem"
          },
          {
            "$ref": "#/components/schemas/DetailedProblem"
          }
        ]
      },
      "Error": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/Problem"
          },
          {
            "properties": {
              "error": {
                "deprecated": true,
                "type": "string"
              }
            }
          }
        ]
      },
      "CustomerCredential": {
        "type": "object",
        "required": [
          "username",
          "password",
          "customerId"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 50,
            "example": "cus_crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "username": {
            "description": "Username associated with the credential.",
            "type": "string"
          },
          "password": {
            "description": "Password associated with the credential.",
            "type": "string",
            "format": "password",
            "writeOnly": true
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "expiredTime": {
            "description": "Date and time when the credential expires.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer"
                  ]
                }
              }
            }
          }
        }
      },
      "ArrayCustomField": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "name": {
            "description": "Name of the custom field.",
            "type": "string",
            "readOnly": true
          },
          "type": {
            "description": "Describes the data type.\nThe custom field type value cannot be changed.\n\nArray of strings with up to 255 characters.\nThe maximum size is 1000 elements.",
            "type": "string",
            "enum": [
              "array"
            ]
          },
          "description": {
            "description": "Description of the custom field.",
            "type": [
              "string",
              "null"
            ]
          },
          "isEnabled": {
            "description": "Specifies if the custom field is enabled.",
            "type": "boolean",
            "default": true
          },
          "additionalSchema": {
            "type": [
              "object",
              "null"
            ],
            "description": "Additional schema which adds additional values constrains.",
            "properties": {
              "allowedValues": {
                "description": "List of allowed values.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "required": {
                "description": "Specifies if this value is required.\nThis value can be combined with any parameter and is available for custom fields of any type.",
                "type": "boolean"
              },
              "default": {
                "description": "Default value.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "BooleanCustomField": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "name": {
            "description": "Name of the custom field.",
            "type": "string",
            "readOnly": true
          },
          "type": {
            "description": "Describes the data type.\nThe custom field type value cannot be changed.\n\nSpecifies a `true` or `false` value.",
            "type": "string",
            "enum": [
              "boolean"
            ]
          },
          "description": {
            "description": "Description of the custom field.",
            "type": [
              "string",
              "null"
            ]
          },
          "isEnabled": {
            "description": "Specifies if custom field is enabled.",
            "type": "boolean",
            "default": true
          },
          "additionalSchema": {
            "type": [
              "object",
              "null"
            ],
            "description": "Additional schema which adds additional values constrains.",
            "properties": {
              "required": {
                "description": "Specifies if this value is required.",
                "type": "boolean"
              },
              "default": {
                "description": "Default value.",
                "type": "boolean"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "DateCustomField": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "name": {
            "description": "Name of the custom field.",
            "type": "string",
            "readOnly": true
          },
          "type": {
            "description": "Describes the data type.\nThe custom field type value cannot be changed.\n\nString in [full-date](https://www.rfc-editor.org/rfc/rfc3339) format (YYYY-MM-DD).",
            "type": "string",
            "enum": [
              "date"
            ]
          },
          "description": {
            "description": "Description of the custom field.",
            "type": [
              "string",
              "null"
            ]
          },
          "isEnabled": {
            "description": "Specifies if custom field is enabled.",
            "type": "boolean",
            "default": true
          },
          "additionalSchema": {
            "type": [
              "object",
              "null"
            ],
            "description": "Additional schema which adds additional values constrains.",
            "properties": {
              "required": {
                "description": "Specifies if this value is required.",
                "type": "boolean"
              },
              "default": {
                "description": "Default value.",
                "type": "string",
                "format": "date"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "DateTimeCustomField": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "name": {
            "description": "Name of the custom field.",
            "type": "string",
            "readOnly": true
          },
          "type": {
            "description": "Describes the data type.\nThe custom field type value cannot be changed.\n\nString in [date-time](https://www.rfc-editor.org/rfc/rfc3339) format (YYYY-MM-DDTHH:MM:SSZ).",
            "type": "string",
            "enum": [
              "datetime"
            ]
          },
          "description": {
            "description": "Description of the custom field.",
            "type": [
              "string",
              "null"
            ]
          },
          "isEnabled": {
            "description": "Specifies if custom field is enabled.",
            "type": "boolean",
            "default": true
          },
          "additionalSchema": {
            "type": [
              "object",
              "null"
            ],
            "description": "Additional schema which adds additional values constrains.",
            "properties": {
              "required": {
                "description": "Specifies if this value is required.",
                "type": "boolean"
              },
              "default": {
                "description": "Default value.",
                "type": "string",
                "format": "date-time"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "IntegerCustomField": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "name": {
            "description": "Name of the custom field.",
            "type": "string",
            "readOnly": true
          },
          "type": {
            "description": "Describes the data type.\nThe custom field type value cannot be changed.\n\nCardinal value of between `-2^31` and `2^31-1`.",
            "type": "string",
            "enum": [
              "integer"
            ]
          },
          "description": {
            "description": "Description of the custom field.",
            "type": [
              "string",
              "null"
            ]
          },
          "isEnabled": {
            "description": "Specifies if custom field is enabled.",
            "type": "boolean",
            "default": true
          },
          "additionalSchema": {
            "type": [
              "object",
              "null"
            ],
            "description": "Additional schema which adds additional values constrains.",
            "properties": {
              "minimum": {
                "description": "Minimum allowed integer.\nThis value can be combined with the `maximum` parameter.",
                "type": "integer"
              },
              "maximum": {
                "description": "Maximum allowed integer.\nThis value can be combined with the `minimum` parameter.",
                "type": "integer"
              },
              "required": {
                "description": "Specifies if this value is required.",
                "type": "boolean"
              },
              "default": {
                "description": "Default value.",
                "type": "integer"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "NumberCustomField": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "name": {
            "description": "Name of the custom field.",
            "type": "string",
            "readOnly": true
          },
          "type": {
            "description": "Describes the data type.\nThe custom field type value cannot be changed.\n\nFloat value. This field also accepts cardinal values which are interpreted as float.",
            "type": "string",
            "enum": [
              "number"
            ]
          },
          "description": {
            "description": "Description of the custom field.",
            "type": [
              "string",
              "null"
            ]
          },
          "isEnabled": {
            "description": "Specifies if custom field is enabled.",
            "type": "boolean",
            "default": true
          },
          "additionalSchema": {
            "type": [
              "object",
              "null"
            ],
            "description": "Additional schema which adds additional values constrains.",
            "properties": {
              "minimum": {
                "description": "Minimum allowed number.\nThis value can be combined with the `maximum` parameter.",
                "type": "number",
                "format": "double"
              },
              "maximum": {
                "description": "Maximum allowed number.\nThis value can be combined with the `minimum` parameter.",
                "type": "number",
                "format": "double"
              },
              "required": {
                "description": "Specifies if this value is required.",
                "type": "boolean"
              },
              "default": {
                "description": "Default value.",
                "type": "number",
                "format": "double"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StringCustomField": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "name": {
            "description": "Name of the custom field.",
            "type": "string",
            "readOnly": true
          },
          "type": {
            "description": "Describes the data type.\nThe custom field type cannot be changed.\n\nRegular string of up to 255 characters.",
            "type": "string",
            "enum": [
              "string"
            ]
          },
          "description": {
            "description": "Description of the custom field.",
            "type": [
              "string",
              "null"
            ]
          },
          "isEnabled": {
            "description": "Specifies if custom field is enabled.",
            "type": "boolean",
            "default": true
          },
          "additionalSchema": {
            "type": [
              "object",
              "null"
            ],
            "description": "Additional schema which adds additional values constrains.",
            "properties": {
              "allowedValues": {
                "description": "List of allowed values.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "maxLength": {
                "description": "Maximum allowed string length .\nA maximum length of 4000 characters can be configured.\nBy default, this value is set to 255.",
                "type": "integer"
              },
              "pattern": {
                "description": "Allowed regular expression of a string.",
                "type": "string",
                "example": "/^[0-9]+$/"
              },
              "required": {
                "description": "Specifies if this value is required.",
                "type": "boolean"
              },
              "default": {
                "description": "Default value.",
                "type": "string"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "MonetaryCustomField": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "name": {
            "description": "Name of the custom field.",
            "type": "string",
            "readOnly": true
          },
          "type": {
            "description": "Describes the data type.\nThe custom field type cannot be changed.\n\nA map of 3-letter currency, code, and amount.\nExample: `{\"currency\": \"EUR\", \"amount\": 25.30}`.",
            "type": "string",
            "enum": [
              "monetary"
            ]
          },
          "description": {
            "description": "Description of the custom field.",
            "type": [
              "string",
              "null"
            ]
          },
          "isEnabled": {
            "description": "Specifies if custom field is enabled.",
            "type": "boolean",
            "default": true
          },
          "additionalSchema": {
            "type": [
              "object",
              "null"
            ],
            "description": "Additional schema which adds additional values constrains.",
            "properties": {
              "required": {
                "description": "Specifies if this value is required.",
                "type": "boolean"
              },
              "default": {
                "description": "Default value.",
                "type": "object",
                "properties": {
                  "currency": {
                    "$ref": "#/components/schemas/CurrencyCode"
                  },
                  "amount": {
                    "type": "number",
                    "format": "double"
                  }
                }
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "CustomField": {
        "description": "Separate custom field schema.",
        "type": "object",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "array": "#/components/schemas/ArrayCustomField",
            "boolean": "#/components/schemas/BooleanCustomField",
            "date": "#/components/schemas/DateCustomField",
            "datetime": "#/components/schemas/DateTimeCustomField",
            "integer": "#/components/schemas/IntegerCustomField",
            "number": "#/components/schemas/NumberCustomField",
            "string": "#/components/schemas/StringCustomField",
            "monetary": "#/components/schemas/MonetaryCustomField"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/ArrayCustomField"
          },
          {
            "$ref": "#/components/schemas/BooleanCustomField"
          },
          {
            "$ref": "#/components/schemas/DateCustomField"
          },
          {
            "$ref": "#/components/schemas/DateTimeCustomField"
          },
          {
            "$ref": "#/components/schemas/IntegerCustomField"
          },
          {
            "$ref": "#/components/schemas/NumberCustomField"
          },
          {
            "$ref": "#/components/schemas/StringCustomField"
          },
          {
            "$ref": "#/components/schemas/MonetaryCustomField"
          }
        ]
      },
      "WebsiteId": {
        "type": "string",
        "description": "ID of the website.\nA website is where an organization obtains a customer.\nFor more information, see [Obtain an organization ID and website ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).",
        "maxLength": 50,
        "example": "web_0YV7DE4Z26DQSA1AC92FBJ7SEG"
      },
      "VaultedInstrument": {
        "title": "Vaulted payment instrument",
        "description": "Vaulted payment instrument.\n\nTo use this payment instrument for automatic subscription renewals,\nand for transactions when no specific payment instrument is provided by the user,\nset this as the default payment instrument.",
        "required": [
          "method",
          "paymentInstrumentId"
        ],
        "properties": {
          "method": {
            "description": "Payment method supported vault.\nFor more information, see [Payment instrument](https://www.rebilly.com/catalog/all/payment-instruments).",
            "type": "string",
            "enum": [
              "payment-card",
              "ach",
              "paypal"
            ]
          },
          "paymentInstrumentId": {
            "type": "string",
            "description": "ID of the payment instrument.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          }
        }
      },
      "PaymentMethod": {
        "type": "string",
        "description": "Payment method.",
        "enum": [
          "payment-card",
          "ach",
          "cash",
          "check",
          "paypal",
          "AdvCash",
          "Aera",
          "Affirm",
          "Afterpay",
          "Aircash",
          "Airpay",
          "Alfa-click",
          "Alipay",
          "AmazonPay",
          "Apple Pay",
          "AstroPay Card",
          "AstroPay-GO",
          "BankSEND",
          "BankReferenced",
          "bank-transfer",
          "bank-transfer-2",
          "bank-transfer-3",
          "bank-transfer-4",
          "bank-transfer-5",
          "bank-transfer-6",
          "bank-transfer-7",
          "bank-transfer-8",
          "bank-transfer-9",
          "Baloto",
          "Beeline",
          "Belfius-direct-net",
          "bitcoin",
          "Bizum",
          "Blik",
          "Boleto",
          "Boleto-2",
          "Boleto-3",
          "cash-deposit",
          "CASHlib",
          "CashToCode",
          "CCAvenue",
          "China UnionPay",
          "Clearpay",
          "Cleo",
          "CODVoucher",
          "Conekta-oxxo",
          "Conekta-spei",
          "cryptocurrency",
          "Cupon-de-pagos",
          "CyberSource",
          "Dimoco-pay-smart",
          "Directa24Card",
          "domestic-cards",
          "Efecty",
          "echeck",
          "ecoPayz",
          "ecoPayzTurkey",
          "ecoVoucher",
          "EPS",
          "ePay.bg",
          "Ethereum",
          "e-wallet",
          "ezyEFT",
          "eZeeWallet",
          "FasterPay",
          "Flexepin",
          "Giropay",
          "Google Pay",
          "Gpaysafe",
          "iCashOne Voucher",
          "iDebit",
          "iDEAL",
          "ING-homepay",
          "INOVAPAY-pin",
          "INOVAPAY-wallet",
          "InstaDebit",
          "InstantPayments",
          "instant-bank-transfer",
          "Interac-online",
          "Interac-eTransfer",
          "Interac-express-connect",
          "Interac",
          "invoice",
          "iWallet",
          "Jeton",
          "JetonCash",
          "jpay",
          "KakaoPay",
          "Khelocard",
          "Klarna",
          "KNOT",
          "Litecoin",
          "loonie",
          "LPG-online",
          "LPG-payment-card",
          "Matrix",
          "MaxiCash",
          "Megafon",
          "MercadoPago",
          "MiFinity-eWallet",
          "miscellaneous",
          "MobilePay",
          "Multibanco",
          "Bancontact",
          "Bancontact-mobile",
          "MTS",
          "MuchBetter",
          "MuchBetterVoucher",
          "MyFatoorah",
          "Neosurf",
          "Netbanking",
          "Neteller",
          "Nordea-Solo",
          "NordikCoin",
          "OchaPay",
          "online-bank-transfer",
          "Onlineueberweisen",
          "oriental-wallet",
          "OXXO",
          "P24",
          "Pagadito",
          "PagoEffectivo",
          "Pagsmile-lottery",
          "Pagsmile-deposit-express",
          "PayCash",
          "Payco",
          "Payeer",
          "PaymentAsia-crypto",
          "Paysafecard",
          "PayTabs",
          "Pay4Fun",
          "Paynote",
          "Paymero",
          "Paymero-QR",
          "PayU",
          "PayULatam",
          "Perfect-money",
          "Piastrix",
          "PIX",
          "PinPay",
          "phone",
          "PhonePe",
          "POLi",
          "PostFinance-card",
          "PostFinance-e-finance",
          "QIWI",
          "QPay",
          "QQPay",
          "rapyd-checkout",
          "rebilly-hosted-payment-form",
          "Resurs",
          "reverse-withdrawal",
          "Ripple",
          "SafetyPay",
          "Samsung Pay",
          "SEPA",
          "Siirto",
          "Skrill",
          "Skrill Rapid Transfer",
          "SMSVoucher",
          "Sofort",
          "SparkPay",
          "SPEI",
          "swift-dbt",
          "Tele2",
          "Telr",
          "Terminaly-RF",
          "Tether",
          "ToditoCash-card",
          "Trustly",
          "Tupay",
          "TWINT",
          "UniCrypt",
          "UPayCard",
          "UPI",
          "USD-coin",
          "VCreditos",
          "VegaWallet",
          "VenusPoint",
          "Viva",
          "voucher",
          "voucher-2",
          "voucher-3",
          "voucher-4",
          "Wallet88",
          "Webmoney",
          "Webpay",
          "Webpay-2",
          "Webpay Card",
          "WeChat Pay",
          "XPay-P2P",
          "XPay-QR",
          "Yandex-money",
          "Zotapay",
          "Zimpler",
          "Zip"
        ]
      },
      "AlternativePaymentInstrument": {
        "title": "Alternative instrument",
        "description": "Alternative payment method instrument.\n\nTo use this payment instrument for automatic subscription renewals,\nand for transactions when no specific payment instrument is provided by the user,\nset this as the default payment instrument.",
        "type": "object",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "allOf": [
              {
                "$ref": "#/components/schemas/PaymentMethod"
              },
              {
                "not": {
                  "enum": [
                    "payment-card",
                    "ach",
                    "paypal",
                    "cash",
                    "check"
                  ]
                }
              }
            ]
          },
          "paymentInstrumentId": {
            "type": "string",
            "description": "ID of the payment instrument.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "reference": {
            "description": "Reference data.\nThis field is available only for the `bank-transfer` payment method.",
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "CashInstrument": {
        "title": "Cash",
        "description": "Cash payment instrument object.\n\nTo use this payment instrument for automatic subscription renewals,\nand for transactions when no specific payment instrument is provided by the user,\nset this as the default payment instrument.",
        "type": "object",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "cash"
            ]
          },
          "receivedBy": {
            "description": "Individual or entity that received the payment.",
            "type": "string"
          }
        }
      },
      "CheckInstrument": {
        "title": "Check",
        "description": "Check payment instrument object.\n\nTo use this payment instrument for automatic subscription renewals,\nand for transactions when no specific payment instrument is provided by the user,\nset this as the default payment instrument.",
        "type": "object",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "check"
            ]
          },
          "reference": {
            "description": "Reference data.",
            "type": "string"
          }
        }
      },
      "ResourceCustomFields": {
        "description": "Use custom fields to extend a resource scheme to include custom data that is not provided as a common field.\nFor more information, see [Custom fields](https://www.rebilly.com/catalog/all/custom-fields).",
        "type": "object",
        "default": {},
        "example": {
          "foo": "bar"
        }
      },
      "ContactPhoneNumbers": {
        "description": "List of phone numbers associated with the contact.",
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "label",
            "value"
          ],
          "properties": {
            "label": {
              "description": "Phone number label or name.",
              "type": "string",
              "maxLength": 45,
              "example": "main"
            },
            "value": {
              "description": "Phone number value.",
              "type": "string",
              "maxLength": 50,
              "example": "1-512-777-0269"
            },
            "primary": {
              "description": "Specifies if the phone number is the contact's primary phone number.",
              "type": "boolean",
              "example": true
            }
          }
        }
      },
      "ContactEmails": {
        "description": "List of email addresses associated with the contact.",
        "type": "array",
        "items": {
          "type": "object",
          "required": [
            "label",
            "value"
          ],
          "properties": {
            "label": {
              "description": "Email label or name.",
              "type": "string",
              "maxLength": 45,
              "example": "main"
            },
            "value": {
              "description": "Email address value.",
              "type": "string",
              "format": "email",
              "maxLength": 255,
              "example": "rebilly@example.com"
            },
            "primary": {
              "description": "Specifies if the email address is the contact's primary email address.",
              "type": "boolean",
              "example": true
            }
          }
        }
      },
      "ContactObject": {
        "type": "object",
        "description": "Contact's information.",
        "properties": {
          "firstName": {
            "description": "Contact's first name.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[\\u0000-\\uFFFF]+$",
            "maxLength": 45,
            "example": "Benjamin"
          },
          "lastName": {
            "description": "Contact's last name.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[\\u0000-\\uFFFF]+$",
            "maxLength": 45,
            "example": "Franklin"
          },
          "organization": {
            "description": "Contact's organization.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[\\u0000-\\uFFFF]+$",
            "maxLength": 255,
            "example": "Rebilly"
          },
          "address": {
            "description": "First line of the contact's street address.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[\\u0000-\\uFFFF]+$",
            "maxLength": 60,
            "example": "36 Craven St"
          },
          "address2": {
            "description": "Second line of the contact's street address.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[\\u0000-\\uFFFF]+$",
            "maxLength": 60
          },
          "city": {
            "description": "Contact's city of residence.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[\\u0000-\\uFFFF]+$",
            "maxLength": 45,
            "example": "Austin"
          },
          "region": {
            "description": "Contact's region of residence.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[\\u0000-\\uFFFF]+$",
            "maxLength": 45,
            "example": "Texas"
          },
          "country": {
            "description": "Contact's country of residence in ISO 3166 alpha-2 country code.\nFor examples, see [ISO.org](https://www.iso.org/obp/ui/#search/code/).",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{2}$",
            "maxLength": 2,
            "example": "GB"
          },
          "postalCode": {
            "description": "Contact's postal code.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[\\w\\s\\-]+$",
            "maxLength": 10,
            "example": "WC2N 5NF"
          },
          "phoneNumbers": {
            "$ref": "#/components/schemas/ContactPhoneNumbers"
          },
          "emails": {
            "$ref": "#/components/schemas/ContactEmails"
          },
          "dob": {
            "description": "Contact's date of birth in ISO-8601 `YYYY-MM-DD` format.",
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "example": "1980-04-01"
          },
          "jobTitle": {
            "description": "Contact's job title.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[\\u0000-\\uFFFF]+$",
            "maxLength": 255,
            "example": "CEO"
          },
          "hash": {
            "description": "Hash value for the contact.\nUse this value to compare contacts for identical attribute values.",
            "type": "string",
            "maxLength": 40,
            "example": "056ae6d97c788b9e98b049ebafd7b229bf852221",
            "readOnly": true
          }
        }
      },
      "Company": {
        "type": [
          "object",
          "null"
        ],
        "description": "Company information that is associated with the customer's primary email address domain.\n\nThis is a paid feature, to enable it [contact Rebilly](https://www.rebilly.com/support/).",
        "readOnly": true,
        "properties": {
          "name": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the company."
          },
          "domain": {
            "type": "string",
            "description": "Website domain of the company."
          },
          "yearFounded": {
            "type": [
              "number",
              "null"
            ],
            "description": "Founding year of the company.",
            "format": "integer"
          },
          "industry": {
            "type": [
              "string",
              "null"
            ],
            "description": "Industry the company is associated with."
          },
          "employeesCount": {
            "type": [
              "number",
              "null"
            ],
            "description": "Number of employees in the company.",
            "format": "integer"
          },
          "country": {
            "type": [
              "string",
              "null"
            ],
            "description": "Country where the company is based."
          },
          "locality": {
            "type": [
              "string",
              "null"
            ],
            "description": "Locality or region where the company is based."
          },
          "_links": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "linkedin"
                  ]
                }
              }
            }
          }
        }
      },
      "CustomerAverageValue": {
        "type": "object",
        "readOnly": true,
        "description": "Average customer value.",
        "properties": {
          "currency": {
            "description": "Merchant's reporting currency.",
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "amount": {
            "x-type": "Money",
            "x-label": "Average Value",
            "x-sortable": true,
            "x-basic": true,
            "description": "Average amount of approved payments in the merchant's reporting currency.",
            "type": "number",
            "format": "double"
          },
          "amountUsd": {
            "description": "Average approved payment amount in USD.",
            "type": "number",
            "format": "double"
          }
        }
      },
      "CustomerLifetimeRevenue": {
        "type": "object",
        "readOnly": true,
        "description": "Customer's lifetime revenue.",
        "properties": {
          "currency": {
            "description": "Merchant's reporting currency.",
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "amount": {
            "x-type": "Money",
            "x-label": "Lifetime Revenue",
            "x-sortable": true,
            "x-basic": true,
            "description": "Revenue amount in the merchant's reporting currency.",
            "type": "number",
            "format": "double"
          },
          "amountUsd": {
            "description": "Revenue amount in USD.",
            "type": "number",
            "format": "double"
          }
        }
      },
      "OrganizationId": {
        "type": "string",
        "description": "Unique organization identifier.\nAn organization is an entity that represents a company.\nFor more information, see [Obtain an organization ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).",
        "maxLength": 50,
        "example": "org_0YVDM8RC7GDADADSBSMW124JA8"
      },
      "TaxNumber": {
        "type": "object",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of the tax number.",
            "enum": [
              "eu-vat",
              "other"
            ],
            "example": "eu-vat"
          },
          "value": {
            "type": "string",
            "description": "Value of the tax number.",
            "example": "GB980780684"
          },
          "isDefault": {
            "type": "boolean",
            "description": "Determines if the tax number is selected as default to display on invoices.",
            "example": true
          },
          "isValid": {
            "type": [
              "boolean",
              "null"
            ],
            "description": "Determines if the tax number passed the EU official [VIES validation](https://ec.europa.eu/taxation_customs/vies/#/vat-validation).",
            "example": true,
            "readOnly": true
          }
        }
      },
      "LeadSourceData": {
        "type": "object",
        "description": "Lead source information.",
        "properties": {
          "medium": {
            "description": "Category of the lead source traffic.\nFor example, the medium could be organic search, Google ads, Display ads, and so on.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "source": {
            "description": "Domain, platform, or channel from which the lead source originates.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "campaign": {
            "description": "Campaign name of the lead source.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "term": {
            "description": "Term associated with a lead source.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "content": {
            "description": "Content contained in the lead source content.\nFor example, content could be graphics, video, and so on.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "affiliate": {
            "description": "Individual or entity that is affiliated with the lead source.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "subAffiliate": {
            "description": "Individual or entity that is associated with a lead source affiliate.\nIn other products, this field may also be referred to as sub ID or click ID in some.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "salesAgent": {
            "description": "Name of the sales agent associated with the lead source.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "clickId": {
            "description": "ID of the lead source click.\nThis value is passed in the ad click URL for tracking and campaign attribution.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "path": {
            "description": "URL from which the lead source originates.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "referrer": {
            "description": "Lead source [`referrer` URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer).",
            "type": [
              "string",
              "null"
            ],
            "format": "uri",
            "maxLength": 2083,
            "example": "https://www.rebilly.com"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer"
                  ]
                }
              }
            }
          }
        }
      },
      "Customer": {
        "type": "object",
        "description": "Customer information.",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the customer.",
            "readOnly": true,
            "example": "cus_0YV7DDSDD1C8DA64KHH2W33CPF",
            "maxLength": 50
          },
          "email": {
            "description": "Customer's email address.",
            "type": [
              "string",
              "null"
            ],
            "format": "email",
            "readOnly": true,
            "x-sortable": true,
            "x-basic": true
          },
          "firstName": {
            "description": "Customer's first name.",
            "type": [
              "string",
              "null"
            ],
            "x-basic": true,
            "readOnly": true
          },
          "lastName": {
            "description": "Customer's last name.",
            "type": [
              "string",
              "null"
            ],
            "x-sortable": true,
            "x-basic": true,
            "readOnly": true
          },
          "websiteId": {
            "x-sortable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/WebsiteId"
              }
            ]
          },
          "paymentToken": {
            "type": "string",
            "writeOnly": true,
            "description": "Write-only payment token.\nIf supplied, the token is converted into a payment instrument and set as the `defaultPaymentInstrument` value.\nIf both are supplied, the value of this property overrides the `defaultPaymentInstrument` value.\nThe token expires after first use."
          },
          "defaultPaymentInstrument": {
            "type": [
              "object",
              "null"
            ],
            "oneOf": [
              {
                "$ref": "#/components/schemas/VaultedInstrument"
              },
              {
                "$ref": "#/components/schemas/AlternativePaymentInstrument"
              },
              {
                "$ref": "#/components/schemas/CashInstrument"
              },
              {
                "$ref": "#/components/schemas/CheckInstrument"
              }
            ]
          },
          "preferredPayoutInstrumentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the customer's preferred payment instrument for payouts.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N",
            "default": null
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "primaryAddress": {
            "description": "Customer's primary address.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "company": {
            "$ref": "#/components/schemas/Company"
          },
          "averageValue": {
            "$ref": "#/components/schemas/CustomerAverageValue"
          },
          "paymentCount": {
            "x-label": "Payments",
            "x-sortable": true,
            "x-basic": true,
            "description": "Total number of approved payments made by the customer.\nPayments are the result of `sale` or `capture` transactions.",
            "readOnly": true,
            "type": "integer"
          },
          "lastPaymentTime": {
            "x-label": "Last Payment",
            "x-sortable": true,
            "x-basic": true,
            "description": "Date and time when the customer made their last approved payment.\nPayments are the result of `sale` or `capture` transactions.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "lifetimeRevenue": {
            "$ref": "#/components/schemas/CustomerLifetimeRevenue"
          },
          "invoiceCount": {
            "x-sortable": true,
            "description": "Total number of invoices issued to the customer.\nThis value is auto-incrementing.\nIf this value is `0`, the record relates to a lead.\nA lead is a customer who has not made a payment yet.\nIf this value is greater than or equal to `1` the record relates to a customer.",
            "readOnly": true,
            "type": "integer"
          },
          "tags": {
            "description": "List of customer tags.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tag"
            }
          },
          "revision": {
            "description": "Number of times the customer's data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "isEddRequired": {
            "description": "Specifies if Enhanced Due Diligence (EDD) is enabled for this customer.\nFor more information, see [Enhanced Due Diligence](https://www.rebilly.com/docs/kyc-and-aml/edd/).",
            "type": "boolean",
            "default": false
          },
          "hasFulfilledKyc": {
            "description": "Specifies if the customer has accepted and reviewed identity and address documents, or an accepted credit file document.",
            "type": "boolean",
            "readOnly": true
          },
          "organizationId": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/OrganizationId"
              }
            ]
          },
          "locale": {
            "type": [
              "string",
              "null"
            ],
            "description": "Language locale identifier in [RFC 5646](https://tools.ietf.org/html/rfc5646) format.",
            "example": "fr-FR",
            "default": null
          },
          "taxNumbers": {
            "type": [
              "array",
              "null"
            ],
            "description": "Tax numbers of the customer.",
            "items": {
              "$ref": "#/components/schemas/TaxNumber"
            }
          },
          "leadSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LeadSourceData"
              }
            ],
            "writeOnly": true
          },
          "personId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the associated person.",
            "maxLength": 50,
            "example": "prs_0YV7DDSDD1C8DA64KHH2W33CPF"
          },
          "notificationEmails": {
            "type": "array",
            "description": "Additional email addresses for notification delivery.",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "attachments",
                    "defaultPaymentInstrument",
                    "leadSource",
                    "website"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested using the `expand` query string parameter.",
            "readOnly": true,
            "properties": {
              "defaultPaymentInstrument": {
                "type": "object"
              },
              "website": {
                "type": "object"
              },
              "leadSource": {
                "type": "object"
              }
            }
          }
        }
      },
      "CustomerTimelineCustomEvent": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the customer timeline custom event.",
            "readOnly": true,
            "maxLength": 50,
            "example": "tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC"
          },
          "name": {
            "description": "Name of the customer timeline custom event type.\nThis value must not conflict with any system event name.",
            "type": "string",
            "minLength": 1,
            "maxLength": 255
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "LeadSource": {
        "allOf": [
          {
            "$ref": "#/components/schemas/LeadSourceData"
          },
          {
            "type": "object",
            "properties": {
              "original": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/LeadSourceData"
                  }
                ]
              }
            }
          }
        ]
      },
      "RedemptionCancelTimelineAction": {
        "description": "Cancel redemption.",
        "type": "object",
        "readOnly": true,
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "redemption-cancel"
            ]
          },
          "redemptionId": {
            "$ref": "#/components/schemas/ResourceId"
          }
        }
      },
      "ResendEmailTimelineAction": {
        "type": "object",
        "description": "Resend email action.",
        "readOnly": true,
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "resend-email"
            ]
          },
          "messageId": {
            "$ref": "#/components/schemas/ResourceId"
          }
        }
      },
      "RulesetRestoreTimelineAction": {
        "type": "object",
        "description": "Restore ruleset version.",
        "readOnly": true,
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "ruleset-restore"
            ]
          },
          "version": {
            "type": "integer",
            "description": "Version of the ruleset to restore."
          }
        }
      },
      "ShowEddSearchLogsTimelineAction": {
        "type": "object",
        "description": "Show Enhanced Due Diligence (EDD) search logs action.",
        "readOnly": true,
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "show-edd-search-logs"
            ]
          },
          "searchLogId": {
            "$ref": "#/components/schemas/ResourceId"
          },
          "type": {
            "type": "string",
            "enum": [
              "arrest",
              "bankruptcy",
              "fraud",
              "occupation"
            ]
          }
        }
      },
      "TimelineAction": {
        "type": "object",
        "discriminator": {
          "propertyName": "action",
          "mapping": {
            "redemption-cancel": "#/components/schemas/RedemptionCancelTimelineAction",
            "resend-email": "#/components/schemas/ResendEmailTimelineAction",
            "ruleset-restore": "#/components/schemas/RulesetRestoreTimelineAction",
            "show-edd-search-logs": "#/components/schemas/ShowEddSearchLogsTimelineAction"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/RedemptionCancelTimelineAction"
          },
          {
            "$ref": "#/components/schemas/ResendEmailTimelineAction"
          },
          {
            "$ref": "#/components/schemas/RulesetRestoreTimelineAction"
          },
          {
            "$ref": "#/components/schemas/ShowEddSearchLogsTimelineAction"
          }
        ]
      },
      "TimelineTable": {
        "type": "object",
        "description": "Additional timeline message information.",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "three-columns": "#/components/schemas/ThreeColumnsTimelineTable",
            "two-columns": "#/components/schemas/TwoColumnsTimelineTable",
            "one-column": "#/components/schemas/OneColumnTimelineTable",
            "list": "#/components/schemas/ListTimelineTable"
          }
        },
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "list",
              "one-columns",
              "two-columns",
              "three-columns"
            ]
          },
          "title": {
            "type": "string",
            "description": "Data table title."
          },
          "footer": {
            "type": "string",
            "description": "Data table footer."
          }
        }
      },
      "ThreeColumnsTimelineTable": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TimelineTable"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "description": "Table data.\nEach array element represents a table row.",
                "items": {
                  "type": "object",
                  "properties": {
                    "attribute": {
                      "type": "string"
                    },
                    "previousValue": {
                      "type": [
                        "string",
                        "integer",
                        "number",
                        "boolean"
                      ]
                    },
                    "newValue": {
                      "type": [
                        "string",
                        "integer",
                        "number",
                        "boolean"
                      ]
                    }
                  },
                  "example": {
                    "attribute": "Descriptor",
                    "previousValue": "test.com",
                    "newValue": "new-test.com"
                  }
                }
              }
            }
          }
        ]
      },
      "TwoColumnsTimelineTable": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TimelineTable"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "description": "Table data.\nEach array element represents a table row.",
                "items": {
                  "type": "object",
                  "properties": {
                    "attribute": {
                      "type": "string"
                    },
                    "value": {
                      "type": [
                        "string",
                        "integer",
                        "number",
                        "boolean"
                      ]
                    }
                  },
                  "example": {
                    "attribute": "Who",
                    "value": "John Doe"
                  }
                }
              }
            }
          }
        ]
      },
      "OneColumnTimelineTable": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TimelineTable"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "description": "Table data.\nEach array element represents a table row.",
                "items": {
                  "type": "object",
                  "properties": {
                    "attribute": {
                      "type": "string"
                    },
                    "value": {
                      "type": [
                        "string",
                        "integer",
                        "number",
                        "boolean"
                      ]
                    }
                  },
                  "example": {
                    "attribute": "Who",
                    "value": "John Doe"
                  }
                }
              }
            }
          }
        ]
      },
      "ListTimelineTable": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TimelineTable"
          },
          {
            "type": "object",
            "properties": {
              "data": {
                "type": "array",
                "description": "Table data.\nEach array element represents a table row.",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        ]
      },
      "TimelineExtraData": {
        "type": "object",
        "description": "Additional data.",
        "readOnly": true,
        "properties": {
          "actions": {
            "description": "Actions available for a timeline message.\nIf no actions are available, this field is empty.",
            "type": "array",
            "minItems": 0,
            "items": {
              "$ref": "#/components/schemas/TimelineAction"
            }
          },
          "tables": {
            "description": "Table data that is attached to the timeline message.",
            "type": "array",
            "minItems": 0,
            "items": {
              "$ref": "#/components/schemas/TimelineTable"
            }
          },
          "author": {
            "type": "object",
            "description": "Author of the timeline message.",
            "properties": {
              "userFullName": {
                "description": "Full name of the author.",
                "type": "string"
              },
              "userId": {
                "description": "ID of the author.",
                "type": "string",
                "maxLength": 50,
                "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
              }
            }
          },
          "mentions": {
            "description": "User mentions, or tags, in a timeline.",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "@test@mail.com": "userId-1"
            }
          },
          "links": {
            "description": "Links that are attached to a timeline message.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "resourceType": {
                  "type": "string",
                  "enum": [
                    "kyc-document",
                    "invoice",
                    "subscription",
                    "transaction",
                    "email-message",
                    "dispute",
                    "coupon",
                    "external"
                  ]
                },
                "resourceId": {
                  "$ref": "#/components/schemas/ResourceId"
                },
                "placeholder": {
                  "type": "string",
                  "example": "KYC document"
                },
                "externalUrl": {
                  "type": "string",
                  "example": "http://example.com"
                }
              }
            }
          }
        }
      },
      "ServerTimestamp": {
        "type": "string",
        "description": "Read-only timestamp in ISO 8601 date-time format.",
        "format": "date-time",
        "readOnly": true
      },
      "CustomerTimeline": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the customer timeline custom event.",
            "readOnly": true,
            "maxLength": 50,
            "example": "tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC"
          },
          "type": {
            "description": "Type of timeline message.",
            "type": "string",
            "enum": [
              "account-password-reset-requested",
              "account-verification-requested",
              "aml-list-was-possibly-matched",
              "deposit-request-completed",
              "deposit-request-created",
              "deposit-request-expired",
              "deposit-request-started",
              "coupon-applied",
              "coupon-redeemed",
              "coupon-redemption-canceled",
              "custom-event",
              "custom-event-processed",
              "custom-fields-changed",
              "customer-bank-account-blocked",
              "customer-blocked",
              "customer-comment-created",
              "customer-created",
              "customer-merged",
              "customer-payment-card-blocked",
              "customer-requested-otp",
              "customer-tagged",
              "customer-untagged",
              "default-payment-instrument-changed",
              "email-message-sent",
              "experian-check-performed",
              "invoice-abandoned",
              "invoice-created",
              "invoice-disputed",
              "invoice-issued",
              "invoice-paid",
              "invoice-partially-paid",
              "invoice-partially-refunded",
              "invoice-past-due",
              "invoice-refunded",
              "invoice-reissued",
              "invoice-revenue-recognized",
              "invoice-voided",
              "kyc-document-accepted",
              "kyc-document-created",
              "kyc-document-modified",
              "kyc-document-rejected",
              "kyc-document-reviewed",
              "kyc-request-fulfilled",
              "lead-source-changed",
              "order-activated",
              "order-canceled",
              "order-churned",
              "order-completed",
              "order-created",
              "order-downgraded",
              "order-paid-early",
              "order-reactivated",
              "order-renewed",
              "order-trial-ended",
              "order-upgraded",
              "payment-card-expiration-was-modified",
              "payment-card-expired",
              "payment-instrument-created",
              "payment-instrument-deactivated",
              "primary-address-changed",
              "quickbooks-customer-created",
              "quickbooks-customer-task-failed",
              "quote-canceled",
              "quote-created",
              "quote-expired",
              "quote-issued",
              "quote-order-attached",
              "quote-recalled",
              "quote-rejected",
              "quote-updated",
              "refund-was-reflected-in-invoices",
              "subscription-paused",
              "subscription-resumed",
              "subscription-trial-end-changed",
              "transaction-abandoned",
              "transaction-amount-discrepancy-found",
              "transaction-approved",
              "transaction-canceled",
              "transaction-declined",
              "transaction-discrepancy-found",
              "transaction-disputed",
              "transaction-reconciled",
              "transaction-refunded",
              "transaction-voided",
              "transaction-waiting-gateway"
            ]
          },
          "customEventType": {
            "description": "Timeline custom event type.\nUsed with `custom-event` type.\nThis value must be defined using the [Create customer timeline custom event type](https://www.rebilly.com/catalog/all/customers-timeline/postcustomertimelinecustomeventtype) operation.",
            "type": [
              "string",
              "null"
            ],
            "minLength": 1,
            "maxLength": 255
          },
          "customData": {
            "description": "Timeline custom event data.\nUsed with `custom-event` type.\nTransforms to `extraData` two-column table in response.",
            "type": "object",
            "writeOnly": true,
            "example": {
              "customAttribute": "customValue",
              "otherAttribute": "otherValue"
            }
          },
          "triggeredBy": {
            "description": "Specifies who, or what, triggered the timeline event.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "rebilly",
              "app",
              "direct-api"
            ]
          },
          "message": {
            "description": "Detailed message description.",
            "type": "string"
          },
          "extraData": {
            "$ref": "#/components/schemas/TimelineExtraData"
          },
          "occurredTime": {
            "description": "Date and time when the timeline message occurred.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "Dispute": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the dispute.",
            "readOnly": true,
            "maxLength": 50,
            "example": "dp_0YVCE8J5F2DE58FV0S8YASW4HK"
          },
          "customerId": {
            "description": "ID of the customer who is disputing a transaction.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 50,
            "example": "cus_0YV7DDSDD1C8DA64KHH2W33CPF"
          },
          "transactionId": {
            "description": "ID of the disputed transaction.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "txn_0YVDTQJ8YWDGQACV2N2N5SPWQ0"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "amount": {
            "description": "Dispute amount.",
            "type": "number",
            "format": "double"
          },
          "acquirerReferenceNumber": {
            "description": "Acquirer reference number for the dispute.",
            "type": [
              "string",
              "null"
            ]
          },
          "caseId": {
            "description": "Case ID of the dispute.",
            "type": [
              "string",
              "null"
            ]
          },
          "reasonCode": {
            "description": "Code used in the chargeback that describes the reason for the dispute.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "reasonDescription": {
            "description": "Description of the reason for the dispute.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512,
            "readOnly": true
          },
          "category": {
            "description": "Category of dispute.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "fraud",
              "authorization",
              "processing-errors",
              "consumer-disputes",
              "uncategorized",
              "bank-return"
            ]
          },
          "type": {
            "description": "Type of dispute.",
            "type": "string",
            "enum": [
              "information-request",
              "first-chargeback",
              "second-chargeback",
              "arbitration",
              "fraud",
              "ethoca-alert",
              "verifi-alert",
              "bank-return",
              "paypal-claim",
              "representment",
              "inquiry",
              "forced-refund",
              "collaboration"
            ]
          },
          "status": {
            "description": "Status of the dispute.",
            "type": "string",
            "enum": [
              "response-needed",
              "under-review",
              "forfeited",
              "won",
              "lost",
              "unknown"
            ]
          },
          "postedTime": {
            "description": "Date and time when the dispute is posted.",
            "type": "string",
            "format": "date-time"
          },
          "deadlineTime": {
            "description": "Latest date and time by when a merchant must submit a representment for a dispute.\nIf the deadline is missed, the merchant loses the dispute.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "rawResponse": {
            "description": "Raw response from the payment gateway that processed the disputed transaction.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "resolvedTime": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Date and time when the dispute is resolved.",
            "readOnly": true
          },
          "source": {
            "description": "Source of the dispute.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "enum": [
              null,
              "api",
              "manual",
              "sftp",
              "webhook"
            ]
          },
          "revision": {
            "description": "Number of times the dispute data has been modified.\n\nUse the revision number when analyzing webhook data to\ndetermine if a change should take precedence over the current\nrepresentation.",
            "type": "integer",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "transaction",
                    "customer",
                    "attachments"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "transaction": {
                "type": "object"
              },
              "customer": {
                "type": "object"
              }
            }
          }
        }
      },
      "TransactionId": {
        "type": "string",
        "description": "ID of the transaction.",
        "maxLength": 50,
        "example": "txn_0YVDTQJ8YWDGQACV2N2N5SPWQ0"
      },
      "File": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the file.",
            "readOnly": true,
            "maxLength": 50,
            "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
          },
          "name": {
            "description": "Original file name.",
            "type": "string",
            "maxLength": 255
          },
          "extension": {
            "description": "File extension.",
            "type": "string"
          },
          "description": {
            "description": "Description of the file.",
            "type": "string",
            "maxLength": 255
          },
          "sourceType": {
            "description": "Source of the file.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "upload",
              "camera",
              "organization-export",
              "organization-closure-export",
              null
            ],
            "example": "upload"
          },
          "tags": {
            "description": "List of tags associated with the file.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "mime": {
            "description": "MIME type of the file.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "image/png",
              "image/jpeg",
              "image/gif",
              "application/pdf",
              "application/json",
              "application/zip",
              "text/csv"
            ]
          },
          "size": {
            "description": "File size, in bytes.",
            "type": "integer",
            "readOnly": true
          },
          "width": {
            "description": "Width of the image.\nThis field is applicable to images only.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true
          },
          "height": {
            "description": "Height of the image.\nThis field is applicable to images only.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true
          },
          "sha1": {
            "description": "Hash sum of the file.",
            "type": "string",
            "readOnly": true
          },
          "exifData": {
            "description": "Collection of EXIF tags contained in the image metadata.\nThis field is applicable to images only.",
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "example": {
              "FileSize": 120,
              "Software": "GIMP 2.4.5"
            }
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "isPublic": {
            "description": "Specifies if the file is available publicly without authentication.\nIf this value is `true`, the permalink in the `_links` section contains the public URL.",
            "type": "boolean"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "download",
                    "signedLink",
                    "permalink"
                  ]
                }
              }
            }
          }
        }
      },
      "FileCreateFromInline": {
        "type": "object",
        "required": [
          "file"
        ],
        "properties": {
          "file": {
            "description": "File in base64 encoded format.",
            "type": "string",
            "example": "R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs="
          },
          "isPublic": {
            "description": "Specifies if the file is available publicly without authentication.\nIf this value is `true`, the permalink in the `_links` section contains the public URL.",
            "type": "boolean",
            "example": false
          },
          "name": {
            "description": "File name used for downloading.",
            "type": "string",
            "maxLength": 255,
            "example": "logo.png"
          },
          "description": {
            "description": "Description of the file.",
            "type": "string",
            "maxLength": 255,
            "example": "My file description"
          },
          "sourceType": {
            "description": "Source of the file.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "upload",
              "camera",
              "organization-export",
              "organization-closure-export",
              null
            ],
            "example": "upload"
          },
          "tags": {
            "description": "List of tags associated with the file.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "test",
              "tags"
            ]
          }
        }
      },
      "FileCreateFromUrl": {
        "type": "object",
        "required": [
          "url"
        ],
        "properties": {
          "url": {
            "description": "URL of the file to upload.",
            "type": "string",
            "example": "https://app.rebilly.com/static/gateways/Stripe.png"
          },
          "isPublic": {
            "description": "Specifies if the file is available publicly without authentication.\nIf this value is `true`, the permalink in the `_links` section contains the public URL.",
            "type": "boolean",
            "example": false
          },
          "name": {
            "description": "File name used for downloading.",
            "type": "string",
            "maxLength": 255,
            "example": "logo.png"
          },
          "description": {
            "description": "Description of the file.",
            "type": "string",
            "maxLength": 255,
            "example": "My file description"
          },
          "sourceType": {
            "description": "Source of the file.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "upload",
              "camera",
              "organization-export",
              "organization-closure-export",
              null
            ],
            "example": "upload"
          },
          "tags": {
            "description": "List of tags associated with the file.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "test",
              "tags"
            ]
          }
        }
      },
      "ManualShipping": {
        "description": "Manually set shipping amount.",
        "type": "object",
        "required": [
          "amount",
          "calculator"
        ],
        "properties": {
          "amount": {
            "x-type": "Money",
            "type": "number",
            "format": "double",
            "description": "Shipping amount."
          },
          "calculator": {
            "description": "Shipping calculator.",
            "type": "string",
            "enum": [
              "manual"
            ]
          }
        }
      },
      "RebillyShipping": {
        "description": "Rebilly-based shipping which is calculated by shipping rates.",
        "type": "object",
        "required": [
          "calculator"
        ],
        "properties": {
          "calculator": {
            "description": "Shipping calculator.",
            "type": "string",
            "enum": [
              "rebilly"
            ]
          },
          "rateId": {
            "description": "ID of the shipping rate.\nIf this value is not set,\nthe cheapest applicable shipping rate is used.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "shipping-123-456"
          },
          "amount": {
            "type": "number",
            "format": "double",
            "readOnly": true,
            "description": "Shipping amount which is calculated from [Shipping rates](https://www.rebilly.com/catalog/all/shipping-rates)."
          }
        }
      },
      "Shipping": {
        "description": "Shipping settings.",
        "type": "object",
        "discriminator": {
          "propertyName": "calculator",
          "mapping": {
            "manual": "#/components/schemas/ManualShipping",
            "rebilly": "#/components/schemas/RebillyShipping"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/ManualShipping"
          },
          {
            "$ref": "#/components/schemas/RebillyShipping"
          }
        ]
      },
      "TaxItem": {
        "type": "object",
        "required": [
          "amount",
          "description"
        ],
        "properties": {
          "amount": {
            "description": "Amount of the tax.",
            "type": "number",
            "format": "double"
          },
          "description": {
            "type": "string",
            "description": "Description of the tax."
          },
          "rate": {
            "description": "Overall sales tax rate which includes state, county, city and district tax.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "readOnly": true
          },
          "stateAmount": {
            "description": "Amount of sales tax to collect for the state.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "example": 0.94,
            "readOnly": true
          },
          "countyAmount": {
            "description": "Amount of sales tax to collect for the county.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "example": 0.04,
            "readOnly": true
          },
          "cityAmount": {
            "description": "Amount of sales tax to collect for the city.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "example": 0,
            "readOnly": true
          },
          "specialDistrictAmount": {
            "description": "Amount of sales tax to collect for the special district.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "example": 0.38,
            "readOnly": true
          },
          "stateRate": {
            "description": "State sales tax rate for given location.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "readOnly": true
          },
          "countyRate": {
            "description": "County sales tax rate for given location.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "readOnly": true
          },
          "cityRate": {
            "description": "City sales tax rate for given location.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "readOnly": true
          },
          "specialDistrictRate": {
            "description": "Special district sales tax rate for given location.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "readOnly": true
          },
          "jurisdictions": {
            "description": "Jurisdiction names for the invoice.",
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "properties": {
              "country": {
                "description": "Two-letter ISO country code for the provided location.",
                "type": [
                  "string",
                  "null"
                ],
                "example": "US",
                "readOnly": true
              },
              "state": {
                "description": "Postal abbreviated state name for the provided location.",
                "type": [
                  "string",
                  "null"
                ],
                "example": "CA",
                "readOnly": true
              },
              "county": {
                "description": "County name for the provided location.",
                "type": [
                  "string",
                  "null"
                ],
                "example": "LOS ANGELES",
                "readOnly": true
              },
              "city": {
                "description": "City name for the provided location.",
                "type": [
                  "string",
                  "null"
                ],
                "example": "LOS ANGELES",
                "readOnly": true
              }
            }
          }
        }
      },
      "ManualTax": {
        "type": "object",
        "description": "Manual tax calculator.",
        "required": [
          "calculator",
          "items"
        ],
        "properties": {
          "calculator": {
            "description": "Type of tax calculator.",
            "type": "string",
            "enum": [
              "manual"
            ]
          },
          "amount": {
            "type": "number",
            "format": "double",
            "x-type": "Money",
            "x-sortable": true,
            "description": "Total amount of taxes.",
            "readOnly": true
          },
          "items": {
            "type": "array",
            "description": "Taxes applied.",
            "items": {
              "$ref": "#/components/schemas/TaxItem"
            }
          }
        }
      },
      "RebillyTaxJarTax": {
        "type": "object",
        "description": "TaxJar tax calculator.",
        "required": [
          "calculator"
        ],
        "properties": {
          "calculator": {
            "description": "Type of tax calculator.",
            "type": "string",
            "enum": [
              "rebilly-taxjar"
            ]
          },
          "amount": {
            "type": "number",
            "format": "double",
            "x-type": "Money",
            "x-sortable": true,
            "description": "Total amount of taxes.",
            "readOnly": true
          },
          "items": {
            "type": "array",
            "description": "Taxes applied and calculated based on the `taxCategoryId` of the related product.",
            "items": {
              "$ref": "#/components/schemas/TaxItem"
            }
          }
        }
      },
      "RebillyAvalaraTax": {
        "type": "object",
        "description": "Avalara tax calculator.",
        "required": [
          "calculator"
        ],
        "properties": {
          "calculator": {
            "description": "Type of tax calculator.",
            "type": "string",
            "enum": [
              "rebilly-avalara"
            ]
          },
          "amount": {
            "type": "number",
            "format": "double",
            "x-type": "Money",
            "x-sortable": true,
            "description": "Total amount of taxes.",
            "readOnly": true
          },
          "items": {
            "type": "array",
            "description": "Taxes applied and calculated based on the `taxCategoryId` of the related product.",
            "items": {
              "$ref": "#/components/schemas/TaxItem"
            }
          }
        }
      },
      "Taxes": {
        "description": "Taxes.",
        "type": "object",
        "discriminator": {
          "propertyName": "calculator",
          "mapping": {
            "manual": "#/components/schemas/ManualTax",
            "rebilly-taxjar": "#/components/schemas/RebillyTaxJarTax",
            "rebilly-avalara": "#/components/schemas/RebillyAvalaraTax"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/ManualTax"
          },
          {
            "$ref": "#/components/schemas/RebillyTaxJarTax"
          },
          {
            "$ref": "#/components/schemas/RebillyAvalaraTax"
          }
        ]
      },
      "InvoiceItem": {
        "type": "object",
        "required": [
          "type",
          "unitPrice"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the invoice item.",
            "readOnly": true,
            "maxLength": 50,
            "example": "ii_0YVFDEQS2KCFTBN9HXWJFY55GV"
          },
          "type": {
            "description": "Type of invoice item.",
            "type": "string",
            "x-basic": true,
            "enum": [
              "debit",
              "credit"
            ]
          },
          "description": {
            "description": "Description of the invoice item.",
            "type": "string",
            "maxLength": 1000
          },
          "unitPrice": {
            "description": "Unit price of the invoice item.",
            "type": "number",
            "format": "double"
          },
          "quantity": {
            "description": "Quantity of the invoice item.",
            "type": "integer"
          },
          "price": {
            "description": "Total price of the invoice item.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "productId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the product.",
            "maxLength": 50,
            "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
          },
          "planId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the plan.",
            "maxLength": 50,
            "readOnly": true,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
          },
          "subscriptionId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the order.",
            "maxLength": 50,
            "readOnly": true,
            "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "discountAmount": {
            "description": "Discount amount applied to the invoice item.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "periodStartTime": {
            "description": "Date and time when the billing period starts.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "periodEndTime": {
            "description": "Date and time when the billing period ends.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "periodNumber": {
            "description": "Billing period number that is associated with the invoice item.\nFor example, an invoice item for a service is included in billing period number 3.\nThe invoice item is only applied to billing period number 3.",
            "type": [
              "integer",
              "null"
            ]
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "tax": {
            "description": "Invoice item tax.",
            "readOnly": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TaxItem"
              },
              {
                "type": "null"
              }
            ]
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "product",
                    "subscription",
                    "plan"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "product": {
                "type": "object"
              },
              "plan": {
                "type": "object"
              }
            }
          }
        }
      },
      "CreditMemoInvoiceAllocation": {
        "type": "object",
        "properties": {
          "invoiceId": {
            "type": "string",
            "description": "ID of invoice to which the credit memo is allocated.",
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "amount": {
            "description": "Amount of credit that is allocated from the credit memo to the invoice.\nIf the `amount` value is not supplied or exceeds the unused amount of the credit memo or the invoice due amount, the lesser of the following two values is used:\n- The unused amount of the credit memo.\n- The invoice due amount.",
            "type": "number",
            "format": "double"
          },
          "currency": {
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "createdTime": {
            "description": "Date and time at which a credit memo is allocated.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          }
        }
      },
      "TransactionStatus": {
        "type": "string",
        "description": "Status of the transaction.",
        "enum": [
          "completed",
          "conn-error",
          "disputed",
          "never-sent",
          "offsite",
          "partially-refunded",
          "pending",
          "refunded",
          "sending",
          "timeout",
          "voided",
          "waiting-approval",
          "waiting-capture",
          "waiting-gateway",
          "waiting-refund"
        ]
      },
      "TransactionResult": {
        "type": "string",
        "description": "Result of the transaction.",
        "enum": [
          "abandoned",
          "approved",
          "canceled",
          "declined",
          "unknown"
        ]
      },
      "GatewayName": {
        "description": "Payment gateway name.",
        "type": [
          "string",
          "null"
        ],
        "enum": [
          "A1Gateway",
          "ACI",
          "Adyen",
          "Aera",
          "Aircash",
          "Airpay",
          "Airwallex",
          "AsiaPay",
          "AmazonPay",
          "AmexVPC",
          "Antom",
          "ApcoPay",
          "AsiaPaymentGateway",
          "AstroPayCard",
          "AuthorizeNet",
          "Awepay",
          "Bambora",
          "BankSEND",
          "BitPay",
          "BlueSnap",
          "BraintreePayments",
          "Buckaroo",
          "BVNK",
          "Cardknox",
          "Cashflows",
          "CASHlib",
          "Cashterminal",
          "CashToCode",
          "CauriPayment",
          "Cayan",
          "CCAvenue",
          "Chase",
          "CheckoutCom",
          "Chillstock",
          "Circle",
          "Citadel",
          "Clearhaus",
          "Cleo",
          "CODVoucher",
          "Coinbase",
          "CoinGate",
          "CoinPayments",
          "Conekta",
          "Coppr",
          "Credorax",
          "Cryptomus",
          "Cryptonator",
          "CyberSource",
          "DataCash",
          "Dengi",
          "Dimoco",
          "Directa24",
          "dLocal",
          "Dragonphoenix",
          "Dropayment",
          "EasyPayDirect",
          "EBANX",
          "ecoPayz",
          "ecoPayzTurkey",
          "EcorePay",
          "Elavon",
          "Euteller",
          "eMerchantPay",
          "EMS",
          "ePay",
          "EPG",
          "EPro",
          "Ezeebill",
          "eZeeWallet",
          "ezyEFT",
          "FasterPay",
          "Finrax",
          "Flexepin",
          "FinTecSystems",
          "FundSend",
          "Forte",
          "gate2way",
          "GET",
          "Gigadat",
          "GlobalOnePay",
          "GoCardless",
          "Gooney",
          "Gpaysafe",
          "Greenbox",
          "HiPay",
          "iCashOne",
          "iCanPay",
          "ICEPAY",
          "iCheque",
          "iDebit",
          "Ilixium",
          "Ingenico",
          "INOVAPAY",
          "Inovio",
          "Intuit",
          "InstaDebit",
          "IpayOptions",
          "JetPay",
          "Jeton",
          "JPMOrbital",
          "Khelocard",
          "Klarna",
          "Konnektive",
          "Kushki",
          "LaCore",
          "Limepay",
          "Loonio",
          "loonie",
          "LPG",
          "MaxiCash",
          "MercadoPago",
          "MiFinity",
          "MobilePay",
          "Moneris",
          "Monolo",
          "MonRem",
          "MtaPay",
          "MuchBetter",
          "MuchBetterGateway",
          "MyFatoorah",
          "Naewe",
          "Neosurf",
          "Netbanking",
          "Neteller",
          "NGenius",
          "NinjaWallet",
          "NMI",
          "NordikCoin",
          "NOWPayments",
          "NuaPay",
          "OchaPay",
          "OmniMatrix",
          "Onlineueberweisen",
          "OnRamp",
          "Orbital",
          "Pagadito",
          "Pagsmile",
          "Panamerican",
          "ParamountCommerce",
          "ParamountEft",
          "ParamountInterac",
          "PandaGateway",
          "Pay4Fun",
          "Paybilt",
          "PayCash",
          "Paycly",
          "PayClub",
          "PayCom",
          "PayEcards",
          "Payeezy",
          "Payflow",
          "Paynote",
          "PaymentAsia",
          "PaymenTechnologies",
          "PaymentsOS",
          "Paymero",
          "PayPal",
          "Payper",
          "Payr",
          "PayRedeem",
          "PayRetailers",
          "Paysafe",
          "Paysafecard",
          "Paysafecash",
          "PayTabs",
          "PayU",
          "PayULatam",
          "Payvision",
          "PharosPayments",
          "Piastrix",
          "Pin4Pay",
          "Plugnpay",
          "PostFinance",
          "Powertranz",
          "PPRO",
          "Prosa",
          "PSiGate",
          "Rapyd",
          "Realex",
          "Realtime",
          "Redsys",
          "Rotessa",
          "RPN",
          "Safecharge",
          "SaltarPay",
          "Sagepay",
          "SeamlessChex",
          "SecureTrading",
          "SecurionPay",
          "Skrill",
          "SmartInvoice",
          "SMSVoucher",
          "Sofort",
          "SparkPay",
          "Splitit",
          "StaticGateway",
          "STPMexico",
          "Stripe",
          "Tabby",
          "Telr",
          "TestProcessor",
          "ToditoCash",
          "Triple000",
          "Truevo",
          "TrustsPay",
          "Trustly",
          "TWINT",
          "Unlimit",
          "UPayCard",
          "USAePay",
          "VantivLitle",
          "vegaaH",
          "VCreditos",
          "VegaWallet",
          "Viva",
          "Wallet88",
          "Walpay",
          "WesternUnion",
          "Wirecard",
          "WorldlineAtosFrankfurt",
          "Worldpay",
          "XPay",
          "Zimpler",
          "Zotapay"
        ]
      },
      "AcquirerName": {
        "description": "Acquirer name.",
        "type": [
          "string",
          "null"
        ],
        "enum": [
          "Adyen",
          "ACI",
          "Aera",
          "Alipay",
          "AIB",
          "Aircash",
          "Airpay",
          "AmazonPay",
          "ApcoPay",
          "AsiaPaymentGateway",
          "AstroPay Card",
          "Awepay",
          "Ipay Options",
          "B+S",
          "Bambora",
          "BitPay",
          "Bank of America",
          "Bank of Moscow",
          "Bank of Rebilly",
          "Bank One",
          "BankSEND",
          "BMO Harris Bank",
          "Borgun",
          "BraintreePayments",
          "Buckaroo",
          "BVNK",
          "Cardknox",
          "CASHlib",
          "Cashterminal",
          "CashToCode",
          "Catalunya Caixa",
          "CCAvenue",
          "Chase",
          "CheckoutCom",
          "Chillstock",
          "ChinaUnionPay",
          "CIM",
          "Circle",
          "Citadel",
          "Clearhaus",
          "Cleo",
          "CODVoucher",
          "Coinbase",
          "CoinGate",
          "CoinPayments",
          "Conekta",
          "Coppr",
          "Credorax",
          "Cryptonator",
          "CyberSource",
          "Dimoco",
          "dLocal",
          "Dragonphoenix",
          "Dropayment",
          "EasyPayDirect",
          "EBANX",
          "ecoPayz",
          "EcorePay",
          "Elavon",
          "EMS",
          "ePay",
          "EPG",
          "Euteller",
          "Ezeebill",
          "eZeeWallet",
          "ezyEFT",
          "Fifth Third Bank",
          "Finrax",
          "First Data Buypass",
          "First Data Nashville",
          "First Data North",
          "First Data Omaha",
          "FinTecSystems",
          "Flexepin",
          "Forte",
          "FundSend",
          "gate2way",
          "Gigadat",
          "Global East",
          "Gooney",
          "Gpaysafe",
          "Heartland",
          "HiPay",
          "HSBC",
          "iCashOne",
          "iCanPay",
          "ICEPAY",
          "iCheque",
          "Ilixium",
          "Ingenico",
          "INOVAPAY",
          "Intuit",
          "Jeton",
          "JPMOrbital",
          "Khelocard",
          "Klarna",
          "Konnektive",
          "Kushki",
          "Limepay",
          "Loonio",
          "loonie",
          "LPG",
          "Masapay",
          "MaxiCash",
          "MercadoPago",
          "Merrick",
          "Mission Valley Bank",
          "MiFinity",
          "MobilePay",
          "Moneris",
          "Monolo",
          "MonRem",
          "MuchBetter",
          "MuchBetterGateway",
          "MyFatoorah",
          "NATWEST",
          "Neosurf",
          "Netbanking",
          "Neteller",
          "NinjaWallet",
          "NMI",
          "NordikCoin",
          "NOWPayments",
          "NuaPay",
          "Nuvei",
          "OchaPay",
          "OmniMatrix",
          "Onlineueberweisen",
          "OnRamp",
          "Orbital",
          "Other",
          "Panamerican",
          "Panda Bank",
          "Paramount",
          "ParamountCommerce",
          "ParamountEft",
          "ParamountInterac",
          "Pay4fun",
          "Paybilt",
          "PayCash",
          "PayClub",
          "PayEcards",
          "PaymentAsia",
          "PaymenTechnologies",
          "PaymentsOS",
          "Paymero",
          "Paynetics",
          "PayPal",
          "Payper",
          "Payr",
          "PayRedeem",
          "PayRetailers",
          "PayTabs",
          "PayU",
          "PayULatam",
          "Payvision",
          "PharosPayments",
          "Piastrix",
          "Pin4Pay",
          "Peoples Trust Company",
          "PostFinance",
          "PPRO",
          "Privatbank",
          "Prosa",
          "PSiGate",
          "QQPay",
          "Rapyd",
          "RBC",
          "RBS WorldPay",
          "RealTime",
          "Rotessa",
          "Safecharge",
          "SaltarPay",
          "SecureTrading",
          "SecurionPay",
          "Skrill",
          "SmartInvoice",
          "SMSVoucher",
          "Sofort",
          "SparkPay",
          "State Bank of Mauritius",
          "STPMexico",
          "Stripe",
          "Tabby",
          "TBI",
          "Telr",
          "TestProcessor",
          "ToditoCash",
          "Triple000",
          "Truevo",
          "Trustly",
          "TrustPay",
          "TrustsPay",
          "TSYS",
          "TWINT",
          "UPayCard",
          "Vantiv",
          "VCreditos",
          "VegaWallet",
          "VoicePay",
          "Wallet88",
          "WeChat Pay",
          "Wells Fargo",
          "Wing Hang Bank",
          "Wirecard",
          "WorldPay",
          "XPay",
          "Zimpler",
          "Zotapay"
        ]
      },
      "MoneyAmount": {
        "type": "number",
        "format": "double",
        "example": 10,
        "x-type": "Money"
      },
      "Money": {
        "type": "object",
        "required": [
          "amount",
          "currency"
        ],
        "properties": {
          "amount": {
            "$ref": "#/components/schemas/MoneyAmount"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          }
        }
      },
      "HttpHeaders": {
        "type": "object",
        "description": "HTTP headers.",
        "additionalProperties": {
          "type": "string"
        },
        "example": {
          "Content-Type": "application/json",
          "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
        },
        "x-is-free-form": true
      },
      "RiskMetadata": {
        "type": "object",
        "title": "Risk metadata",
        "description": "Risk metadata used for 3D Secure and risk scoring.",
        "properties": {
          "ipAddress": {
            "description": "Customer's IP address.",
            "type": [
              "string",
              "null"
            ],
            "format": "ipv4 or ipv6",
            "example": "93.92.91.90"
          },
          "fingerprint": {
            "description": "Customer's device fingerprint.\nA device fingerprint is a unique token that is used to identify the customer.\nThe device fingerprint is generated based on device attributes, such as: hardware,\nsoftware, IP address, language, browser, and more.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "pIUt3xbgX3l9g3YDiLbx"
          },
          "httpHeaders": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/HttpHeaders"
              },
              {
                "type": "null"
              }
            ]
          },
          "browserData": {
            "type": [
              "object",
              "null"
            ],
            "description": "Browser data used for 3D Secure and risk scoring.",
            "required": [
              "colorDepth",
              "isJavaEnabled",
              "language",
              "screenWidth",
              "screenHeight",
              "timeZoneOffset"
            ],
            "properties": {
              "colorDepth": {
                "description": "Browser color depth in bits per pixel.\nThis value is obtained using the `screen.colorDepth` property.",
                "type": "integer",
                "minimum": 1,
                "maximum": 48,
                "example": 24
              },
              "isJavaEnabled": {
                "description": "Specifies if Java is enabled in a browser.\nThis value is obtained from the `navigator.javaEnabled` property.",
                "type": "boolean"
              },
              "language": {
                "description": "Browser language settings.\nThis value is obtained from the `navigator.language` property.",
                "type": "string",
                "example": "en-US",
                "maxLength": 8
              },
              "screenWidth": {
                "description": "Width of the browser screen.\nThis value is obtained from the `screen.width` property.",
                "type": "integer",
                "minimum": 0,
                "maximum": 65535,
                "example": 1920
              },
              "screenHeight": {
                "description": "Height of the browser screen.\nThis value is obtained from the `screen.height` property.",
                "type": "integer",
                "minimum": 0,
                "maximum": 65535,
                "example": 1080
              },
              "timeZoneOffset": {
                "description": "Browser time zone offset in minutes from UTC.\nA positive offset indicates that the local time is behind UTC.\nA negative offset indicates that the local time is ahead of UTC.\nYou can find this value using the `(new Date()).getTimezoneOffset()` property.",
                "type": "integer",
                "minimum": -1410,
                "maximum": 1410,
                "example": 300
              },
              "isAdBlockEnabled": {
                "description": "Specifies if the usage of ad block has been detected in the browser.",
                "type": "boolean"
              }
            }
          },
          "extraData": {
            "type": [
              "object",
              "null"
            ],
            "description": "Third-party data used for risk scoring.",
            "properties": {
              "kountFraudSessionId": {
                "description": "Alpha-numeric `fraudSessionId` as provided by the Kount SDK.",
                "type": "string",
                "minimum": 10,
                "maximum": 32,
                "example": "abcdefg12345abababab123456789012"
              },
              "payPalMerchantSessionId": {
                "description": "PayPal `MerchantSessionID` as generated by the PayPal Fraudnet SDK.",
                "type": "string",
                "minimum": 1,
                "maximum": 64,
                "example": "dd65ratxc5qv15iph3vyoq7l6davuowa"
              },
              "threatMetrixSessionId": {
                "description": "Temporary identifier that is unique to the visitor session and passed to ThreatMetrix.",
                "pattern": "[a-zA-Z0-9_-]+",
                "type": "string",
                "minimum": 1,
                "maximum": 128,
                "example": "dd65ratxc5qv15iph3vyoq7l6davuowadd65ratxc5qv15iph3vyoq7l6davuowa"
              }
            }
          },
          "isProxy": {
            "description": "Specifies if the customer's IP address is related to a proxy.",
            "type": "boolean",
            "readOnly": true
          },
          "isVpn": {
            "description": "Specifies if the customer's IP address is related to a VPN.",
            "type": "boolean",
            "readOnly": true
          },
          "isTor": {
            "description": "Specifies if the customer's IP address is related to TOR.",
            "type": "boolean",
            "readOnly": true
          },
          "isHosting": {
            "description": "Specifies if the customer's IP address is related to hosting.",
            "type": "boolean",
            "readOnly": true
          },
          "hostingName": {
            "description": "Name of the data center or hosting provider, if available.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "isp": {
            "description": "Internet Service Provider (ISP) name, if available.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "country": {
            "description": "Country ISO Alpha-2 code of the specified IP address.",
            "maxLength": 2,
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "example": "US"
          },
          "region": {
            "description": "Region of the specified IP address.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "example": "NY"
          },
          "city": {
            "description": "City of the specified IP address.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "example": "New York"
          },
          "latitude": {
            "description": "Latitude of the specified IP address.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "longitude": {
            "description": "Longitude of the specified IP address.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "readOnly": true
          },
          "postalCode": {
            "description": "Postal code of the specified IP address.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 10,
            "readOnly": true
          },
          "timeZone": {
            "description": "Time zone of the specified IP address.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "example": "America/New_York"
          },
          "accuracyRadius": {
            "description": "Accuracy radius of the specified IP address, in kilometers.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true
          },
          "distance": {
            "description": "Distance between the customer's IP address and the billing address geolocation, in kilometers.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true
          },
          "hasMismatchedBillingAddressCountry": {
            "description": "Specifies if the customer's billing address country and geo-IP address are not the same.",
            "type": "boolean",
            "readOnly": true
          },
          "hasMismatchedBankCountry": {
            "description": "Specifies if the customer's bank country and geo-IP address are not the same.",
            "type": "boolean",
            "readOnly": true
          },
          "hasMismatchedTimeZone": {
            "description": "Specifies if the customer's browser time zone and the IP address associated time zone are not the same.",
            "type": "boolean",
            "readOnly": true
          },
          "hasMismatchedHolderName": {
            "description": "Specifies if the customer's billing address name and primary address name are not the same.",
            "type": "boolean",
            "readOnly": true
          },
          "hasFakeName": {
            "description": "Specifies if the holder name seems fake.",
            "type": "boolean",
            "readOnly": true
          },
          "isHighRiskCountry": {
            "description": "Specifies if the geo-IP country, or the customer's billing country, is considered a high risk country.",
            "type": "boolean",
            "readOnly": true
          },
          "paymentInstrumentVelocity": {
            "description": "Number of transactions for this payment instrument, based on fingerprint, in the last 24 hours.",
            "type": "integer",
            "readOnly": true
          },
          "declinedPaymentInstrumentVelocity": {
            "description": "Number of declined transactions for this payment instrument fingerprint in the last 24 hours.",
            "type": "integer",
            "readOnly": true
          },
          "deviceVelocity": {
            "description": "Number of transactions for this device, based on fingerprint, in the last 24 hours.",
            "type": "integer",
            "readOnly": true
          },
          "ipVelocity": {
            "description": "Number of transactions for this IP address in the last 24 hours.",
            "type": "integer",
            "readOnly": true
          },
          "emailVelocity": {
            "description": "Number of transactions for this email address in the last 24 hours.",
            "type": "integer",
            "readOnly": true
          },
          "billingAddressVelocity": {
            "description": "Number of transactions for this billing address in the last 24 hours.",
            "type": "integer",
            "readOnly": true
          },
          "paymentInstrumentApprovedTransactionCount": {
            "description": "Number of approved transactions for this payment instrument.",
            "type": "integer",
            "readOnly": true
          },
          "score": {
            "description": "Computed risk score based on IP risk data,\nsuch as: `isVpn`, `isTor`, and `isProxy`.",
            "type": "integer",
            "readOnly": true
          }
        }
      },
      "TransactionLimitAmount": {
        "type": [
          "object",
          "null"
        ],
        "title": "LimitAmount",
        "description": "Transaction amount limit information.",
        "properties": {
          "amount": {
            "type": "number",
            "format": "double",
            "example": 275.35,
            "description": "Limit amount."
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "resetTime": {
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Date and time in which the limit amount resets.\nThis value may be used for user interfaces."
          }
        }
      },
      "Transaction": {
        "type": "object",
        "description": "Transaction information.",
        "properties": {
          "id": {
            "readOnly": true,
            "$ref": "#/components/schemas/TransactionId"
          },
          "websiteId": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/WebsiteId"
              }
            ]
          },
          "customerId": {
            "x-basic": true,
            "x-sortable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomerId"
              }
            ]
          },
          "type": {
            "description": "Type of transaction.",
            "type": "string",
            "x-basic": true,
            "readOnly": true,
            "enum": [
              "3ds-authentication",
              "authorize",
              "capture",
              "credit",
              "refund",
              "sale",
              "setup",
              "void"
            ]
          },
          "status": {
            "description": "Status of the transaction.",
            "allOf": [
              {
                "$ref": "#/components/schemas/TransactionStatus"
              }
            ],
            "readOnly": true
          },
          "result": {
            "description": "Result of the transaction.",
            "allOf": [
              {
                "$ref": "#/components/schemas/TransactionResult"
              }
            ],
            "x-basic": true,
            "readOnly": true
          },
          "amount": {
            "x-type": "Money",
            "x-sortable": true,
            "x-basic": true,
            "description": "Total amount of the transaction.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "currency": {
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "purchaseAmount": {
            "description": "Amount by which the purchase is completed.\nIf an adjustment occurs, the purchased amount may differ from the requested amount.",
            "type": "number",
            "format": "double",
            "x-type": "Money",
            "x-currency-field": "purchaseCurrency",
            "x-sortable": true,
            "readOnly": true
          },
          "purchaseCurrency": {
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "requestAmount": {
            "description": "Amount of the payment request.\nIf an adjustment occurs,\nthe purchase amount may differ from the billing amount.",
            "type": "number",
            "x-type": "Money",
            "x-currency-field": "requestCurrency",
            "format": "double",
            "readOnly": true
          },
          "requestCurrency": {
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "parentTransactionId": {
            "description": "ID of the parent transaction.",
            "type": [
              "string",
              "null"
            ],
            "$ref": "#/components/schemas/TransactionId"
          },
          "childTransactions": {
            "description": "IDs of child transactions.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResourceId"
            }
          },
          "invoiceIds": {
            "description": "Related invoice IDs.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResourceId"
            }
          },
          "subscriptionIds": {
            "description": "Subscription IDs of invoices that are related to the transaction.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResourceId"
            }
          },
          "planIds": {
            "description": "Plan IDs of orders that are related to the transaction.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ResourceId"
            }
          },
          "isRebill": {
            "description": "Specifies if the transaction is one of a number of recurring payments in a subscription, excluding trials or setup fees.",
            "type": "boolean",
            "readOnly": true
          },
          "rebillNumber": {
            "description": "Rebill number of the transaction.\nA rebill number is the number of recurring payments in a subscription, excluding trials or setup fees.",
            "type": "integer",
            "readOnly": true,
            "x-sortable": true
          },
          "billingAddress": {
            "description": "Billing address.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "has3ds": {
            "description": "Specifies if the transaction uses 3D Secure.",
            "type": "boolean",
            "readOnly": true
          },
          "3ds": {
            "type": "object",
            "description": "Authentication object.\nFor more information, see [3D Secure (3DS)](https://www.rebilly.com/docs/docs/settings/3ds/).",
            "readOnly": true,
            "properties": {
              "server": {
                "description": "Name of the 3D Secure server.",
                "type": "string"
              },
              "version": {
                "description": "Version of 3D Secure.",
                "type": "string",
                "enum": [
                  "1.0.2",
                  "2.1.0",
                  "2.2.0"
                ]
              },
              "enrolled": {
                "description": "Specifies if the cardholder is enrolled in 3D Secure.",
                "type": "string",
                "enum": [
                  "yes",
                  "no",
                  "invalid card/timeout",
                  "unavailable"
                ]
              },
              "authenticated": {
                "description": "Authentication response status for 3D Secure.",
                "type": "string",
                "enum": [
                  "yes",
                  "no",
                  "not applicable",
                  "attempted"
                ]
              },
              "liability": {
                "type": "string",
                "enum": [
                  "protected",
                  "not protected",
                  "protected (attempt)"
                ]
              },
              "flow": {
                "description": "Authentication flow for 3D Secure 2.",
                "type": "string",
                "enum": [
                  "frictionless",
                  "challenge"
                ]
              },
              "isDowngraded": {
                "description": "Specifies if 3D Secure 2 is attempted and downgraded to 3D Secure 1.",
                "type": "boolean",
                "default": false,
                "deprecated": true
              }
            }
          },
          "redirectUrl": {
            "description": "URL where the end-user is redirected to when an offsite transaction is completed.\nThe default value is the website URL.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 2083,
            "format": "uri"
          },
          "retryNumber": {
            "type": "integer",
            "readOnly": true,
            "description": "Position of the transaction in the sequence of retries.",
            "x-sortable": true
          },
          "isRetry": {
            "type": "boolean",
            "readOnly": true,
            "description": "Specifies if a transaction is a retry."
          },
          "billingDescriptor": {
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "description": "Billing descriptor that appears on the periodic billing statement.\nFor a credit card statement, this field commonly contains 12 or fewer characters."
          },
          "description": {
            "type": "string",
            "description": "Description of the payment.",
            "maxLength": 255
          },
          "requestId": {
            "description": "Request ID of the transaction.\nThis ID must be unique within a 24-hour period.\nUse this field to prevent duplicate transactions.",
            "type": "string",
            "x-sortable": true
          },
          "hasAmountAdjustment": {
            "description": "Specifies if the transaction has amount adjustment.",
            "type": "boolean",
            "readOnly": true
          },
          "gatewayName": {
            "readOnly": true,
            "description": "Name of the payment gateway that processed, or is selected to process, the transaction.\nThis value is only available after a gateway is selected for the transaction.",
            "x-label": "Gateway",
            "x-basic": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/GatewayName"
              }
            ]
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "processedTime": {
            "description": "Date and time when the transaction is processed.",
            "x-sortable": true,
            "x-basic": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "gatewayAccountId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the gateway account that processed the transaction.",
            "maxLength": 50,
            "example": "gw_acc_0YVCXMF26DDNKAERE5NW727S34",
            "readOnly": true
          },
          "gatewayTransactionId": {
            "description": "ID of the gateway transaction.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "txn_0YVDTQJ8YWDGQACV2N2N5SPWQ0"
          },
          "gateway": {
            "type": "object",
            "description": "Related gateway information.",
            "readOnly": true,
            "properties": {
              "response": {
                "description": "Gateway response.",
                "type": "object",
                "properties": {
                  "code": {
                    "description": "Gateway response code.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "message": {
                    "description": "Gateway response message.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "type": {
                    "description": "Gateway response type.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "originalCode": {
                    "description": "Raw, unmapped gateway response code.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "originalMessage": {
                    "description": "Raw, unmapped gateway response message.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "avsResponse": {
                "description": "Gateway Address Verification System (AVS) response.",
                "type": "object",
                "properties": {
                  "code": {
                    "description": "Response code.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "message": {
                    "description": "Response message.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "originalCode": {
                    "description": "Raw response code.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "originalMessage": {
                    "description": "Raw response message.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "cvvResponse": {
                "description": "Gateway Card Verification Value (CVV) response.",
                "type": "object",
                "properties": {
                  "code": {
                    "description": "Response code.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "message": {
                    "description": "Response message.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "originalCode": {
                    "description": "Raw response code.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "originalMessage": {
                    "description": "Raw response message.",
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              }
            }
          },
          "acquirerName": {
            "readOnly": true,
            "description": "Acquirer name.\nThis value is only available when a transaction uses a payment gateway.\nIf a transaction does not use a payment gateway, this value is `null`.",
            "allOf": [
              {
                "$ref": "#/components/schemas/AcquirerName"
              }
            ]
          },
          "method": {
            "deprecated": true,
            "description": "Payment method.\n\n>**Note:** Use `paymentInstrument.method` instead.",
            "allOf": [
              {
                "$ref": "#/components/schemas/PaymentMethod"
              }
            ]
          },
          "velocity": {
            "description": "Number of transactions by the same customer in the past 24 hours.",
            "type": "integer"
          },
          "revision": {
            "description": "Number of times the transaction data has been modified.\n\nThis revision number is useful when analyzing webhook data to determine if the change takes precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "referenceData": {
            "description": "Transaction reference data.",
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "gatewayTransactionId": "GAT123"
            },
            "readOnly": true
          },
          "bin": {
            "description": "Payment card Bank Identification Number (BIN).",
            "x-label": "BIN",
            "type": [
              "string",
              "null"
            ],
            "format": "bin",
            "readOnly": true
          },
          "paymentInstrument": {
            "type": "object",
            "oneOf": [
              {
                "$ref": "#/components/schemas/VaultedInstrument"
              },
              {
                "$ref": "#/components/schemas/AlternativePaymentInstrument"
              },
              {
                "$ref": "#/components/schemas/CashInstrument"
              },
              {
                "$ref": "#/components/schemas/CheckInstrument"
              }
            ]
          },
          "hasDcc": {
            "description": "Specifies if Dynamic Currency Conversion (DCC) applies to the transaction.",
            "type": "boolean",
            "readOnly": true
          },
          "dcc": {
            "description": "Detailed Dynamic currency conversion (DCC).\nIf DCC is not applied to the transaction, this value is `null`.",
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "properties": {
              "base": {
                "description": "Initial amount and currency to convert from.",
                "$ref": "#/components/schemas/Money"
              },
              "quote": {
                "description": "Suggested amount and currency to convert to.",
                "$ref": "#/components/schemas/Money"
              },
              "usdMarkup": {
                "description": "Markup amount converted to USD.",
                "$ref": "#/components/schemas/MoneyAmount"
              },
              "outcome": {
                "type": "string",
                "description": "Dynamic currency conversion outcome.",
                "enum": [
                  "unprocessed",
                  "rejected",
                  "selected"
                ]
              }
            }
          },
          "riskScore": {
            "description": "Risk score for the transaction.",
            "type": "integer",
            "readOnly": true,
            "x-sortable": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "notificationUrl": {
            "description": "URL where a server-to-server POST notification is sent.\nThis notification is sent when the transaction result is finalized after a timeout or an offsite interaction.\n\nDo not interpret this notification as a confirmation,\ncomplete a `GET` request to confirm the result of the transaction.\nTo ensure the request is not reattempted,\nwhen the result is confirmed, respond with a `2xx` HTTP status code.\n\nThe following placeholders are available to use in this URI: `{id}` and `{result}`.\nThese placeholders are replaced the with the transaction ID and result accordingly.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 2083,
            "format": "uri"
          },
          "isDisputed": {
            "description": "Specifies if a transaction is disputed.",
            "type": "boolean",
            "readOnly": true
          },
          "disputeTime": {
            "description": "Date and time when the dispute is created.\nIf the transaction is not disputed, this value is `null`.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true,
            "x-sortable": true
          },
          "disputeStatus": {
            "description": "Status of the dispute.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "enum": [
              null,
              "response-needed",
              "under-review",
              "forfeited",
              "won",
              "lost",
              "unknown"
            ]
          },
          "isReconciled": {
            "description": "Specifies if the transaction is verified with gateway batch data.",
            "type": "boolean",
            "readOnly": true
          },
          "isProcessedOutside": {
            "description": "Specifies if the transaction is processed outside of Rebilly.",
            "type": "boolean"
          },
          "isMerchantInitiated": {
            "description": "Specifies if the transaction is initiated by the merchant.",
            "type": "boolean"
          },
          "hadDiscrepancy": {
            "description": "Specifies if the transaction is updated due to a discrepancy with its source of truth.",
            "type": "boolean",
            "readOnly": true
          },
          "orderId": {
            "deprecated": true,
            "description": "Order ID of the transaction.\nThis ID must be unique within a 24 hour period.\n\n> **Note:** Use the `requestId` field instead.",
            "type": "string",
            "x-sortable": true
          },
          "arn": {
            "x-label": "ARN",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "description": "Acquirer reference number.",
            "example": "74836950144358910018150"
          },
          "reportAmount": {
            "description": "Transaction amount converted to the report currency of the organization.",
            "type": "number",
            "x-type": "Money",
            "x-sortable": true,
            "x-currency-field": "reportCurrency",
            "format": "double",
            "readOnly": true
          },
          "reportCurrency": {
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "settlementTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date and time when the transaction is settled by the banking institution.",
            "format": "date-time",
            "readOnly": true,
            "x-sortable": true
          },
          "discrepancyTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date and time of the most recent discrepancy on the transaction.",
            "format": "date-time",
            "readOnly": true,
            "x-sortable": true
          },
          "limits": {
            "$ref": "#/components/schemas/TransactionLimitAmount"
          },
          "organizationId": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/OrganizationId"
              }
            ]
          },
          "depositRequestId": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the deposit request if applicable.\nThe created transaction is based on the properties of this deposit request.",
            "maxLength": 50,
            "example": "dep_req_0YVJ65BSGYC3EAT58SEX8KY6J7"
          },
          "transferId": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the ledger transfer if applicable.\nThe transaction is linked to this transfer when processed in the wallet ledger.",
            "maxLength": 50,
            "example": "tb_0YVDTQJ8YWDGQACV2N2N5SPWQ0"
          },
          "payoutRequestId": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the payout request if applicable.\nThe created transaction is based on the properties of this payout request.",
            "maxLength": 50,
            "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "attachments",
                    "website",
                    "customer",
                    "gatewayAccount",
                    "paymentCard",
                    "parentTransaction",
                    "leadSource",
                    "approvalUrl",
                    "refundUrl",
                    "updateUrl",
                    "disputes",
                    "invoices",
                    "queryUrl",
                    "redirectUrl"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "parentTransaction": {
                "type": "object"
              },
              "childTransactions": {
                "type": "array",
                "maxItems": 10,
                "description": "Most recent child transactions."
              },
              "gatewayAccount": {
                "type": "object"
              },
              "customer": {
                "type": "object"
              },
              "leadSource": {
                "type": "object"
              },
              "website": {
                "type": "object"
              },
              "invoices": {
                "type": "array",
                "maxItems": 10,
                "description": "Most recent related invoices."
              },
              "organization": {
                "type": "object"
              },
              "dispute": {
                "type": "object"
              },
              "paymentCard": {
                "type": "object"
              },
              "bankAccount": {
                "type": "object"
              }
            }
          }
        }
      },
      "TimeUnit": {
        "type": "string",
        "enum": [
          "second",
          "minute",
          "hour",
          "day",
          "month",
          "year"
        ]
      },
      "TimePluralUnit": {
        "type": "string",
        "enum": [
          "seconds",
          "minutes",
          "hours",
          "days",
          "months",
          "years"
        ]
      },
      "TimeIso8601Extended": {
        "description": "Extended ISO-8601 format of time.",
        "type": "string",
        "format": "time",
        "pattern": "^(([01][0-9]|2[0-3]):([0-5][0-9])(?::([0-5][0-9]))?)((?:[+-](?:0[0-9]|1[12])(?::?[0-5][0-9])?)|Z)?$"
      },
      "SchedulingMethodDayOfMonth": {
        "type": "object",
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "day-of-month"
            ]
          },
          "day": {
            "type": "integer",
            "minimum": 1,
            "maximum": 31,
            "description": "Day of the month in which the event occurs.\nIf the month has less days, the last day of the month is selected."
          },
          "time": {
            "$ref": "#/components/schemas/TimeIso8601Extended"
          }
        },
        "required": [
          "day",
          "method"
        ]
      },
      "SchedulingMethodDayOfWeek": {
        "type": "object",
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "day-of-week"
            ]
          },
          "day": {
            "description": "Day of the week when the event occurs.",
            "type": "string",
            "enum": [
              "Sunday",
              "Monday",
              "Tuesday",
              "Wednesday",
              "Thursday",
              "Friday",
              "Saturday"
            ]
          },
          "week": {
            "type": "string",
            "enum": [
              "next",
              "first-in-month",
              "last-in-month"
            ]
          },
          "time": {
            "$ref": "#/components/schemas/TimeIso8601Extended"
          }
        },
        "required": [
          "day",
          "week",
          "method"
        ]
      },
      "PeriodAnchor": {
        "type": "object",
        "description": "Instruction for calculating the period anchor.",
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "day-of-month": "#/components/schemas/SchedulingMethodDayOfMonth",
            "day-of-week": "#/components/schemas/SchedulingMethodDayOfWeek"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/SchedulingMethodDayOfMonth"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodDayOfWeek"
          }
        ]
      },
      "SchedulingMethodDateInterval": {
        "type": "object",
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "date-interval"
            ]
          },
          "duration": {
            "type": "integer",
            "description": "Number of time units.",
            "minimum": 1
          },
          "unit": {
            "description": "Unit of time.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/TimeUnit"
              },
              {
                "$ref": "#/components/schemas/TimePluralUnit"
              }
            ]
          },
          "anchor": {
            "$ref": "#/components/schemas/PeriodAnchor"
          }
        },
        "required": [
          "duration",
          "unit",
          "method"
        ]
      },
      "SchedulingMethodImmediately": {
        "type": "object",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "immediately"
            ]
          }
        }
      },
      "SchedulingMethodIntelligent": {
        "type": "object",
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "intelligent"
            ]
          },
          "duration": {
            "type": "integer",
            "description": "Latest point in time at which the event should occur.\nThe event occurs at a random time between the initial time and duration time.",
            "minimum": 1
          },
          "unit": {
            "description": "Unit of time.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/TimeUnit"
              },
              {
                "$ref": "#/components/schemas/TimePluralUnit"
              }
            ]
          }
        },
        "required": [
          "duration",
          "unit",
          "method"
        ]
      },
      "InvoiceRetryScheduleInstruction": {
        "type": "object",
        "description": "Specifies when the payment retry instruction is performed.",
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "date-interval": "#/components/schemas/SchedulingMethodDateInterval",
            "day-of-month": "#/components/schemas/SchedulingMethodDayOfMonth",
            "day-of-week": "#/components/schemas/SchedulingMethodDayOfWeek",
            "immediately": "#/components/schemas/SchedulingMethodImmediately",
            "intelligent": "#/components/schemas/SchedulingMethodIntelligent"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/SchedulingMethodDateInterval"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodDayOfMonth"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodDayOfWeek"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodImmediately"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodIntelligent"
          }
        ]
      },
      "AmountAdjustmentPoliciesNone": {
        "title": "None",
        "type": "object",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "none"
            ],
            "description": "No payment amount adjustment."
          }
        }
      },
      "AmountAdjustmentPoliciesDiscountAmountRemaining": {
        "title": "Discount remaining amount",
        "type": "object",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "discount-amount-remaining"
            ],
            "description": "Discount the remaining amount on the invoice."
          }
        }
      },
      "AmountAdjustmentInstructionPartial": {
        "type": "object",
        "required": [
          "method",
          "value",
          "type"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "partial"
            ]
          },
          "value": {
            "description": "Amount of the payment.",
            "type": "number",
            "format": "float"
          },
          "type": {
            "description": "Payment amount type.",
            "type": "string",
            "enum": [
              "percent",
              "fixed"
            ]
          },
          "afterApprovalPolicy": {
            "description": "After an approved payment retry for an adjusted amount, this field specifies whether to discount the remaining invoice amount.",
            "discriminator": {
              "propertyName": "method",
              "mapping": {
                "none": "#/components/schemas/AmountAdjustmentPoliciesNone",
                "discount-amount-remaining": "#/components/schemas/AmountAdjustmentPoliciesDiscountAmountRemaining"
              }
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/AmountAdjustmentPoliciesNone"
              },
              {
                "$ref": "#/components/schemas/AmountAdjustmentPoliciesDiscountAmountRemaining"
              }
            ]
          }
        }
      },
      "AmountAdjustmentInstructionNone": {
        "type": "object",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "none"
            ]
          }
        }
      },
      "InvoiceRetryAmountAdjustmentInstruction": {
        "type": "object",
        "description": "Specifies if the payment amount must be adjusted for the retry.",
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "partial": "#/components/schemas/AmountAdjustmentInstructionPartial",
            "none": "#/components/schemas/AmountAdjustmentInstructionNone"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/AmountAdjustmentInstructionPartial"
          },
          {
            "$ref": "#/components/schemas/AmountAdjustmentInstructionNone"
          }
        ]
      },
      "Invoice": {
        "required": [
          "customerId",
          "currency",
          "websiteId"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the invoice.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "invoiceNumber": {
            "description": "Auto-incrementing number based on the sequence of invoices for any particular customer.",
            "readOnly": true,
            "type": "integer",
            "x-basic": true
          },
          "orderId": {
            "description": "ID of the order (experimental).",
            "readOnly": true,
            "example": "ord_01HVKA5975PJBSQ1SX72G3MSZC",
            "type": [
              "string",
              "null"
            ]
          },
          "subscriptionId": {
            "type": "string",
            "description": "ID of the related subscription order, if available.\nThis field is `null` if there are no related subscription orders.",
            "readOnly": true,
            "maxLength": 50,
            "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "quoteId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the related quote, if available.\nThis field is `null` if there are no related quotes.",
            "readOnly": true,
            "maxLength": 50,
            "example": "qt_01HXBZMEGPETPHJZH6V4RHBMA8"
          },
          "currency": {
            "x-sortable": true,
            "x-basic": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "amount": {
            "description": "Amount of the invoice.",
            "type": "number",
            "x-type": "Money",
            "x-sortable": true,
            "x-basic": true,
            "format": "double",
            "readOnly": true
          },
          "amountDue": {
            "description": "Amount that is due on the invoice.",
            "type": "number",
            "x-type": "Money",
            "x-sortable": true,
            "format": "double",
            "readOnly": true
          },
          "subtotalAmount": {
            "description": "Subtotal amount of the invoice.",
            "type": "number",
            "x-type": "Money",
            "format": "double",
            "readOnly": true
          },
          "discountAmount": {
            "description": "Discount amount that is applied to the invoice.",
            "type": "number",
            "x-type": "Money",
            "format": "double",
            "readOnly": true
          },
          "shipping": {
            "$ref": "#/components/schemas/Shipping"
          },
          "tax": {
            "$ref": "#/components/schemas/Taxes"
          },
          "organizationTaxIdNumber": {
            "description": "Organization tax ID number that is displayed on the invoice.",
            "type": [
              "object",
              "null"
            ],
            "required": [
              "type",
              "value"
            ],
            "properties": {
              "type": {
                "type": "string",
                "description": "Type of the tax ID number.",
                "enum": [
                  "eu-vat",
                  "other"
                ],
                "example": "eu-vat"
              },
              "value": {
                "type": "string",
                "description": "Value of the tax ID number.",
                "example": "GB980780684"
              }
            }
          },
          "customerTaxIdNumber": {
            "description": "Customer tax ID number that is displayed on the invoice.",
            "type": [
              "object",
              "null"
            ],
            "required": [
              "type",
              "value"
            ],
            "properties": {
              "type": {
                "type": "string",
                "description": "Type of the tax ID number.",
                "enum": [
                  "eu-vat",
                  "other"
                ],
                "example": "eu-vat"
              },
              "value": {
                "type": "string",
                "description": "Value of the tax ID number.",
                "example": "GB980780684"
              }
            }
          },
          "billingAddress": {
            "description": "Billing address of the invoice.\nAfter the first payment is made for an invoice, this value cannot be changed.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "deliveryAddress": {
            "description": "Delivery address of the invoice.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "poNumber": {
            "description": "Purchase order number that is displayed on the invoice.",
            "type": [
              "string",
              "null"
            ],
            "example": "PO123456",
            "maxLength": 50
          },
          "notes": {
            "description": "Notes for the customer that are displayed on the invoice.",
            "type": "string",
            "maxLength": 65535
          },
          "items": {
            "type": "array",
            "description": "Invoice items array.",
            "readOnly": true,
            "items": {
              "$ref": "#/components/schemas/InvoiceItem"
            }
          },
          "discounts": {
            "type": "array",
            "description": "Discounts applied.",
            "readOnly": true,
            "items": {
              "type": "object",
              "readOnly": true,
              "properties": {
                "couponId": {
                  "type": "string",
                  "description": "ID of the coupon.",
                  "maxLength": 50,
                  "example": "cpn_0YVCNKF81GD778N4YNVGDJK558"
                },
                "redemptionId": {
                  "description": "ID of the redemption.",
                  "$ref": "#/components/schemas/ResourceId"
                },
                "amount": {
                  "description": "Total amount discounted by this coupon.",
                  "type": "number",
                  "format": "double"
                },
                "description": {
                  "type": "string",
                  "description": "Description of the discount."
                },
                "context": {
                  "$ref": "#/components/schemas/DiscountContext"
                }
              }
            }
          },
          "autopayScheduledTime": {
            "description": "Date and time when an automatic payment (autopay) is scheduled.",
            "type": [
              "string",
              "null"
            ],
            "x-sortable": true,
            "format": "date-time"
          },
          "autopayRetryNumber": {
            "description": "Number of times that an automatic payment (autopay) has been attempted on an invoice.",
            "readOnly": true,
            "type": "integer",
            "x-sortable": true,
            "minimum": 0,
            "default": 0
          },
          "status": {
            "type": "string",
            "description": "Status of the invoice.",
            "x-basic": true,
            "readOnly": true,
            "enum": [
              "draft",
              "quotation",
              "unpaid",
              "paid",
              "partially-paid",
              "past-due",
              "abandoned",
              "voided",
              "partially-refunded",
              "refunded",
              "disputed"
            ]
          },
          "delinquentCollectionPeriod": {
            "type": "integer",
            "description": "Length of time, in days, between when the invoice is due and when the invoice is paid.",
            "x-sortable": true,
            "readOnly": true
          },
          "collectionPeriod": {
            "type": "integer",
            "x-sortable": true,
            "description": "Length of time, in days, between when the invoice is issued and when the invoice is paid.",
            "readOnly": true
          },
          "abandonedTime": {
            "description": "Date and time when the invoice is abandoned.",
            "x-sortable": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "voidedTime": {
            "description": "Date and time when the invoice is voided.",
            "x-sortable": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "paidTime": {
            "x-label": "Payment Date",
            "x-sortable": true,
            "x-basic": true,
            "description": "Date and time when the invoice is paid.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "dueTime": {
            "description": "Date and time when the invoice is due for payment.",
            "type": "string",
            "x-sortable": true,
            "format": "date-time"
          },
          "issuedTime": {
            "description": "Date and time when the invoice is issued.",
            "x-label": "Date Issued",
            "x-sortable": true,
            "x-basic": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "paymentFormUrl": {
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "uri",
            "description": "URL where the customer is redirected to pay the invoice\nusing one of the methods which are available to the customer.\nThis is an alternative to creating a new transaction with empty\n`methods`."
          },
          "creditMemoAllocations": {
            "type": "array",
            "description": "Credit memo allocations to an invoice.",
            "readOnly": true,
            "items": {
              "$ref": "#/components/schemas/CreditMemoInvoiceAllocation"
            }
          },
          "customerId": {
            "x-basic": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomerId"
              }
            ]
          },
          "transactions": {
            "type": "array",
            "description": "Invoice transactions array.",
            "maxItems": 10,
            "readOnly": true,
            "items": {
              "$ref": "#/components/schemas/Transaction"
            }
          },
          "retryInstruction": {
            "description": "Invoice payment retry instruction.\nThis object specifies how to proceed if a payment related to the invoice fails.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "attempts": {
                "type": "array",
                "description": "Describes the retry instruction.",
                "minItems": 1,
                "items": {
                  "type": "object",
                  "properties": {
                    "scheduleInstruction": {
                      "$ref": "#/components/schemas/InvoiceRetryScheduleInstruction"
                    },
                    "amountAdjustmentInstruction": {
                      "$ref": "#/components/schemas/InvoiceRetryAmountAdjustmentInstruction"
                    },
                    "tryBackupInstruments": {
                      "description": "Specifies whether to use backup payment instruments on an invoice payment retry.",
                      "type": "boolean",
                      "default": false
                    }
                  },
                  "required": [
                    "scheduleInstruction"
                  ]
                }
              },
              "afterAttemptPolicies": {
                "description": "Describes the action to take when a payment attempt concludes, and payment is not collected.",
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "change-subscription-renewal-time"
                  ]
                }
              },
              "afterRetryEndPolicies": {
                "description": "Describes the action to take when all scheduled payment retries, in a retry instruction, have concluded and payment is not collected.",
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "abandon-invoice",
                    "cancel-subscription"
                  ]
                }
              }
            },
            "required": [
              "attempts",
              "afterAttemptPolicies",
              "afterRetryEndPolicies"
            ]
          },
          "revision": {
            "description": "Number of times the invoice data has been modified.\n\nUse the revision number when analyzing webhook data to\ndetermine if a change should take precedence over the current\nrepresentation.",
            "type": "integer",
            "readOnly": true
          },
          "type": {
            "description": "Type of invoice.",
            "type": "string",
            "enum": [
              "initial",
              "renewal",
              "interim",
              "cancellation",
              "one-time",
              "refund",
              "charge",
              "one-time-sale"
            ],
            "readOnly": true
          },
          "dueReminderTime": {
            "description": "Date and time when a past due reminder event is triggered.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "dueReminderNumber": {
            "description": "Number of past due reminder events that have been triggered.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true
          },
          "organizationId": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/OrganizationId"
              }
            ]
          },
          "delinquencyTime": {
            "description": "Date and time when the related order is considered delinquent, and is canceled.\nIf this value is `null`, no delinquency time is configured.\nIf the `dueTime` of the order becomes greater than the `delinquencyTime` value,\nthe `delinquencyTime` value becomes equal to `dueTime`.\n\nIf an invoice is not related to an order, this field can only be `null`.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "default": null
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "website",
                    "customer",
                    "organization",
                    "attachments",
                    "leadSource",
                    "transactionAllocations",
                    "recalculateInvoice",
                    "subscription"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "website": {
                "type": "object"
              },
              "organization": {
                "type": "object"
              },
              "leadSource": {
                "type": "object"
              },
              "shippingRate": {
                "type": "object"
              }
            }
          }
        }
      },
      "InvoiceIssue": {
        "type": "object",
        "properties": {
          "issuedTime": {
            "description": "Date and time when the invoice is issued.\nIf this field is `null` or omitted, the invoice is issued immediately.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "dueTime": {
            "description": "Date and time when the invoice is due for payment.\nIf this field is `null` or omitted, this value is set to the `issuedTime` value.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "InvoiceReissue": {
        "type": "object",
        "properties": {
          "dueTime": {
            "description": "Date and time when the invoice is due for payment.\nIf this field is `null` or omitted, this value is set to the current date-time.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          }
        }
      },
      "InvoiceTransactionAllocation": {
        "type": "object",
        "properties": {
          "invoiceId": {
            "type": "string",
            "description": "Unique resource ID.",
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "transactionId": {
            "$ref": "#/components/schemas/TransactionId"
          },
          "amount": {
            "type": "number",
            "format": "double"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "invoice",
                    "transaction"
                  ]
                }
              }
            }
          }
        }
      },
      "InvoiceTransaction": {
        "type": "object",
        "required": [
          "transactionId"
        ],
        "properties": {
          "transactionId": {
            "description": "ID of the transaction to apply to the invoice.",
            "$ref": "#/components/schemas/TransactionId"
          },
          "amount": {
            "description": "Amount to be applied to the invoice. This value must not exceed the transaction amount.\nIf omitted, the lesser of the unused transaction amount or the invoice due amount is used.",
            "type": "number",
            "format": "double"
          }
        }
      },
      "InvoiceTimeline": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the timeline message.",
            "readOnly": true,
            "maxLength": 50,
            "example": "tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC"
          },
          "type": {
            "description": "Type of timeline message.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "coupon-applied",
              "email-message-sent",
              "invoice-abandoned",
              "invoice-disputed",
              "invoice-issued",
              "invoice-paid",
              "invoice-partially-paid",
              "invoice-partially-refunded",
              "invoice-past-due",
              "invoice-refunded",
              "invoice-reissued",
              "invoice-renewal-payment-declined",
              "invoice-revenue-recognized",
              "invoice-tax-calculation-failed",
              "invoice-voided",
              "quickbooks-credit-memo-created",
              "quickbooks-credit-memo-voided",
              "quickbooks-invoice-created",
              "quickbooks-invoice-task-failed",
              "quickbooks-invoice-updated",
              "quickbooks-invoice-voided",
              "quickbooks-revenue-recognition-created",
              "timeline-comment-created",
              "transaction-abandoned",
              "transaction-approved",
              "transaction-canceled",
              "transaction-declined",
              "transaction-initiated",
              "transaction-refunded",
              "transaction-voided"
            ]
          },
          "triggeredBy": {
            "description": "Specifies who, or what, triggered the timeline event.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "rebilly",
              "app",
              "direct-api"
            ]
          },
          "message": {
            "description": "Describes the message details.",
            "type": "string"
          },
          "extraData": {
            "$ref": "#/components/schemas/TimelineExtraData"
          },
          "occurredTime": {
            "description": "Date and time when the timeline message occurred.",
            "readOnly": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "CreditMemoTaxItem": {
        "type": "object",
        "required": [
          "amount",
          "description"
        ],
        "properties": {
          "amount": {
            "description": "Amount of the tax.",
            "type": "number",
            "format": "double"
          },
          "description": {
            "type": "string",
            "description": "Description of the tax."
          },
          "rate": {
            "description": "Overall sales tax rate which includes state, county, city and district tax.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "stateAmount": {
            "description": "Amount of sales tax to collect for the state.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "example": 0.94
          },
          "countyAmount": {
            "description": "Amount of sales tax to collect for the county.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "example": 0.04
          },
          "cityAmount": {
            "description": "Amount of sales tax to collect for the city.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "example": 0
          },
          "specialDistrictAmount": {
            "description": "Amount of sales tax to collect for the special district.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "example": 0.38
          },
          "stateRate": {
            "description": "State sales tax rate for given location.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "countyRate": {
            "description": "County sales tax rate for given location.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "cityRate": {
            "description": "City sales tax rate for given location.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "specialDistrictRate": {
            "description": "Special district sales tax rate for given location.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "jurisdictions": {
            "description": "Jurisdiction names for the invoice.",
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "country": {
                "description": "Two-letter ISO country code for the provided location.",
                "type": [
                  "string",
                  "null"
                ],
                "example": "US"
              },
              "state": {
                "description": "Postal abbreviated state name for the provided location.",
                "type": [
                  "string",
                  "null"
                ],
                "example": "CA"
              },
              "county": {
                "description": "County name for the provided location.",
                "type": [
                  "string",
                  "null"
                ],
                "example": "LOS ANGELES"
              },
              "city": {
                "description": "City name for the provided location.",
                "type": [
                  "string",
                  "null"
                ],
                "example": "LOS ANGELES"
              }
            }
          }
        }
      },
      "CreditMemo": {
        "type": "object",
        "description": "Credit memo object.",
        "required": [
          "customerId",
          "currency"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credit memo.",
            "readOnly": true,
            "maxLength": 50,
            "example": "crmm_0YVCNN22TWC3G8H82QNPNVZCHG"
          },
          "number": {
            "description": "Auto-incrementing number based on the sequence of credit memos for any particular customer.",
            "readOnly": true,
            "type": "integer"
          },
          "allocations": {
            "type": "object",
            "description": "Allocations reduce the unused amount of a credit memo.",
            "properties": {
              "transactions": {
                "type": "array",
                "description": "List of transactions (typically refunds, credits, and chargebacks) that are allocated to reduce the unused amount of a credit memo.\n\n  - To delete transaction allocations, send an empty transaction allocation array in the request.\n  - To modify transaction allocations, send a modified transaction allocation array in the request.\n  - If you do not want to modify or delete transaction allocations, do not send a transaction allocation array in the request.",
                "items": {
                  "type": "object",
                  "properties": {
                    "transactionId": {
                      "description": "ID of the transaction to which the credit memo is allocated.",
                      "$ref": "#/components/schemas/TransactionId"
                    },
                    "amount": {
                      "description": "Amount of credit that is allocated from the credit memo to the transaction.\nIf the `amount` value is not supplied or exceeds the unused amount of the credit memo or the transaction amount, the lesser of the following two values is used:\n- The unused amount of the credit memo.\n- The transaction amount.",
                      "type": "number",
                      "format": "double"
                    },
                    "currency": {
                      "readOnly": true,
                      "$ref": "#/components/schemas/CurrencyCode"
                    },
                    "createdTime": {
                      "$ref": "#/components/schemas/CreatedTime"
                    },
                    "updatedTime": {
                      "$ref": "#/components/schemas/UpdatedTime"
                    }
                  }
                }
              },
              "invoices": {
                "type": "array",
                "description": "List of invoices that the credit memo is allocated to.\n\n- To delete invoice allocations, send an empty invoice allocation array in the request.\n  Only `unpaid`, `partially-paid`, and `past-due` invoices can be deleted.\n- To modify invoice allocations, send a modified invoice allocation array in the request.\n  Only `unpaid`, `partially-paid`, and `past-due` invoices can be modified.\n- If you do not want to modify or delete invoice allocations, do not send an invoice allocation array in the request.",
                "items": {
                  "$ref": "#/components/schemas/CreditMemoInvoiceAllocation"
                }
              }
            }
          },
          "items": {
            "type": "array",
            "description": "Items of the credit memo.",
            "items": {
              "type": "object",
              "required": [
                "unitPrice",
                "quantity"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "ID of the credit memo item.",
                  "readOnly": true,
                  "maxLength": 50,
                  "example": "crmm_itm_01HXC7PK2C6F367VYCFXDRYMAQ"
                },
                "invoiceItemId": {
                  "description": "ID of the invoice item to which the credit item is referenced.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 50,
                  "example": "ii_0YVFDEQS2KCFTBN9HXWJFY55GV"
                },
                "description": {
                  "description": "Description of the credit memo item.",
                  "type": "string"
                },
                "unitPrice": {
                  "description": "Price of the credit memo item.",
                  "type": "number",
                  "format": "double"
                },
                "quantity": {
                  "description": "Quantity of the credit memo item.",
                  "type": "integer"
                },
                "price": {
                  "description": "Total price of the credit memo item.",
                  "type": "number",
                  "format": "double",
                  "readOnly": true
                },
                "productId": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "ID of the related product.",
                  "maxLength": 50,
                  "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
                },
                "planId": {
                  "description": "ID of the related plan.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 50,
                  "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                },
                "tax": {
                  "description": "Credit memo item tax.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/CreditMemoTaxItem"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "status": {
            "type": "string",
            "description": "Status of the credit memo.",
            "readOnly": true,
            "enum": [
              "draft",
              "quotation",
              "issued",
              "applied",
              "partially-applied",
              "voided"
            ],
            "x-enumDescriptions": {
              "draft": "Credit memo is in process of being created.\nThe full amount of the credit memo is unused, and the customer has not seen it yet.",
              "quotation": "Credit memo is associated with a quotation invoice.\nIf the customer approves the quotation, the credit memo changes to the `issued` state.",
              "issued": "Credit memo is available with a full amount to be applied.",
              "applied": "The full amount of the credit memo has been applied.\nNo more credit can be created from it.",
              "partially-applied": "A partial amount of the credit memo has been applied.\nA credit can be created from the remaining amount.",
              "voided": "Credit memo has been voided and cannot be used anymore."
            }
          },
          "reason": {
            "description": "Reason for the credit memo.",
            "type": "string",
            "enum": [
              "return",
              "product-unsatisfactory",
              "order-change",
              "order-cancellation",
              "chargeback",
              "write-off",
              "waiver",
              "customer-credit",
              "other"
            ]
          },
          "description": {
            "type": "string",
            "x-basic": true,
            "description": "Public description, that is visible to customers, which describes the purpose of the credit memo."
          },
          "shippingAmount": {
            "description": "Shipping amount of an invoice to credit.",
            "type": "number",
            "format": "double",
            "default": 0,
            "x-type": "Money"
          },
          "taxAmount": {
            "description": "Sum of items tax amount of an invoice to credit.",
            "readOnly": true,
            "type": "number",
            "format": "double",
            "default": 0,
            "x-type": "Money"
          },
          "totalAmount": {
            "description": "Total amount of all credits in the credit memo, including items, shipping, and tax.",
            "readOnly": true,
            "type": "number",
            "format": "double",
            "default": 0,
            "x-type": "Money"
          },
          "unusedAmount": {
            "description": "Unused credit memo amount that has not been allocated.",
            "readOnly": true,
            "type": "number",
            "format": "double",
            "default": 0,
            "x-type": "Money"
          },
          "revision": {
            "type": "integer",
            "readOnly": true,
            "description": "Number of times the credit memo has been modified."
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "invoiceId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the invoice to which the credit memo is issued.",
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer",
                    "invoice"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              }
            }
          }
        }
      },
      "PatchCreditMemo": {
        "type": "object",
        "description": "Patch credit memo object.",
        "properties": {
          "allocations": {
            "type": "object",
            "description": "Allocations reduce the unused amount of a credit memo.",
            "properties": {
              "transactions": {
                "type": "array",
                "description": "List of transactions (typically refunds, credits, and chargebacks) that are allocated to reduce the unused amount of a credit memo.\n\n  - To delete transaction allocations, send an empty transaction allocation array in the request.\n  - To modify transaction allocations, send a modified transaction allocation array in the request.\n  - If you do not want to modify or delete transaction allocations, do not send a transaction allocation array in the request.",
                "items": {
                  "type": "object",
                  "properties": {
                    "transactionId": {
                      "description": "ID of the transaction to which the credit memo is allocated.",
                      "$ref": "#/components/schemas/TransactionId"
                    },
                    "amount": {
                      "description": "Amount of credit that is allocated from the credit memo to the transaction.\nIf the `amount` value is not supplied or exceeds the unused amount of the credit memo or the transaction amount, the lesser of the following two values is used:\n- The unused amount of the credit memo.\n- The transaction amount.",
                      "type": "number",
                      "format": "double"
                    },
                    "currency": {
                      "readOnly": true,
                      "$ref": "#/components/schemas/CurrencyCode"
                    },
                    "createdTime": {
                      "$ref": "#/components/schemas/CreatedTime"
                    },
                    "updatedTime": {
                      "$ref": "#/components/schemas/UpdatedTime"
                    }
                  }
                }
              },
              "invoices": {
                "type": "array",
                "description": "List of invoices that the credit memo is allocated to.\n\n- To delete invoice allocations, send an empty invoice allocation array in the request.\n  Only `unpaid`, `partially-paid`, and `past-due` invoices can be deleted.\n- To modify invoice allocations, send a modified invoice allocation array in the request.\n  Only `unpaid`, `partially-paid`, and `past-due` invoices can be modified.\n- If you do not want to modify or delete invoice allocations, do not send an invoice allocation array in the request.",
                "items": {
                  "type": "object",
                  "properties": {
                    "invoiceId": {
                      "type": "string",
                      "description": "ID of invoice to which the credit memo is allocated.",
                      "maxLength": 50,
                      "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
                    },
                    "amount": {
                      "description": "Amount of credit that is allocated from the credit memo to the invoice.\nIf the `amount` value is not supplied or exceeds the unused amount of the credit memo or the invoice due amount, the lesser of the following two values is used:\n- The unused amount of the credit memo.\n- The invoice due amount.",
                      "type": "number",
                      "format": "double"
                    },
                    "currency": {
                      "readOnly": true,
                      "$ref": "#/components/schemas/CurrencyCode"
                    },
                    "createdTime": {
                      "description": "Date and time at which a credit memo is allocated.",
                      "$ref": "#/components/schemas/ServerTimestamp"
                    },
                    "updatedTime": {
                      "$ref": "#/components/schemas/UpdatedTime"
                    }
                  }
                }
              }
            }
          },
          "items": {
            "type": "array",
            "description": "Items of the credit memo.",
            "items": {
              "type": "object",
              "required": [
                "unitPrice",
                "quantity"
              ],
              "properties": {
                "id": {
                  "type": "string",
                  "description": "ID of the credit memo item.",
                  "readOnly": true,
                  "maxLength": 50,
                  "example": "crmm_itm_01HXC7PK2C6F367VYCFXDRYMAQ"
                },
                "invoiceItemId": {
                  "description": "ID of the invoice item to which the credit item is referenced.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 50,
                  "example": "ii_0YVFDEQS2KCFTBN9HXWJFY55GV"
                },
                "description": {
                  "description": "Description of the credit memo item.",
                  "type": "string"
                },
                "unitPrice": {
                  "description": "Price of the credit memo item.",
                  "type": "number",
                  "format": "double"
                },
                "quantity": {
                  "description": "Quantity of the credit memo item.",
                  "type": "integer"
                },
                "price": {
                  "description": "Total price of the credit memo item.",
                  "type": "number",
                  "format": "double",
                  "readOnly": true
                },
                "productId": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "ID of the related product.",
                  "maxLength": 50,
                  "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
                },
                "planId": {
                  "description": "ID of the related plan.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 50,
                  "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                },
                "tax": {
                  "description": "Credit memo item tax.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/CreditMemoTaxItem"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          },
          "reason": {
            "description": "Reason for the credit memo.",
            "type": "string",
            "enum": [
              "return",
              "product-unsatisfactory",
              "order-change",
              "order-cancellation",
              "chargeback",
              "write-off",
              "waiver",
              "customer-credit",
              "other"
            ]
          },
          "description": {
            "type": "string",
            "x-basic": true,
            "description": "Public description, that is visible to customers, which describes the purpose of the credit memo."
          },
          "shippingAmount": {
            "description": "Shipping amount of an invoice to credit.",
            "type": "number",
            "format": "double",
            "default": 0,
            "x-type": "Money"
          }
        }
      },
      "CreditMemoTimeline": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the timeline message.",
            "readOnly": true,
            "maxLength": 50,
            "example": "tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC"
          },
          "type": {
            "description": "Type of timeline message.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "credit-memo-created",
              "credit-memo-applied",
              "credit-memo-partially-applied",
              "credit-memo-voided"
            ]
          },
          "triggeredBy": {
            "description": "Specifies who, or what, triggered the timeline event.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "rebilly",
              "app",
              "direct-api"
            ]
          },
          "message": {
            "description": "Content of the timeline message.",
            "type": "string"
          },
          "extraData": {
            "$ref": "#/components/schemas/TimelineExtraData"
          },
          "occurredTime": {
            "description": "Date and time when the timeline message occurred.",
            "readOnly": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "JournalAccount": {
        "type": "object",
        "required": [
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the journal account.",
            "readOnly": true,
            "maxLength": 50,
            "example": "jrn_acc_0YVCXS791DD8JAK1WV3VHM70ZQ"
          },
          "name": {
            "type": "string",
            "description": "Name of the journal account.",
            "example": "Unearned revenue"
          },
          "description": {
            "type": [
              "string",
              "null"
            ]
          },
          "createdTime": {
            "description": "Date and time when the journal record is created.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "JournalEntry": {
        "type": "object",
        "required": [
          "period",
          "currency"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the journal entry.",
            "readOnly": true,
            "maxLength": 50,
            "example": "jrn_ent_0YVCXSFCF2DJX99NBBSJCEVETB"
          },
          "period": {
            "type": "object",
            "properties": {
              "startDate": {
                "type": "string",
                "format": "date",
                "example": "2022-09-01"
              },
              "endDate": {
                "type": "string",
                "format": "date",
                "example": "2022-09-30"
              }
            }
          },
          "label": {
            "type": "string",
            "description": "Custom label that can be used to filter entries.\nAnnual orders are created with the label **Annual**.\nMonthly orders are created with the label **Monthly**.",
            "maxLength": 255,
            "default": "monthly"
          },
          "currency": {
            "description": "Currency of the journal record revenue.",
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "description": {
            "type": "string"
          },
          "totalRecognizedAmount": {
            "description": "Total amount of all revenue recognized at the end of the journal period.",
            "type": "number",
            "format": "double",
            "readOnly": true,
            "x-sortable": true
          },
          "totalEstimatedAmount": {
            "description": "Total amount of all revenue estimated at the end of the journal period.",
            "type": "number",
            "format": "double",
            "readOnly": true,
            "x-sortable": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "JournalRecord": {
        "type": "object",
        "required": [
          "journalEntryId",
          "invoiceItemId",
          "debitAccountId",
          "creditAccountId"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique resource ID.",
            "readOnly": true,
            "maxLength": 50,
            "example": "jrn_rec_0YVCXV2HE5DBT89QV7RXSJEZQ4"
          },
          "journalEntryId": {
            "description": "ID of the journal entry.",
            "type": "string",
            "maxLength": 50,
            "example": "jrn_ent_01JXJ8EF9WVR0W187QZ6WF5703"
          },
          "customerId": {
            "description": "ID of the customer.",
            "type": "string",
            "maxLength": 50,
            "example": "cus_0YV7DDSDD1C8DA64KHH2W33CPF",
            "readOnly": true
          },
          "invoiceId": {
            "type": "string",
            "description": "ID of the invoice.",
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT",
            "readOnly": true
          },
          "invoiceItemId": {
            "type": "string",
            "description": "ID of the invoice item.",
            "maxLength": 50,
            "example": "ii_0YVFDEQS2KCFTBN9HXWJFY55GV"
          },
          "type": {
            "type": "string",
            "readOnly": true,
            "enum": [
              "automated",
              "manual"
            ]
          },
          "estimatedAmount": {
            "description": "Amount of revenue estimated to be recognized at the schedule date.\nThis value is ignored when updating a journal record with a `type` of `automated`.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "recognizedAmount": {
            "description": "Amount of revenue recognized at the journal period end.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "debitAccountId": {
            "description": "ID of the debit journal account.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "jrn_acc_01JXJ8S97PTMYX8W01SQ72FSWC"
          },
          "creditAccountId": {
            "description": "ID of the credit journal account.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "jrn_acc_01JXJ8RW7AWMVAH7DP3VXYQC1W"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "invoice": {
                "type": "object"
              },
              "invoiceItem": {
                "type": "object"
              },
              "debitAccount": {
                "type": "object"
              },
              "creditAccount": {
                "type": "object"
              },
              "journalEntry": {
                "type": "object"
              }
            }
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer",
                    "invoice",
                    "invoiceItem",
                    "journalEntry",
                    "creditAccount",
                    "debitAccount"
                  ]
                }
              }
            }
          }
        }
      },
      "KycDocumentTypes": {
        "type": "string",
        "enum": [
          "identity-proof",
          "address-proof",
          "funds-proof",
          "purchase-proof",
          "credit-file-proof"
        ]
      },
      "KycDocumentSubtypes": {
        "type": [
          "string",
          "null"
        ],
        "enum": [
          "passport",
          "id-card",
          "driver-license",
          "birth-certificate",
          "utility-bill",
          "rental-receipt",
          "lease-agreement",
          "copy-credit-card",
          "credit-card-statement",
          "bank-statement",
          "inheritance-documentation",
          "tax-return",
          "salary-slip",
          "sale-of-assets",
          "public-health-card",
          "proof-of-age-card",
          "reverse-of-id",
          "public-service",
          "ewallet-holder-details",
          "ewallet-transaction-statement",
          "marriage-certificate",
          "firearms-license",
          "insurance-letter",
          "income-statement",
          "debtors-letter",
          "other",
          null
        ]
      },
      "KycRequestDocument": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "description": "Type of document to request from the customer.",
            "$ref": "#/components/schemas/KycDocumentTypes"
          },
          "subtypes": {
            "description": "Permitted document subtype.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/KycDocumentSubtypes"
            }
          },
          "maxAttempts": {
            "description": "Total number of allowed document upload attempts.\nUse `0` to allow unlimited upload attempts.",
            "type": "integer",
            "default": 3,
            "minimum": 0,
            "maximum": 100
          },
          "faceProofRequired": {
            "description": "Specifies if the customer must upload a photo of their face (selfie) that matches a provided KYC document.",
            "type": "boolean"
          },
          "faceLivenessRequired": {
            "description": "Specifies if the customer must use the face liveness feature when uploading a selfie.\nFor more information, see [Facial recognition and identity verification](https://www.rebilly.com/docs/kyc-and-aml/kyc#facial-recognition-identity-verification).",
            "type": "boolean"
          }
        }
      },
      "KycDocumentMatchLevels": {
        "description": "Document verification level.",
        "type": "integer",
        "enum": [
          1,
          2,
          3
        ],
        "default": 2,
        "x-enumDescriptions": {
          "1": "Strict verification requirements. This option is used for credit transactions.",
          "2": "Moderate verification requirements. This option is used for sale transactions.",
          "3": "Basic verification requirements. This option is used when a high level of verification is not required."
        }
      },
      "KycRequest": {
        "type": "object",
        "description": "KYC request information.",
        "required": [
          "customerId",
          "documents"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the KYC request.",
            "maxLength": 50,
            "example": "kyc_req_0YV7JMJ3DBCGRBR7K9D4HVGPP5"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "documents": {
            "type": "array",
            "description": "Documents to request from the customer.",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/KycRequestDocument"
            }
          },
          "status": {
            "description": "Status of the request.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "gathering",
              "attempted",
              "partial",
              "pending-review",
              "fulfilled",
              "failed",
              "abandoned",
              "expired"
            ],
            "x-enumDescriptions": {
              "gathering": "No documents have been provided yet.\nThis is a temporary state.",
              "attempted": "At least one document has been provided but none were assigned the `accepted` status.\nThis is a temporary state.",
              "partial": "At least one requested document has the `accepted` status,\nbut not all requested documents have been assigned the `accepted` status.\nThis is a temporary state.",
              "pending-review": "At least one requested document has the `pending` status,\nand no requested documents have been assigned the `accepted` status.\nThis is a temporary state, until the document is reviewed,\nor another `accepted` document is provided.",
              "fulfilled": "All requested documents are provided and have been assigned the `accepted` status.\nThis is a permanent state.",
              "failed": "At least one requested document has exhausted all attempts,\nand has not been assigned a `accepted`, `pending`, or `in-progress` status.\nThis is a permanent state.",
              "abandoned": "One or more documents provided but the request expired.\nThis is a permanent state.",
              "expired": "No documents were provided and the request expired.\nThis is a permanent state."
            }
          },
          "redirectUrl": {
            "description": "URL where the customer is redirected when a KYC document upload is complete.\nWhen the customer is redirected,\nRebilly appends an `info` query parameter that has one of the following values:\n  - `back`: Customer clicked the `back to website` link.\n  - `token_expired`: Customer's token expired.\n  - `success`: Customer uploaded KYC documents that have been analyzed.\n  - `manual`: Customer uploaded KYC documents that require a manual review.\n    This is because the analyzer rejected the documents or could not process them.\n  - `partial`: Some of the customer's KYC documents have been analyzed,\n    but other documents have not.\n    For example, this may occur when a proof of address document is analyzed but proof of ID is not.\n\nExample: `https://example.com?info=success`.",
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "reason": {
            "description": "Reason for uploading.",
            "example": "spend limit",
            "type": [
              "string",
              "null"
            ]
          },
          "matchLevel": {
            "$ref": "#/components/schemas/KycDocumentMatchLevels"
          },
          "revision": {
            "description": "Number of times the KYC request data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "expirationTime": {
            "description": "Date and time when the request expires.\nThe default value is one hour in the future.",
            "type": "string",
            "format": "date-time"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "documents",
                    "gatherer"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "documents": {
                "type": "array"
              }
            }
          }
        }
      },
      "KycDocumentRejectionReasonTypes": {
        "description": "Reason the document is rejected.",
        "type": "string",
        "enum": [
          "document-unreadable",
          "document-expired",
          "document-not-matching",
          "document-duplicate",
          "document-invalid",
          "document-not-open",
          "underage-person",
          "third-party-or-mismatch",
          "expiration-date-missing",
          "issue-date-missing",
          "subtype-missing",
          "dob-mismatch",
          "name-mismatch",
          "critical-info-missing",
          "old-address-on-id",
          "tampered-document",
          "other"
        ]
      },
      "KycDocumentRejection": {
        "description": "Reason the document is rejected.",
        "type": [
          "object",
          "null"
        ],
        "required": [
          "type"
        ],
        "readOnly": true,
        "properties": {
          "type": {
            "$ref": "#/components/schemas/KycDocumentRejectionReasonTypes"
          },
          "message": {
            "description": "KYC document rejection message.",
            "type": "string",
            "maxLength": 255,
            "example": "Provided document is unreadable"
          }
        }
      },
      "KycDocumentMatchesScore": {
        "type": "integer",
        "description": "Calculated score that represents the percentage of confidence that this ID document represents the customer.",
        "minimum": 0,
        "maximum": 100,
        "example": 75
      },
      "KycDocumentCheck": {
        "type": "object",
        "description": "Result of an executed document check during KYC verification.",
        "properties": {
          "name": {
            "description": "Name of the document check.",
            "type": "string",
            "enum": [
              "city",
              "containsImage",
              "date",
              "dateIsInvalid",
              "dateOfBirth",
              "decision",
              "documentSubtype",
              "expirationDate",
              "firstName",
              "hasMatchingFaceProof",
              "hasMinimalAge",
              "isIdentityDocument",
              "isPublishedOnline",
              "isTampered",
              "issueDate",
              "lastName",
              "line1",
              "matchesDateOfBirth",
              "phone",
              "postalCode",
              "region"
            ]
          },
          "failed": {
            "description": "Specifies if a document check has failed.\nWhen a check fails,\nthe score value associated with the check is subtracted from the overall score of the proof document.\nThe overall score together with accept and reject thresholds determine whether an proof document passes or fails verification.\nFor more information, see [KYC](https://www.rebilly.com/docs/kyc-and-aml/kyc).",
            "type": "boolean",
            "example": true
          },
          "score": {
            "type": "integer",
            "description": "Specifies the number of points to deduct from the proof document when a check fails during the verification process.",
            "minimum": 0,
            "maximum": 100,
            "example": 75
          },
          "reason": {
            "description": "Specifies the reason why the KYC check failed.",
            "type": [
              "string",
              "null"
            ],
            "example": "closed_eyes"
          }
        }
      },
      "KycDocumentCheckList": {
        "type": [
          "array",
          "null"
        ],
        "description": "List of checks executed against the document during KYC verification.",
        "items": {
          "$ref": "#/components/schemas/KycDocumentCheck"
        }
      },
      "KycIdentityMatches": {
        "type": "object",
        "description": "Matched identity data.",
        "properties": {
          "containsImage": {
            "description": "Specifies if the document includes an image that contains a face.",
            "type": "boolean",
            "example": true
          },
          "isIdentityDocument": {
            "description": "Specifies if the document resembles an ID.",
            "type": "boolean",
            "example": true
          },
          "isPublishedOnline": {
            "description": "Specifies if an exact match of the document has been found online.",
            "type": "boolean",
            "example": false
          },
          "matchingImages": {
            "description": "URLs where matching images have been found online.",
            "type": "array",
            "readOnly": true,
            "maxItems": 3,
            "items": {
              "type": "string"
            }
          },
          "firstName": {
            "description": "First name of the customer.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "John"
          },
          "lastName": {
            "description": "Last name of the customer.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "Doe"
          },
          "dateOfBirth": {
            "description": "Date of birth detected on the document.\nThis value is null if no match is detected.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "expirationDate": {
            "description": "Expiration date detected on the document.\nThis value is null if no expiration date is detected.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "issueDate": {
            "description": "Issue date detected on the document.\nThis value is null if no issue date is detected.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "hasMinimalAge": {
            "description": "Specifies that the individual is older than the minimal age limit.\nThe minimal age is 21+ the for USA and 18+ for all other countries.\nThis value is null if `dateOfBirth` is not determined.",
            "type": [
              "boolean",
              "null"
            ],
            "readOnly": true,
            "example": true
          },
          "nationality": {
            "description": "Nationality detected on a passport or citizenship document.\nThis value is null if no nationality is detected.",
            "type": [
              "string",
              "null"
            ],
            "example": "US",
            "maxLength": 3
          },
          "issuanceCountry": {
            "description": "Country that issued the document.",
            "type": [
              "string",
              "null"
            ],
            "example": "CA",
            "minLength": 2,
            "maxLength": 2
          },
          "issuanceRegion": {
            "description": "Region, state, province, or territory that issued the document.",
            "type": [
              "string",
              "null"
            ],
            "example": "Ontario"
          },
          "documentNumber": {
            "description": "Unique number on the identity document.\nThis value may contain alphanumeric characters.",
            "type": [
              "string",
              "null"
            ],
            "example": "1234567890"
          },
          "documentSubtype": {
            "description": "Interpreted subtype of the uploaded document.",
            "type": [
              "string",
              "null"
            ],
            "$ref": "#/components/schemas/KycDocumentSubtypes"
          },
          "hasMatchingFaceProof": {
            "description": "Specifies if an identity document has matching face proof.",
            "type": "boolean",
            "example": false
          },
          "isTampered": {
            "description": "Specifies if an identity document has been tampered with.",
            "type": "boolean",
            "example": false
          },
          "isDigitallyTampered": {
            "description": "Specifies if an identity document has been digitally tampered with (experimental).",
            "type": "boolean",
            "example": false
          },
          "isPhotocopy": {
            "description": "Specifies if an identity document is detected as a photocopy.",
            "type": "boolean",
            "example": false
          },
          "hasCompletedFaceLiveness": {
            "description": "Specifies if the face liveness session completed.",
            "type": "boolean",
            "readOnly": true,
            "example": false
          },
          "expiryDate": {
            "description": "Use `expirationDate` field instead.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "deprecated": true
          }
        }
      },
      "KycSettingsIdentity": {
        "type": "object",
        "description": "Identity proof settings.",
        "properties": {
          "weights": {
            "type": "object",
            "description": "Property weights that are used for the KYC document verification process.\n\nAll KYC documents start the verification process with a score of 100.\nIf a check fails, the score is reduced by the corresponding weight.\nFor example, if the `firstName` check weight is set to `5`, and the check fails,\nthe KYC document score becomes `95`.",
            "properties": {
              "containsImage": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the document does not include an image that contains a face."
              },
              "isIdentityDocument": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the document does not resemble an ID."
              },
              "isPublishedOnline": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if an exact match of the document is not found online."
              },
              "firstName": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the customer's first name is not matched."
              },
              "lastName": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the customer's last name is not matched."
              },
              "expirationDate": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if an expiration date is not detected on the document."
              },
              "dateOfBirth": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if a date of birth is not detected on the document."
              },
              "matchesDateOfBirth": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if an identity document does not have a matching date of birth."
              },
              "issueDate": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if an issue date is not detected on the document."
              },
              "hasMinimalAge": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the document does not verify the minimal age limit.\nMinimal age is 21+ the for USA and 18+ for all other countries."
              },
              "hasMatchingFaceProof": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if an identity document does not have matching face proof."
              },
              "nationality": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if a nationality is not detected on the document."
              },
              "documentSubtype": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the document is not one of the recognized document subtypes."
              },
              "isTampered": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the document has been tampered with."
              },
              "isPhotocopy": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the document is detected as a photocopy."
              }
            }
          },
          "thresholds": {
            "type": "object",
            "description": "Pass and fail threshold definition for the document verification process.",
            "properties": {
              "rejectBelow": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Overall score by which an identity proof document fails the verification process."
              },
              "acceptAbove": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Overall score by which an identity proof document passes the verification process."
              }
            }
          },
          "minimumAgeSettings": {
            "type": "object",
            "description": "Minimum age settings for identity proof documents.",
            "properties": {
              "defaultMinimumAge": {
                "type": "integer",
                "minimum": 1,
                "maximum": 100,
                "description": "Default minimum age requirement for identity proof documents.\nThis is used when no location-specific override is configured.",
                "default": 18
              },
              "locationOverrides": {
                "type": "array",
                "description": "Location-specific minimum age.\nEach item specifies a minimum age for a specific location.\nFor country-wide rules, omit the state field.\nFor state-specific rules, include the state field.",
                "items": {
                  "type": "object",
                  "required": [
                    "country",
                    "minimumAge"
                  ],
                  "properties": {
                    "country": {
                      "type": "string",
                      "description": "Country code in ISO 3166 alpha-2 format.",
                      "pattern": "^[A-Z]{2}$",
                      "example": "US"
                    },
                    "state": {
                      "type": "string",
                      "description": "Name or code of the state or region.",
                      "maxLength": 45,
                      "example": "AZ"
                    },
                    "minimumAge": {
                      "type": "integer",
                      "description": "Minimum age requirement for this location.",
                      "minimum": 1,
                      "maximum": 100,
                      "example": 21
                    }
                  }
                },
                "example": [
                  {
                    "country": "US",
                    "minimumAge": 21
                  },
                  {
                    "country": "US",
                    "state": "AL",
                    "minimumAge": 19
                  }
                ]
              }
            }
          }
        }
      },
      "ProofOfIdentityKycDocument": {
        "title": "KYC documents.",
        "type": "object",
        "required": [
          "customerId",
          "documentType",
          "status",
          "fileIds"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the KYC document.",
            "maxLength": 50,
            "example": "kyc_doc_0YV7JHY705C6DA487BFTAA33V8"
          },
          "fileIds": {
            "description": "IDs of linked file objects.\n\nUploaded `identity-proof` files must have the following tags attached to be used for KYC purposes:\n`['kyc', 'id-front']`, `['kyc', 'id-back']`, `['kyc', 'face-proof']`.\n\nPermitted file types for `identity-proof` files: `.jpg`, `.png`, and `.pdf`.",
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 50,
              "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
            }
          },
          "documentType": {
            "description": "Document type submitted for validation.\nOnly the `identity-proof` and `address-proof` types are analyzed automatically.",
            "$ref": "#/components/schemas/KycDocumentTypes"
          },
          "documentSubtype": {
            "description": "Document subtype submitted for validation.",
            "$ref": "#/components/schemas/KycDocumentSubtypes"
          },
          "status": {
            "description": "Status of the validation.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "in-progress",
              "accepted",
              "rejected",
              "archived"
            ],
            "x-enumDescriptions": {
              "pending": "Waiting to be reviewed or analyzed.",
              "in-progress": "Being analyzed by the Rebilly AI.",
              "accepted": "Accepted by AI or a human.",
              "rejected": "Rejected by AI or a human.",
              "archived": "Archived by the Rebilly AI."
            }
          },
          "rejectionReason": {
            "$ref": "#/components/schemas/KycDocumentRejection"
          },
          "requestId": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the KYC request.",
            "maxLength": 50,
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "processedTime": {
            "description": "Date and time when the KYC document is processed.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "reviewerId": {
            "description": "ID of the KYC document reviewer.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 50,
            "example": "44433322-2c4y-483z-a0a9-158621f77a21"
          },
          "reviewerName": {
            "description": "First and last name of the KYC document reviewer.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "reviewStartTime": {
            "description": "Date and time when the manual review starts.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "reviewTime": {
            "description": "Date and time of manual review.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "notes": {
            "description": "Reviewer notes.",
            "type": [
              "string",
              "null"
            ]
          },
          "tags": {
            "description": "List of KYC document tags.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tag"
            }
          },
          "reason": {
            "description": "Reason for uploading.",
            "type": [
              "string",
              "null"
            ]
          },
          "matchLevel": {
            "$ref": "#/components/schemas/KycDocumentMatchLevels"
          },
          "revision": {
            "description": "Number of times the KYC document data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "documentMatches": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Proof of identity document matches.",
            "properties": {
              "score": {
                "$ref": "#/components/schemas/KycDocumentMatchesScore"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              },
              "data": {
                "$ref": "#/components/schemas/KycIdentityMatches"
              }
            }
          },
          "parsedData": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Parsed data.",
            "properties": {
              "score": {
                "$ref": "#/components/schemas/KycDocumentMatchesScore"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              },
              "data": {
                "$ref": "#/components/schemas/KycIdentityMatches"
              }
            }
          },
          "settings": {
            "description": "Settings used to score the document.",
            "readOnly": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/KycSettingsIdentity"
              },
              {
                "type": "null"
              }
            ]
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "files": {
                "type": "array",
                "maxItems": 3,
                "description": "Linked files."
              }
            }
          }
        }
      },
      "KycAddressMatches": {
        "type": "object",
        "description": "Matched address data.",
        "properties": {
          "firstName": {
            "description": "First name of the customer.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "John"
          },
          "lastName": {
            "description": "Last name of the customer.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "Doe"
          },
          "line1": {
            "description": "Address of the customer's residence.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "36 Craven St"
          },
          "city": {
            "description": "Customer's city of residence.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "London"
          },
          "region": {
            "description": "Customer's region of residence.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "London"
          },
          "postalCode": {
            "description": "Postal code of the customer's residence.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "WC2N 5NF"
          },
          "wordCount": {
            "description": "Total number of words in the document.",
            "type": "integer",
            "example": 350
          },
          "uniqueWords": {
            "description": "Total number of unique words in the document.",
            "type": "integer",
            "example": 175
          },
          "date": {
            "description": "Date detected on the document.\nUse this field to determine if the document is recent.",
            "type": [
              "string",
              "null"
            ],
            "format": "date",
            "example": "2021-01-01"
          },
          "phone": {
            "description": "Phone number of the company or agency that issued the document.",
            "type": [
              "string",
              "null"
            ],
            "example": "(123) 456-7890"
          },
          "documentSubtype": {
            "description": "Interpreted subtype of the uploaded document.",
            "type": [
              "string",
              "null"
            ],
            "$ref": "#/components/schemas/KycDocumentSubtypes"
          },
          "isTampered": {
            "description": "Specifies if an address proof document has been tampered with.",
            "type": "boolean",
            "example": false
          }
        }
      },
      "KycSettingsAddress": {
        "type": "object",
        "description": "Address proof settings.",
        "properties": {
          "weights": {
            "type": "object",
            "description": "Property weights that are used for the KYC document verification process.\n\nAll KYC documents start the verification process with a score of 100.\nIf a check fails, the score is reduced by the corresponding weight.\nFor example, if the `firstName` check weight is set to `5`, and the check fails,\nthe KYC document score becomes `95`.",
            "properties": {
              "firstName": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the customer's first name is not matched."
              },
              "lastName": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the customer's last name is not matched."
              },
              "line1": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the customer's address is not matched."
              },
              "city": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the customer's city is not matched."
              },
              "region": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the customer's region is not matched."
              },
              "postalCode": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the customer's postal code is not matched."
              },
              "date": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if a date is not detected on the document."
              },
              "phone": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if a phone number is not detected on the document."
              },
              "documentSubtype": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the document is not one of the recognized document subtypes."
              },
              "isTampered": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added if the document has been tampered with."
              }
            }
          },
          "thresholds": {
            "type": "object",
            "description": "Pass and fail threshold definition for the document verification process.",
            "properties": {
              "rejectBelow": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Overall score by which an identity proof document fails the verification process."
              },
              "acceptAbove": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Overall score by which an identity proof document passes the verification process."
              }
            }
          }
        }
      },
      "ProofOfAddressKycDocument": {
        "title": "KYC documents.",
        "type": "object",
        "required": [
          "customerId",
          "documentType",
          "status",
          "fileIds"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the KYC document.",
            "maxLength": 50,
            "example": "kyc_doc_0YV7JHY705C6DA487BFTAA33V8"
          },
          "fileIds": {
            "description": "IDs of linked file objects.\n\nUploaded `identity-proof` files must have the following tags attached to be used for KYC purposes:\n`['kyc', 'id-front']`, `['kyc', 'id-back']`, `['kyc', 'face-proof']`.\n\nPermitted file types for `identity-proof` files: `.jpg`, `.png`, and `.pdf`.",
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 50,
              "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
            }
          },
          "documentType": {
            "description": "Document type submitted for validation.\nOnly the `identity-proof` and `address-proof` types are analyzed automatically.",
            "$ref": "#/components/schemas/KycDocumentTypes"
          },
          "documentSubtype": {
            "description": "Document subtype submitted for validation.",
            "$ref": "#/components/schemas/KycDocumentSubtypes"
          },
          "status": {
            "description": "Status of the validation.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "in-progress",
              "accepted",
              "rejected",
              "archived"
            ],
            "x-enumDescriptions": {
              "pending": "Waiting to be reviewed or analyzed.",
              "in-progress": "Being analyzed by the Rebilly AI.",
              "accepted": "Accepted by AI or a human.",
              "rejected": "Rejected by AI or a human.",
              "archived": "Archived by the Rebilly AI."
            }
          },
          "rejectionReason": {
            "$ref": "#/components/schemas/KycDocumentRejection"
          },
          "requestId": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the KYC request.",
            "maxLength": 50,
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "processedTime": {
            "description": "Date and time when the KYC document is processed.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "reviewerId": {
            "description": "ID of the KYC document reviewer.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 50,
            "example": "44433322-2c4y-483z-a0a9-158621f77a21"
          },
          "reviewerName": {
            "description": "First and last name of the KYC document reviewer.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "reviewStartTime": {
            "description": "Date and time when the manual review starts.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "reviewTime": {
            "description": "Date and time of manual review.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "notes": {
            "description": "Reviewer notes.",
            "type": [
              "string",
              "null"
            ]
          },
          "tags": {
            "description": "List of KYC document tags.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tag"
            }
          },
          "reason": {
            "description": "Reason for uploading.",
            "type": [
              "string",
              "null"
            ]
          },
          "matchLevel": {
            "$ref": "#/components/schemas/KycDocumentMatchLevels"
          },
          "revision": {
            "description": "Number of times the KYC document data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "documentMatches": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "properties": {
              "score": {
                "$ref": "#/components/schemas/KycDocumentMatchesScore"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              },
              "data": {
                "$ref": "#/components/schemas/KycAddressMatches"
              }
            }
          },
          "parsedData": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "properties": {
              "score": {
                "$ref": "#/components/schemas/KycDocumentMatchesScore"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              },
              "data": {
                "$ref": "#/components/schemas/KycAddressMatches"
              }
            }
          },
          "settings": {
            "description": "Settings used to score the document.",
            "readOnly": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/KycSettingsAddress"
              },
              {
                "type": "null"
              }
            ]
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "files": {
                "type": "array",
                "maxItems": 3,
                "description": "Linked files."
              }
            }
          }
        }
      },
      "FundsMatches": {
        "type": "object",
        "properties": {
          "firstName": {
            "description": "First name of the customer.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "John"
          },
          "lastName": {
            "description": "Last name of the customer.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "Doe"
          },
          "documentSubtype": {
            "description": "Interpreted subtype of the uploaded document.",
            "type": [
              "string",
              "null"
            ],
            "$ref": "#/components/schemas/KycDocumentSubtypes"
          }
        }
      },
      "ProofOfFundsKycDocument": {
        "title": "KYC documents.",
        "type": "object",
        "required": [
          "customerId",
          "documentType",
          "status",
          "fileIds"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the KYC document.",
            "maxLength": 50,
            "example": "kyc_doc_0YV7JHY705C6DA487BFTAA33V8"
          },
          "fileIds": {
            "description": "IDs of linked file objects.\n\nUploaded `identity-proof` files must have the following tags attached to be used for KYC purposes:\n`['kyc', 'id-front']`, `['kyc', 'id-back']`, `['kyc', 'face-proof']`.\n\nPermitted file types for `identity-proof` files: `.jpg`, `.png`, and `.pdf`.",
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 50,
              "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
            }
          },
          "documentType": {
            "description": "Document type submitted for validation.\nOnly the `identity-proof` and `address-proof` types are analyzed automatically.",
            "$ref": "#/components/schemas/KycDocumentTypes"
          },
          "documentSubtype": {
            "description": "Document subtype submitted for validation.",
            "$ref": "#/components/schemas/KycDocumentSubtypes"
          },
          "status": {
            "description": "Status of the validation.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "in-progress",
              "accepted",
              "rejected",
              "archived"
            ],
            "x-enumDescriptions": {
              "pending": "Waiting to be reviewed or analyzed.",
              "in-progress": "Being analyzed by the Rebilly AI.",
              "accepted": "Accepted by AI or a human.",
              "rejected": "Rejected by AI or a human.",
              "archived": "Archived by the Rebilly AI."
            }
          },
          "rejectionReason": {
            "$ref": "#/components/schemas/KycDocumentRejection"
          },
          "requestId": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the KYC request.",
            "maxLength": 50,
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "processedTime": {
            "description": "Date and time when the KYC document is processed.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "reviewerId": {
            "description": "ID of the KYC document reviewer.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 50,
            "example": "44433322-2c4y-483z-a0a9-158621f77a21"
          },
          "reviewerName": {
            "description": "First and last name of the KYC document reviewer.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "reviewStartTime": {
            "description": "Date and time when the manual review starts.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "reviewTime": {
            "description": "Date and time of manual review.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "notes": {
            "description": "Reviewer notes.",
            "type": [
              "string",
              "null"
            ]
          },
          "tags": {
            "description": "List of KYC document tags.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tag"
            }
          },
          "reason": {
            "description": "Reason for uploading.",
            "type": [
              "string",
              "null"
            ]
          },
          "matchLevel": {
            "$ref": "#/components/schemas/KycDocumentMatchLevels"
          },
          "settings": {
            "description": "Settings used to score the document.",
            "type": [
              "object",
              "null"
            ]
          },
          "revision": {
            "description": "Number of times the KYC document data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "documentMatches": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Proof of funds document matches.",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/FundsMatches"
              }
            }
          },
          "parsedData": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "properties": {
              "data": {
                "$ref": "#/components/schemas/FundsMatches"
              }
            }
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "files": {
                "type": "array",
                "maxItems": 3,
                "description": "Linked files."
              }
            }
          }
        }
      },
      "PurchaseMatches": {
        "type": "object",
        "properties": {
          "firstName": {
            "description": "First name of the customer if it is matched.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "John"
          },
          "lastName": {
            "description": "Last name of the customer if it is matched.\nThis value is null if no match is found.",
            "type": [
              "string",
              "null"
            ],
            "example": "Doe"
          },
          "paymentInstrumentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the payment instrument related to the document.\nThis value is null if no match is found.",
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "documentSubtype": {
            "description": "Interpreted subtype of the uploaded document.",
            "type": [
              "string",
              "null"
            ],
            "$ref": "#/components/schemas/KycDocumentSubtypes"
          }
        }
      },
      "ProofOfPurchaseKycDocument": {
        "title": "KYC documents.",
        "type": "object",
        "required": [
          "customerId",
          "documentType",
          "status",
          "fileIds"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the KYC document.",
            "maxLength": 50,
            "example": "kyc_doc_0YV7JHY705C6DA487BFTAA33V8"
          },
          "fileIds": {
            "description": "IDs of linked file objects.\n\nUploaded `identity-proof` files must have the following tags attached to be used for KYC purposes:\n`['kyc', 'id-front']`, `['kyc', 'id-back']`, `['kyc', 'face-proof']`.\n\nPermitted file types for `identity-proof` files: `.jpg`, `.png`, and `.pdf`.",
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 50,
              "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
            }
          },
          "documentType": {
            "description": "Document type submitted for validation.\nOnly the `identity-proof` and `address-proof` types are analyzed automatically.",
            "$ref": "#/components/schemas/KycDocumentTypes"
          },
          "documentSubtype": {
            "description": "Document subtype submitted for validation.",
            "$ref": "#/components/schemas/KycDocumentSubtypes"
          },
          "status": {
            "description": "Status of the validation.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "in-progress",
              "accepted",
              "rejected",
              "archived"
            ],
            "x-enumDescriptions": {
              "pending": "Waiting to be reviewed or analyzed.",
              "in-progress": "Being analyzed by the Rebilly AI.",
              "accepted": "Accepted by AI or a human.",
              "rejected": "Rejected by AI or a human.",
              "archived": "Archived by the Rebilly AI."
            }
          },
          "rejectionReason": {
            "$ref": "#/components/schemas/KycDocumentRejection"
          },
          "requestId": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the KYC request.",
            "maxLength": 50,
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "processedTime": {
            "description": "Date and time when the KYC document is processed.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "reviewerId": {
            "description": "ID of the KYC document reviewer.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 50,
            "example": "44433322-2c4y-483z-a0a9-158621f77a21"
          },
          "reviewerName": {
            "description": "First and last name of the KYC document reviewer.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "reviewStartTime": {
            "description": "Date and time when the manual review starts.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "reviewTime": {
            "description": "Date and time of manual review.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "notes": {
            "description": "Reviewer notes.",
            "type": [
              "string",
              "null"
            ]
          },
          "tags": {
            "description": "List of KYC document tags.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tag"
            }
          },
          "reason": {
            "description": "Reason for uploading.",
            "type": [
              "string",
              "null"
            ]
          },
          "matchLevel": {
            "$ref": "#/components/schemas/KycDocumentMatchLevels"
          },
          "settings": {
            "description": "Settings used to score the document.",
            "type": [
              "object",
              "null"
            ]
          },
          "revision": {
            "description": "Number of times the KYC document data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "documentMatches": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Proof of purchase document matches.",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/PurchaseMatches"
              }
            }
          },
          "parsedData": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Parsed data.",
            "properties": {
              "data": {
                "$ref": "#/components/schemas/PurchaseMatches"
              }
            }
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer",
                    "paymentInstrument"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "files": {
                "type": "array",
                "maxItems": 3,
                "description": "Linked files."
              }
            }
          }
        }
      },
      "CreditFileCommonDecisionData": {
        "readOnly": true,
        "type": "object",
        "properties": {
          "lastNameMatch": {
            "description": "Last name match.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          },
          "firstNameMatch": {
            "description": "First name match.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          },
          "civicNumberMatch": {
            "description": "Civic number match.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          },
          "streetNameMatch": {
            "description": "Street name match.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          },
          "cityMatch": {
            "description": "City match.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          },
          "postalCodeMatch": {
            "description": "Postal code match.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          },
          "provinceMatch": {
            "description": "Province match.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          },
          "dateOfBirthMatch": {
            "description": "Date of birth match.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          },
          "ageOfCreditFileThreeOrMoreYearsOld": {
            "description": "Age of credit file is three or more years old.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          },
          "addressAsReported": {
            "description": "Address as reported.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          },
          "nameAsReported": {
            "description": "Name as reported.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          },
          "dateOfBirthAsReported": {
            "description": "Date of birth as reported.",
            "type": "string",
            "readOnly": true,
            "example": "Y"
          }
        }
      },
      "CreditFileMatches": {
        "type": "object",
        "properties": {
          "creditBureau": {
            "description": "Credit bureau from which the credit file data is sourced.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "equifax",
              "experian",
              "transunion",
              "test-bureau"
            ]
          },
          "creditFileNumber": {
            "description": "Credit file number from the credit bureau.",
            "type": "string",
            "readOnly": true
          },
          "name": {
            "description": "Name of the person to consult about the credit file.",
            "type": "string",
            "readOnly": true
          },
          "consultedDate": {
            "description": "Date to consult with the credit bureau about the credit file.",
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "decision": {
            "description": "Specifies if the credit file is used in a single source, or as part of a dual source, proof of identity decision.",
            "type": "string",
            "enum": [
              "single-source",
              "dual-source",
              "other"
            ],
            "x-enumDescriptions": {
              "single-source": "Credit file used as a single source of proof for an identity decisions.",
              "dual-source": "Credit file used as a source of proof where the credit bureau agency found two reliable trade sources.\nAt least two sources are required for a dual-source proof of identity decision.",
              "other": "Credit file cannot be used for KYC decisions."
            },
            "readOnly": true
          },
          "trades": {
            "description": "Contains information to support the dual process.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "type": "string",
                  "description": "Trade name.",
                  "example": "Rogers"
                },
                "accountNumber": {
                  "type": "string",
                  "example": "123-ABC-123"
                },
                "dateOpened": {
                  "type": "string",
                  "format": "date"
                }
              }
            },
            "readOnly": true
          },
          "referenceData": {
            "description": "Extra data from the credit bureau.",
            "readOnly": true,
            "type": "object",
            "properties": {
              "singleSourceHit": {
                "description": "Single source hit.",
                "type": "string",
                "readOnly": true,
                "example": "Y"
              },
              "dualSourceHit": {
                "description": "Dual source hit.",
                "type": "string",
                "readOnly": true,
                "example": "Y"
              },
              "waterfallProcess": {
                "description": "Waterfall process.",
                "type": "string",
                "readOnly": true,
                "example": "Y"
              },
              "creditFileCreatedDate": {
                "description": "Date when the credit file is created.",
                "type": "string",
                "readOnly": true
              },
              "numberOfTradesOnFile": {
                "description": "Number of trades on file.",
                "type": "string",
                "readOnly": true,
                "example": "001"
              },
              "singleDecision": {
                "description": "Data related to a single source decision.",
                "type": "object",
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreditFileCommonDecisionData"
                  }
                ]
              },
              "dualDecision": {
                "description": "Data related to a dual source decision.",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/CreditFileCommonDecisionData"
                    }
                  ]
                }
              }
            }
          }
        }
      },
      "ProofOfCreditFileKycDocument": {
        "title": "KYC documents.",
        "type": "object",
        "required": [
          "customerId",
          "documentType",
          "status",
          "fileIds"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the KYC document.",
            "maxLength": 50,
            "example": "kyc_doc_0YV7JHY705C6DA487BFTAA33V8"
          },
          "fileIds": {
            "description": "IDs of linked file objects.\n\nUploaded `identity-proof` files must have the following tags attached to be used for KYC purposes:\n`['kyc', 'id-front']`, `['kyc', 'id-back']`, `['kyc', 'face-proof']`.\n\nPermitted file types for `identity-proof` files: `.jpg`, `.png`, and `.pdf`.",
            "type": "array",
            "items": {
              "type": "string",
              "maxLength": 50,
              "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
            }
          },
          "documentType": {
            "description": "Document type submitted for validation.\nOnly the `identity-proof` and `address-proof` types are analyzed automatically.",
            "$ref": "#/components/schemas/KycDocumentTypes"
          },
          "documentSubtype": {
            "description": "Document subtype submitted for validation.",
            "$ref": "#/components/schemas/KycDocumentSubtypes"
          },
          "status": {
            "description": "Status of the validation.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "in-progress",
              "accepted",
              "rejected",
              "archived"
            ],
            "x-enumDescriptions": {
              "pending": "Waiting to be reviewed or analyzed.",
              "in-progress": "Being analyzed by the Rebilly AI.",
              "accepted": "Accepted by AI or a human.",
              "rejected": "Rejected by AI or a human.",
              "archived": "Archived by the Rebilly AI."
            }
          },
          "rejectionReason": {
            "$ref": "#/components/schemas/KycDocumentRejection"
          },
          "requestId": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the KYC request.",
            "maxLength": 50,
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "processedTime": {
            "description": "Date and time when the KYC document is processed.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "reviewerId": {
            "description": "ID of the KYC document reviewer.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 50,
            "example": "44433322-2c4y-483z-a0a9-158621f77a21"
          },
          "reviewerName": {
            "description": "First and last name of the KYC document reviewer.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "reviewStartTime": {
            "description": "Date and time when the manual review starts.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "reviewTime": {
            "description": "Date and time of manual review.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "notes": {
            "description": "Reviewer notes.",
            "type": [
              "string",
              "null"
            ]
          },
          "tags": {
            "description": "List of KYC document tags.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Tag"
            }
          },
          "reason": {
            "description": "Reason for uploading.",
            "type": [
              "string",
              "null"
            ]
          },
          "matchLevel": {
            "$ref": "#/components/schemas/KycDocumentMatchLevels"
          },
          "settings": {
            "description": "Settings used to score the document.",
            "type": [
              "object",
              "null"
            ]
          },
          "revision": {
            "description": "Number of times the KYC document data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "documentMatches": {
            "description": "Proof of credit document matches.",
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "properties": {
              "data": {
                "$ref": "#/components/schemas/CreditFileMatches"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              }
            }
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "files": {
                "type": "array",
                "maxItems": 3,
                "description": "Linked files."
              }
            }
          }
        }
      },
      "KycDocument": {
        "type": "object",
        "description": "KYC document information.",
        "discriminator": {
          "propertyName": "documentType",
          "mapping": {
            "identity-proof": "#/components/schemas/ProofOfIdentityKycDocument",
            "address-proof": "#/components/schemas/ProofOfAddressKycDocument",
            "funds-proof": "#/components/schemas/ProofOfFundsKycDocument",
            "purchase-proof": "#/components/schemas/ProofOfPurchaseKycDocument",
            "credit-file-proof": "#/components/schemas/ProofOfCreditFileKycDocument"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/ProofOfIdentityKycDocument"
          },
          {
            "$ref": "#/components/schemas/ProofOfAddressKycDocument"
          },
          {
            "$ref": "#/components/schemas/ProofOfFundsKycDocument"
          },
          {
            "$ref": "#/components/schemas/ProofOfPurchaseKycDocument"
          },
          {
            "$ref": "#/components/schemas/ProofOfCreditFileKycDocument"
          }
        ]
      },
      "KycSettings": {
        "type": "object",
        "description": "Settings for KYC score calculation.",
        "properties": {
          "identityProof": {
            "$ref": "#/components/schemas/KycSettingsIdentity"
          },
          "addressProof": {
            "$ref": "#/components/schemas/KycSettingsAddress"
          },
          "uiVersion": {
            "description": "Version of the KYC document gatherer UI.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "1",
              "2"
            ],
            "default": "1",
            "x-enumDescriptions": {
              "1": "Classic design.",
              "2": "Modern design, optimized for the best user experience on both mobile and desktop devices."
            }
          }
        }
      },
      "ResetPasswordToken": {
        "type": "object",
        "required": [
          "username"
        ],
        "properties": {
          "token": {
            "description": "ID of the token.",
            "type": "string",
            "readOnly": true
          },
          "username": {
            "description": "Username associated with the token.",
            "type": "string"
          },
          "credentialId": {
            "description": "Credential ID associated with the token.",
            "type": "string",
            "readOnly": true
          },
          "expiredTime": {
            "description": "Date and time when the password expires.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "PaymentCardBrand": {
        "description": "Brand of payment card.",
        "type": "string",
        "enum": [
          "Visa",
          "MasterCard",
          "American Express",
          "Discover",
          "Maestro",
          "Solo",
          "Electron",
          "JCB",
          "Voyager",
          "Diners Club",
          "Switch",
          "Laser",
          "China UnionPay",
          "AstroPay Card"
        ]
      },
      "UseAsBackup": {
        "description": "Specifies if this payment instrument can be used as a backup for invoice payment retries.",
        "type": "boolean",
        "default": false
      },
      "LastPaymentTime": {
        "description": "Date and time of the last approved payment.\nPayments are the result of `sale` or `capture` transactions.",
        "type": [
          "string",
          "null"
        ],
        "format": "date-time",
        "readOnly": true,
        "x-sortable": true,
        "x-label": "Last Payment Time"
      },
      "PaymentCard": {
        "type": "object",
        "description": "Payment card information.",
        "title": "Payment card",
        "required": [
          "method"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the payment instrument.",
            "readOnly": true,
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "method": {
            "description": "Method of payment instrument.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "payment-card"
            ]
          },
          "status": {
            "type": "string",
            "description": "Status of the payment instrument.\nAn `active` status means that a payment instrument has been used at least once for an approved transaction.\nTo remove an instrument from use, set this value to `deactivated`.\n\nFor more information, see [Deactivate a payment instrument](./PostPaymentInstrumentDeactivation).",
            "enum": [
              "active",
              "inactive",
              "expired",
              "deactivated",
              "verification-needed"
            ]
          },
          "fingerprint": {
            "description": "Unique value that is used to identify the payment instrument.\nThis value is generated from the `bin` and the `last4` values.\nThis value contains alphanumeric characters.",
            "type": "string",
            "readOnly": true
          },
          "bin": {
            "description": "Bank Identification Number (BIN) of the payment card.\nThis value is the same as the first 6 digits of the associated Primary Account Number (PAN).",
            "type": "string",
            "format": "bin",
            "readOnly": true
          },
          "last4": {
            "description": "Last 4 digits of the associated Primary Account Number (PAN).",
            "type": "string",
            "readOnly": true
          },
          "pan": {
            "description": "Primary Account Number (PAN) of the payment card.",
            "type": "string",
            "writeOnly": true
          },
          "expYear": {
            "description": "Expiration year of the payment card.",
            "type": "integer"
          },
          "expMonth": {
            "description": "Expiration month of the payment card.",
            "type": "integer"
          },
          "cvv": {
            "description": "Card Verification Value (CVV) of the payment card.",
            "type": "string",
            "writeOnly": true
          },
          "brand": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/PaymentCardBrand"
              }
            ]
          },
          "bankCountry": {
            "description": "Bank country of the payment instrument.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "bankName": {
            "description": "Bank name of the payment instrument.",
            "type": "string",
            "readOnly": true
          },
          "billingAddress": {
            "description": "Contact's billing address.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          },
          "billingPortalUrl": {
            "description": "URL of the billing portal where the card can be updated.",
            "type": "string",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "lastPaymentTime": {
            "$ref": "#/components/schemas/LastPaymentTime"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "stickyGatewayAccountId": {
            "description": "ID of the sticky gateway account.\nAll future payments are processed by this gateway account.\n\nFor more information,\nsee [Gateway routing](https://www.rebilly.com/docs/settings/intelligent-payment-routing/#sticky-gateway-accounts).",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "expirationReminderTime": {
            "description": "Date and time when an expiration reminder event is triggered.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "expirationReminderNumber": {
            "description": "Number of expiration reminder events that have triggered.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true
          },
          "referenceData": {
            "description": "Payment instrument reference data.",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "gatewayTransactionId": "GAT123"
            }
          },
          "digitalWallet": {
            "readOnly": true,
            "description": "Digital wallet type.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "Apple Pay",
              "Google Pay",
              "Samsung Pay",
              null
            ]
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "revision": {
            "description": "Number of times the payment instrument data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer",
                    "authTransaction",
                    "approvalUrl"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "authTransaction": {
                "type": "object"
              },
              "customer": {
                "type": "object"
              }
            }
          }
        }
      },
      "BankAccount": {
        "type": "object",
        "title": "Bank account",
        "required": [
          "method"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the payment instrument.",
            "readOnly": true,
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "method": {
            "description": "Method of payment instrument.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "ach"
            ]
          },
          "bankName": {
            "description": "Name of the bank.",
            "type": "string"
          },
          "routingNumber": {
            "description": "Bank routing number.",
            "type": "string"
          },
          "accountNumberType": {
            "description": "Type of bank account number.\nA valid value is a Basic Bank Account Number (BBAN) or an International Bank Account Number (IBAN).",
            "type": "string",
            "default": "BBAN",
            "enum": [
              "BBAN",
              "IBAN"
            ]
          },
          "accountType": {
            "description": "Type of bank account.",
            "type": "string",
            "enum": [
              "checking",
              "savings",
              "other"
            ]
          },
          "bic": {
            "description": "Bank Identifier Code (BIC).",
            "type": [
              "string",
              "null"
            ]
          },
          "billingAddress": {
            "description": "Customer's billing address.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "fingerprint": {
            "description": "Unique value which identifies the bank account.\nThis value contains alphanumeric characters.\nDepending on the type of bank account number,\na bank account fingerprint is generated using one of the following:\n- BBAN: `last4` and `routingNumber` values.\n- IBAN: First 8 characters of the IBAN and the `last4` value.",
            "type": "string",
            "readOnly": true
          },
          "last4": {
            "description": "Last 4 digits of the bank account number.",
            "type": "string",
            "readOnly": true
          },
          "status": {
            "description": "Status of the bank account.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "deactivated"
            ]
          },
          "stickyGatewayAccountId": {
            "description": "ID of the sticky gateway account.\nAll future payments are processed by this gateway account.\n\nFor more information, see [Gateway routing](https://www.rebilly.com/docs/settings/intelligent-payment-routing/#sticky-gateway-accounts).",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "lastPaymentTime": {
            "$ref": "#/components/schemas/LastPaymentTime"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "revision": {
            "description": "Number of times the payment instrument data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              }
            }
          }
        }
      },
      "PayPalAccount": {
        "type": "object",
        "title": "PayPal account",
        "required": [
          "method",
          "customerId",
          "billingAddress"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the payment instrument.",
            "readOnly": true,
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "method": {
            "description": "Method of payment instrument.",
            "type": "string",
            "enum": [
              "paypal"
            ]
          },
          "billingAddress": {
            "description": "Billing address.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "username": {
            "description": "PayPal username.",
            "type": "string",
            "readOnly": true
          },
          "status": {
            "description": "PayPal account status.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "inactive",
              "active",
              "deactivated"
            ]
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "lastPaymentTime": {
            "$ref": "#/components/schemas/LastPaymentTime"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "stickyGatewayAccountId": {
            "description": "ID of the sticky gateway account.\nAll future payments are processed by this gateway account.\n\nFor more information, see [Gateway routing](https://www.rebilly.com/docs/settings/intelligent-payment-routing/#sticky-gateway-accounts).",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "revision": {
            "description": "Number of times the payment instrument data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer",
                    "authTransaction",
                    "approvalUrl"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "authTransaction": {
                "type": "object"
              },
              "customer": {
                "type": "object"
              }
            }
          }
        }
      },
      "KhelocardCard": {
        "type": "object",
        "title": "Khelocard card",
        "required": [
          "method"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the payment instrument.",
            "readOnly": true,
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "method": {
            "description": "Method of payment instrument.",
            "type": "string",
            "enum": [
              "Khelocard"
            ]
          },
          "fingerprint": {
            "description": "Unique value which identifies the payment instrument.\nThis value contains alphanumeric characters.\nThis value is generated from the card number, CVV, and expiration date.",
            "type": "string"
          },
          "number": {
            "description": "Khelocard card masked number.",
            "type": "string"
          },
          "last4": {
            "description": "Last 4 digits of the number.",
            "type": "string"
          },
          "expYear": {
            "description": "Khelocard card expiration year.",
            "type": "integer"
          },
          "expMonth": {
            "description": "Khelocard card expiration month.",
            "type": "integer"
          },
          "billingAddress": {
            "description": "Billing address.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "status": {
            "description": "Payment instrument status.",
            "type": "string",
            "enum": [
              "active",
              "deactivated"
            ]
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "lastPaymentTime": {
            "$ref": "#/components/schemas/LastPaymentTime"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "stickyGatewayAccountId": {
            "description": "ID of the sticky gateway account.\nAll future payments are processed by this gateway account.\n\nFor more information,\nsee [Gateway routing](https://www.rebilly.com/docs/settings/intelligent-payment-routing/#sticky-gateway-accounts).",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "revision": {
            "description": "Number of times the payment instrument data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              }
            }
          }
        }
      },
      "AlternativePaymentMethods": {
        "type": "string",
        "description": "Payment method.",
        "enum": [
          "cash",
          "check",
          "paypal",
          "AdvCash",
          "Aera",
          "Affirm",
          "Afterpay",
          "Aircash",
          "Alfa-click",
          "Alipay",
          "AstroPay Card",
          "AstroPay-GO",
          "BankReferenced",
          "bank-transfer",
          "bank-transfer-2",
          "bank-transfer-3",
          "bank-transfer-4",
          "bank-transfer-5",
          "bank-transfer-6",
          "bank-transfer-7",
          "bank-transfer-8",
          "bank-transfer-9",
          "Baloto",
          "Beeline",
          "Belfius-direct-net",
          "bitcoin",
          "Bizum",
          "Boleto",
          "cash-deposit",
          "CASHlib",
          "CashToCode",
          "China UnionPay",
          "Clearpay",
          "Cleo",
          "CODVoucher",
          "Conekta-oxxo",
          "Cupon-de-pagos",
          "cryptocurrency",
          "domestic-cards",
          "Directa24Card",
          "echeck",
          "ecoPayz",
          "ecoPayzTurkey",
          "ecoVoucher",
          "Efecty",
          "EPS",
          "ePay.bg",
          "eZeeWallet",
          "FasterPay",
          "Flexepin",
          "Giropay",
          "Gpaysafe",
          "Google Pay",
          "iDebit",
          "iDEAL",
          "ING-homepay",
          "INOVAPAY-pin",
          "INOVAPAY-wallet",
          "InstaDebit",
          "instant-bank-transfer",
          "InstantPayments",
          "Interac",
          "Interac-online",
          "Interac-eTransfer",
          "invoice",
          "iWallet",
          "Jeton",
          "JetonCash",
          "jpay",
          "KakaoPay",
          "Khelocard",
          "Klarna",
          "KNOT",
          "loonie",
          "Matrix",
          "MaxiCash",
          "Megafon",
          "MercadoPago",
          "MiFinity-eWallet",
          "miscellaneous",
          "MobilePay",
          "Bancontact",
          "Bancontact-mobile",
          "MTS",
          "MuchBetter",
          "MuchBetterVoucher",
          "Multibanco",
          "Neosurf",
          "Netbanking",
          "Neteller",
          "Nordea-Solo",
          "OchaPay",
          "online-bank-transfer",
          "Onlineueberweisen",
          "oriental-wallet",
          "OXXO",
          "P24",
          "Pagadito",
          "PagoEffectivo",
          "Pagsmile-deposit-express",
          "Pagsmile-lottery",
          "PayCash",
          "Payco",
          "Payeer",
          "PaymentAsia-crypto",
          "Paymero",
          "Perfect-money",
          "Piastrix",
          "PIX",
          "plaid-account",
          "PayTabs",
          "Paysafecard",
          "Paysafecash",
          "Pay4Fun",
          "Paynote",
          "PinPay",
          "phone",
          "PhonePe",
          "POLi",
          "PostFinance-card",
          "PostFinance-e-finance",
          "QIWI",
          "QPay",
          "QQPay",
          "rapyd-checkout",
          "Resurs",
          "SafetyPay",
          "Samsung Pay",
          "SEPA",
          "Skrill",
          "Skrill Rapid Transfer",
          "SMSVoucher",
          "Sofort",
          "SparkPay",
          "swift-dbt",
          "Tele2",
          "Terminaly-RF",
          "ToditoCash-card",
          "Trustly",
          "Tupay",
          "UPayCard",
          "UPI",
          "USD-coin",
          "VCreditos",
          "VenusPoint",
          "Viva",
          "voucher",
          "voucher-2",
          "voucher-3",
          "voucher-4",
          "Wallet88",
          "Webmoney",
          "Webpay",
          "Webpay-2",
          "Webpay Card",
          "WeChat Pay",
          "wire",
          "XPay-P2P",
          "XPay-QR",
          "Yandex-money",
          "Zotapay",
          "Zimpler",
          "Zip"
        ]
      },
      "AlternativeInstrument": {
        "type": "object",
        "title": "Alternative instrument",
        "required": [
          "method",
          "customerId",
          "billingAddress"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the payment instrument.",
            "readOnly": true,
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "method": {
            "description": "Payment method of the payment instrument.",
            "allOf": [
              {
                "$ref": "#/components/schemas/AlternativePaymentMethods"
              },
              {
                "not": {
                  "enum": [
                    "payment-card",
                    "paypal",
                    "ach",
                    "echeck",
                    "Khelocard"
                  ]
                }
              }
            ]
          },
          "billingAddress": {
            "description": "Billing address of the user that is associated with the payment instrument.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "status": {
            "description": "Payment instrument status.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "deactivated"
            ]
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "lastPaymentTime": {
            "$ref": "#/components/schemas/LastPaymentTime"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "stickyGatewayAccountId": {
            "description": "ID of the sticky gateway account.\nAll future payments are processed by this gateway account.\n\nFor more information,\nsee [Gateway routing](https://www.rebilly.com/docs/settings/intelligent-payment-routing/#sticky-gateway-accounts).",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "referenceData": {
            "description": "Payment instrument reference data.",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "gatewayTransactionId": "GAT123"
            }
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "revision": {
            "description": "Number of times the payment instrument data has been modified.\n\nUse this value when analyzing webhook data to determine if a change must take precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "customer"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              }
            }
          }
        }
      },
      "PaymentInstrument": {
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "payment-card": "#/components/schemas/PaymentCard",
            "ach": "#/components/schemas/BankAccount",
            "paypal": "#/components/schemas/PayPalAccount",
            "Khelocard": "#/components/schemas/KhelocardCard",
            "cash": "#/components/schemas/AlternativeInstrument",
            "check": "#/components/schemas/AlternativeInstrument",
            "AdvCash": "#/components/schemas/AlternativeInstrument",
            "Alfa-click": "#/components/schemas/AlternativeInstrument",
            "Alipay": "#/components/schemas/AlternativeInstrument",
            "AstroPay Card": "#/components/schemas/AlternativeInstrument",
            "AstroPay-GO": "#/components/schemas/AlternativeInstrument",
            "BankReferenced": "#/components/schemas/AlternativeInstrument",
            "bank-transfer": "#/components/schemas/AlternativeInstrument",
            "bank-transfer-2": "#/components/schemas/AlternativeInstrument",
            "bank-transfer-3": "#/components/schemas/AlternativeInstrument",
            "bank-transfer-4": "#/components/schemas/AlternativeInstrument",
            "bank-transfer-5": "#/components/schemas/AlternativeInstrument",
            "bank-transfer-6": "#/components/schemas/AlternativeInstrument",
            "bank-transfer-7": "#/components/schemas/AlternativeInstrument",
            "bank-transfer-8": "#/components/schemas/AlternativeInstrument",
            "bank-transfer-9": "#/components/schemas/AlternativeInstrument",
            "Baloto": "#/components/schemas/AlternativeInstrument",
            "Beeline": "#/components/schemas/AlternativeInstrument",
            "Belfius-direct-net": "#/components/schemas/AlternativeInstrument",
            "bitcoin": "#/components/schemas/AlternativeInstrument",
            "Bizum": "#/components/schemas/AlternativeInstrument",
            "Boleto": "#/components/schemas/AlternativeInstrument",
            "cash-deposit": "#/components/schemas/AlternativeInstrument",
            "CASHlib": "#/components/schemas/AlternativeInstrument",
            "CashToCode": "#/components/schemas/AlternativeInstrument",
            "China UnionPay": "#/components/schemas/AlternativeInstrument",
            "Cleo": "#/components/schemas/AlternativeInstrument",
            "CODVoucher": "#/components/schemas/AlternativeInstrument",
            "Conekta-oxxo": "#/components/schemas/AlternativeInstrument",
            "Cupon-de-pagos": "#/components/schemas/AlternativeInstrument",
            "cryptocurrency": "#/components/schemas/AlternativeInstrument",
            "domestic-cards": "#/components/schemas/AlternativeInstrument",
            "ecoPayz": "#/components/schemas/AlternativeInstrument",
            "ecoVoucher": "#/components/schemas/AlternativeInstrument",
            "Efecty": "#/components/schemas/AlternativeInstrument",
            "EPS": "#/components/schemas/AlternativeInstrument",
            "ePay.bg": "#/components/schemas/AlternativeInstrument",
            "eZeeWallet": "#/components/schemas/AlternativeInstrument",
            "FasterPay": "#/components/schemas/AlternativeInstrument",
            "Flexepin": "#/components/schemas/AlternativeInstrument",
            "Giropay": "#/components/schemas/AlternativeInstrument",
            "Gpaysafe": "#/components/schemas/AlternativeInstrument",
            "Google Pay": "#/components/schemas/AlternativeInstrument",
            "iDebit": "#/components/schemas/AlternativeInstrument",
            "iDEAL": "#/components/schemas/AlternativeInstrument",
            "ING-homepay": "#/components/schemas/AlternativeInstrument",
            "INOVAPAY-pin": "#/components/schemas/AlternativeInstrument",
            "INOVAPAY-wallet": "#/components/schemas/AlternativeInstrument",
            "InstaDebit": "#/components/schemas/AlternativeInstrument",
            "instant-bank-transfer": "#/components/schemas/AlternativeInstrument",
            "InstantPayments": "#/components/schemas/AlternativeInstrument",
            "Interac": "#/components/schemas/AlternativeInstrument",
            "Interac-online": "#/components/schemas/AlternativeInstrument",
            "Interac-eTransfer": "#/components/schemas/AlternativeInstrument",
            "invoice": "#/components/schemas/AlternativeInstrument",
            "iWallet": "#/components/schemas/AlternativeInstrument",
            "Jeton": "#/components/schemas/AlternativeInstrument",
            "jpay": "#/components/schemas/AlternativeInstrument",
            "Klarna": "#/components/schemas/AlternativeInstrument",
            "KNOT": "#/components/schemas/AlternativeInstrument",
            "loonie": "#/components/schemas/AlternativeInstrument",
            "Matrix": "#/components/schemas/AlternativeInstrument",
            "MaxiCash": "#/components/schemas/AlternativeInstrument",
            "Megafon": "#/components/schemas/AlternativeInstrument",
            "MiFinity-eWallet": "#/components/schemas/AlternativeInstrument",
            "miscellaneous": "#/components/schemas/AlternativeInstrument",
            "Bancontact": "#/components/schemas/AlternativeInstrument",
            "Bancontact-mobile": "#/components/schemas/AlternativeInstrument",
            "MTS": "#/components/schemas/AlternativeInstrument",
            "MuchBetter": "#/components/schemas/AlternativeInstrument",
            "Multibanco": "#/components/schemas/AlternativeInstrument",
            "Neosurf": "#/components/schemas/AlternativeInstrument",
            "Netbanking": "#/components/schemas/AlternativeInstrument",
            "Neteller": "#/components/schemas/AlternativeInstrument",
            "Nordea-Solo": "#/components/schemas/AlternativeInstrument",
            "OchaPay": "#/components/schemas/AlternativeInstrument",
            "online-bank-transfer": "#/components/schemas/AlternativeInstrument",
            "Onlineueberweisen": "#/components/schemas/AlternativeInstrument",
            "oriental-wallet": "#/components/schemas/AlternativeInstrument",
            "OXXO": "#/components/schemas/AlternativeInstrument",
            "P24": "#/components/schemas/AlternativeInstrument",
            "Pagadito": "#/components/schemas/AlternativeInstrument",
            "PagoEffectivo": "#/components/schemas/AlternativeInstrument",
            "Pagsmile-deposit-express": "#/components/schemas/AlternativeInstrument",
            "Pagsmile-lottery": "#/components/schemas/AlternativeInstrument",
            "PayCash": "#/components/schemas/AlternativeInstrument",
            "Payeer": "#/components/schemas/AlternativeInstrument",
            "PaymentAsia-crypto": "#/components/schemas/AlternativeInstrument",
            "Paymero": "#/components/schemas/AlternativeInstrument",
            "Perfect-money": "#/components/schemas/AlternativeInstrument",
            "Piastrix": "#/components/schemas/AlternativeInstrument",
            "plaid-account": "#/components/schemas/AlternativeInstrument",
            "PayTabs": "#/components/schemas/AlternativeInstrument",
            "Paysafecard": "#/components/schemas/AlternativeInstrument",
            "Paysafecash": "#/components/schemas/AlternativeInstrument",
            "Pay4Fun": "#/components/schemas/AlternativeInstrument",
            "Paynote": "#/components/schemas/AlternativeInstrument",
            "PinPay": "#/components/schemas/AlternativeInstrument",
            "phone": "#/components/schemas/AlternativeInstrument",
            "PhonePe": "#/components/schemas/AlternativeInstrument",
            "POLi": "#/components/schemas/AlternativeInstrument",
            "PostFinance-card": "#/components/schemas/AlternativeInstrument",
            "PostFinance-e-finance": "#/components/schemas/AlternativeInstrument",
            "QIWI": "#/components/schemas/AlternativeInstrument",
            "QPay": "#/components/schemas/AlternativeInstrument",
            "QQPay": "#/components/schemas/AlternativeInstrument",
            "rapyd-checkout": "#/components/schemas/AlternativeInstrument",
            "Resurs": "#/components/schemas/AlternativeInstrument",
            "SafetyPay": "#/components/schemas/AlternativeInstrument",
            "SEPA": "#/components/schemas/AlternativeInstrument",
            "Skrill": "#/components/schemas/AlternativeInstrument",
            "Skrill Rapid Transfer": "#/components/schemas/AlternativeInstrument",
            "SMSVoucher": "#/components/schemas/AlternativeInstrument",
            "Sofort": "#/components/schemas/AlternativeInstrument",
            "SparkPay": "#/components/schemas/AlternativeInstrument",
            "swift-dbt": "#/components/schemas/AlternativeInstrument",
            "Tele2": "#/components/schemas/AlternativeInstrument",
            "Terminaly-RF": "#/components/schemas/AlternativeInstrument",
            "ToditoCash-card": "#/components/schemas/AlternativeInstrument",
            "Trustly": "#/components/schemas/AlternativeInstrument",
            "UPayCard": "#/components/schemas/AlternativeInstrument",
            "UPI": "#/components/schemas/AlternativeInstrument",
            "USD-coin": "#/components/schemas/AlternativeInstrument",
            "VCreditos": "#/components/schemas/AlternativeInstrument",
            "VenusPoint": "#/components/schemas/AlternativeInstrument",
            "voucher": "#/components/schemas/AlternativeInstrument",
            "voucher-2": "#/components/schemas/AlternativeInstrument",
            "voucher-3": "#/components/schemas/AlternativeInstrument",
            "voucher-4": "#/components/schemas/AlternativeInstrument",
            "Webmoney": "#/components/schemas/AlternativeInstrument",
            "Webpay": "#/components/schemas/AlternativeInstrument",
            "Webpay-2": "#/components/schemas/AlternativeInstrument",
            "Webpay Card": "#/components/schemas/AlternativeInstrument",
            "WeChat Pay": "#/components/schemas/AlternativeInstrument",
            "XPay-P2P": "#/components/schemas/AlternativeInstrument",
            "XPay-QR": "#/components/schemas/AlternativeInstrument",
            "Yandex-money": "#/components/schemas/AlternativeInstrument",
            "Zotapay": "#/components/schemas/AlternativeInstrument",
            "Zimpler": "#/components/schemas/AlternativeInstrument"
          }
        },
        "anyOf": [
          {
            "$ref": "#/components/schemas/PaymentCard"
          },
          {
            "$ref": "#/components/schemas/BankAccount"
          },
          {
            "$ref": "#/components/schemas/PayPalAccount"
          },
          {
            "$ref": "#/components/schemas/KhelocardCard"
          },
          {
            "$ref": "#/components/schemas/AlternativeInstrument"
          }
        ]
      },
      "PaymentInstrumentCreateToken": {
        "title": "Payment token",
        "type": "object",
        "required": [
          "customerId",
          "token"
        ],
        "properties": {
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "token": {
            "description": "ID of the payment token.",
            "type": "string"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          }
        }
      },
      "PaymentCardCreatePlain": {
        "title": "Payment card",
        "type": "object",
        "required": [
          "method",
          "customerId",
          "pan",
          "expYear",
          "expMonth",
          "billingAddress"
        ],
        "properties": {
          "method": {
            "description": "Method of the payment instrument.",
            "type": "string",
            "enum": [
              "payment-card"
            ]
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "pan": {
            "description": "Primary Account Number (PAN) of the payment card.",
            "type": "string",
            "writeOnly": true
          },
          "expYear": {
            "description": "Expiration year of the payment card.",
            "type": "integer"
          },
          "expMonth": {
            "description": "Expiration month of the payment card.",
            "type": "integer"
          },
          "cvv": {
            "description": "Card Verification Value (CVV) of the payment card.",
            "type": "string",
            "writeOnly": true
          },
          "billingAddress": {
            "description": "Billing address.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "riskMetadata": {
            "$ref": "#/components/schemas/RiskMetadata"
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          }
        }
      },
      "BBANType": {
        "type": "object",
        "description": "BBAN type object.",
        "required": [
          "accountNumberType",
          "method",
          "customerId",
          "accountNumber",
          "routingNumber",
          "accountType",
          "billingAddress"
        ],
        "properties": {
          "method": {
            "description": "Payment method of the payment instrument.",
            "type": "string",
            "enum": [
              "ach"
            ]
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "accountNumberType": {
            "description": "Type of the customer's bank account number.\nA valid value is a Basic Bank Account Number (BBAN) or an International Bank Account Number (IBAN).",
            "type": "string",
            "enum": [
              "BBAN"
            ]
          },
          "accountNumber": {
            "description": "Customer's bank account number.\nDetailed information on all ISO 13616-compliant national IBAN formats is available in the [SWIFT IBAN Registry](https://www.swift.com/standards/data-standards/iban).",
            "type": "string",
            "pattern": "^[0-9]+$",
            "example": "1234567890"
          },
          "routingNumber": {
            "description": "Bank routing number.",
            "type": "string",
            "pattern": "^[0-9]+$",
            "example": "123456789"
          },
          "accountType": {
            "description": "Type of the bank account.",
            "type": "string",
            "enum": [
              "checking",
              "savings",
              "other"
            ]
          },
          "bankName": {
            "description": "Name of the bank.",
            "type": "string"
          },
          "bic": {
            "description": "Bank Identifier Code (BIC).",
            "type": "string"
          },
          "billingAddress": {
            "description": "Customer's billing address.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "riskMetadata": {
            "$ref": "#/components/schemas/RiskMetadata"
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          }
        }
      },
      "IBANType": {
        "type": "object",
        "description": "IBAN type object.",
        "required": [
          "accountNumberType",
          "method",
          "customerId",
          "accountNumber",
          "billingAddress"
        ],
        "properties": {
          "method": {
            "description": "Payment method of the payment instrument.",
            "type": "string",
            "enum": [
              "ach"
            ]
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "accountNumberType": {
            "description": "Type of the customer's bank account number.\nA valid value is a Basic Bank Account Number (BBAN) or an International Bank Account Number (IBAN).",
            "type": "string",
            "enum": [
              "IBAN"
            ]
          },
          "accountNumber": {
            "description": "Customer's bank account number.\nDetailed information on all ISO 13616-compliant national IBAN formats is available in the [SWIFT IBAN Registry](https://www.swift.com/standards/data-standards/iban).",
            "type": "string",
            "example": "DE89370400440532013000"
          },
          "bankName": {
            "description": "Name of the bank.",
            "type": "string"
          },
          "bic": {
            "description": "Bank Identifier Code (BIC).",
            "type": "string",
            "example": "DEUTDE8LXXX"
          },
          "billingAddress": {
            "description": "Customer's billing address.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "riskMetadata": {
            "$ref": "#/components/schemas/RiskMetadata"
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          }
        }
      },
      "BankAccountCreatePlain": {
        "title": "Bank account",
        "type": "object",
        "required": [
          "accountNumberType"
        ],
        "discriminator": {
          "propertyName": "accountNumberType",
          "mapping": {
            "BBAN": "#/components/schemas/BBANType",
            "IBAN": "#/components/schemas/IBANType"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/BBANType"
          },
          {
            "$ref": "#/components/schemas/IBANType"
          }
        ]
      },
      "PaymentInstrumentUpdateToken": {
        "type": "object",
        "properties": {
          "token": {
            "description": "ID of the payment token.",
            "type": "string"
          },
          "billingAddress": {
            "description": "Customer's billing address.\nIf this value is supplied it overrides the billing address that is supplied with the token.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "stickyGatewayAccountId": {
            "description": "ID of the sticky gateway account.\nAll future payments are processed by this gateway account.\nTo remove the sticky gateway account from a payment instrument, set this value to `null`.\n\nFor more information,\nsee [Gateway routing](https://www.rebilly.com/docs/settings/intelligent-payment-routing/#sticky-gateway-accounts).",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "gw_acc_0YVCXMF26DDNKAERE5NW727S34"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          }
        }
      },
      "PaymentCardUpdatePlain": {
        "type": "object",
        "properties": {
          "cvv": {
            "description": "Card Verification Value (CVV) of the payment card.",
            "type": "string"
          },
          "expMonth": {
            "description": "Expiration month of the payment card.",
            "type": "integer"
          },
          "expYear": {
            "description": "Expiration year of the payment card.",
            "type": "integer"
          },
          "billingAddress": {
            "description": "Billing address.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "stickyGatewayAccountId": {
            "description": "ID of the sticky gateway account.\nAll future payments are processed by this gateway account.\n\nFor more information,\nsee [Gateway routing](https://www.rebilly.com/docs/settings/intelligent-payment-routing/#sticky-gateway-accounts).",
            "$ref": "#/components/schemas/ResourceId"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          }
        }
      },
      "BankAccountUpdatePlain": {
        "type": "object",
        "properties": {
          "bankName": {
            "description": "Name of the bank.",
            "type": "string"
          },
          "accountType": {
            "description": "Bank account type.",
            "type": "string",
            "enum": [
              "checking",
              "savings",
              "other"
            ]
          },
          "billingAddress": {
            "description": "Billing address.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "stickyGatewayAccountId": {
            "description": "ID of the sticky gateway account.\nAll future payments are processed by this gateway account.\n\nFor more information,\nsee [Gateway routing](https://www.rebilly.com/docs/settings/intelligent-payment-routing/#sticky-gateway-accounts).",
            "$ref": "#/components/schemas/ResourceId"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "useAsBackup": {
            "$ref": "#/components/schemas/UseAsBackup"
          }
        }
      },
      "PaymentInstrumentNameInquiry": {
        "type": "object",
        "description": "Perform a name inquiry on a payment instrument.",
        "required": [
          "gatewayAccountId"
        ],
        "properties": {
          "gatewayAccountId": {
            "description": "ID of the gateway account.",
            "type": "string"
          },
          "result": {
            "description": "Result of the payment instrument name inquiry.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "full-match",
              "partial-match",
              "no-match",
              "not-supported",
              "unknown"
            ]
          },
          "response": {
            "readOnly": true,
            "description": "Raw response message from gateway.",
            "type": "string"
          }
        }
      },
      "PlanFormulaFixedFee": {
        "title": "Fixed-fee",
        "description": "Fixed-fee pricing details.\nUse this formula for subscriptions that involve the same price,\nnumber of units, and reoccur over a fixed period of time.\n\nFor more information, see [Fixed-fee per period](https://www.rebilly.com/docs/settings/pricing-formulas/#fixed-fee-per-period).",
        "type": "object",
        "required": [
          "price",
          "formula"
        ],
        "properties": {
          "formula": {
            "type": "string",
            "description": "Price formula that determines which algorithm is used to calculate the invoice price based on the following factors:\n\n- Quantity in the order.\n  This value may be variable if you are charging based on usage.\n  If you are not charging based on usage,\n  this value is determined when an order is created.\n\n- Price of the quantity range.\n  Some formulas set a price based on defined product quantity ranges.\n\nFor more information, see [Price formulas](https://www.rebilly.com/docs/billing/pricing-formulas/).",
            "enum": [
              "fixed-fee"
            ]
          },
          "price": {
            "description": "Use this formula to charge for subscriptions that have a fixed price,\nnumber of units, and reoccur over a fixed period of time,\nsuch as every: day, week, month, year, or number of years.\n\nFor example, a streaming company charges customers $13.99 each month for subscription period that is 6 months in duration.\nThe quantity of movies that a customer streams each month does not impact the price.",
            "type": "number",
            "format": "double",
            "example": 99.95
          }
        }
      },
      "PlanFormulaFlatRate": {
        "title": "Flat rate",
        "description": "Flat rate pricing details.\nUse this formula to charge a flat fee per unit.\nFor example, $0.10 per transaction or $4 per unit.\n\nFor more information, see [Flat rate pricing](https://www.rebilly.com/docs/billing/pricing-formulas/#flat-rate-pricing).",
        "type": "object",
        "required": [
          "price",
          "formula"
        ],
        "properties": {
          "formula": {
            "type": "string",
            "description": "Price formula that determines which algorithm is used to calculate the invoice price based on the following factors:\n\n- Quantity in the order.\n  This value may be variable if you are charging based on usage.\n  If you are not charging based on usage,\n  this value is determined when an order is created.\n\n- Price of the quantity range.\n  Some formulas set a price based on defined product quantity ranges.\n\nFor more information, see [Price formulas](https://www.rebilly.com/docs/billing/pricing-formulas/).",
            "enum": [
              "flat-rate"
            ]
          },
          "price": {
            "description": "Use this formula to charge a flat fee per unit.\nFor example, $0.10 for each transaction or $4 per unit.\n\nIf the value of this field is `0`, the product is free.",
            "type": "number",
            "format": "double",
            "example": 99.95
          },
          "minQuantity": {
            "description": "Minimum permitted unit quantity.\nIf this value is `null`, no limit is in place.",
            "type": [
              "integer",
              "null"
            ],
            "default": null,
            "example": 1,
            "minimum": 1,
            "maximum": 999999999
          },
          "maxQuantity": {
            "description": "Maximum permitted unit quantity.\nIf this value is `null`, no limit is in place.",
            "type": [
              "integer",
              "null"
            ],
            "example": 1,
            "minimum": 1,
            "maximum": 999999999
          }
        }
      },
      "PlanFormulaStairstep": {
        "title": "Stair-step",
        "description": "Stair-step pricing details.\nUse this formula to charge for units that are sold in specific quantities.\n\nFor more information, see [Stair-step](https://www.rebilly.com/docs/billing/pricing-formulas/#stair-step).",
        "type": "object",
        "required": [
          "brackets",
          "formula"
        ],
        "properties": {
          "formula": {
            "type": "string",
            "description": "Price formula that determines which algorithm is used to calculate the invoice price based on the following factors:\n\n- Quantity in the order.\n  This value may be variable if you are charging based on usage.\n  If you are not charging based on usage,\n  this value is determined when an order is created.\n\n- Price of the quantity range.\n  Some formulas set a price based on defined product quantity ranges.\n\nFor more information, see [Price formulas](https://www.rebilly.com/docs/billing/pricing-formulas/).",
            "enum": [
              "stairstep"
            ]
          },
          "brackets": {
            "description": "Use this formula to charge for units that are sold in specific quantity ranges.\n\nFor example, a bank charges a merchant based on the number of transactions they complete each month.\n\nPrice total | Max quantity | Description\n------------|--------------|------------\n$50         | 1000         | Up to 1000 transactions\n$100        | 1500         | Between 1000 and 1500 transactions\n$200        | 3000         | Between 1500 and 3000 transactions\n$500        | null         | More than 3000 transactions\n\n- If the merchant completes 900 transaction in a month, they are charged $50.\n- If the merchant completes 1001 transaction in a month, they are charged $100.\n- If the merchant completes 2500  transaction in a month, they are charged $200.\n- If the merchant completes more than 3000 transaction in a month, they are charged $500.",
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "properties": {
                "price": {
                  "description": "Price of the quantity range.\nIf the value of this field is `0`, the product is free.",
                  "type": "number",
                  "format": "double",
                  "example": 99.95
                },
                "maxQuantity": {
                  "description": "Maximum permitted unit quantity.\nIf this value is `null`, no limit is in place.\n\nThis value starts from the end of the previous quantity range.\nIf there are no previous quantity ranges,\nthis value starts at 1.",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "example": 1,
                  "minimum": 1,
                  "maximum": 999999999
                }
              }
            }
          },
          "minQuantity": {
            "description": "Minimum permitted unit quantity.\nIf this value is `null`, no limit is in place.",
            "type": [
              "integer",
              "null"
            ],
            "default": null,
            "example": 1,
            "minimum": 1,
            "maximum": 999999999
          }
        }
      },
      "PlanFormulaTiered": {
        "title": "Tiered",
        "description": "Tiered pricing details.\nUse this formula to charge for units that are sold within defined quantity ranges, or tiers.\n\nFor more information, see [Tiered](https://www.rebilly.com/docs/settings/pricing-formulas/#tiered).",
        "type": "object",
        "required": [
          "brackets",
          "formula"
        ],
        "properties": {
          "formula": {
            "type": "string",
            "description": "Price formula that determines which algorithm is used to calculate the invoice price based on the following factors:\n\n- Quantity in the order.\n  This value may be variable if you are charging based on usage.\n  If you are not charging based on usage,\n  this value is determined when an order is created.\n\n- Price of the quantity range.\n  Some formulas set a price based on defined product quantity ranges.\n\nFor more information, see [Price formulas](https://www.rebilly.com/docs/billing/pricing-formulas/).",
            "enum": [
              "tiered"
            ]
          },
          "brackets": {
            "description": "Use this formula to charge for units that are sold within defined quantity ranges, or tiers.\nIf a customer buys a number of units that span more than one tier,\nthe total cost is calculated based on the cost of the units in each tier.\n\nFor example, a software company sells user licenses based on the following:\n\nTier | Price per user | Max quantity | Description\n-----|----------------|--------------|------------\n1    | $40            | 3            | 1 to 3 user licenses\n2    | $30            | 5            | 5 to 8 user licenses\n3    | $15            | null         | 9 or more user licenses\n\nIf a customer buys 10 user licenses, the pricing is as follows:\n- 3 licenses at tier 1 (3 x $40) is 120\n- 5 licenses at tier 2 (5 x $30) is 150\n- 2 licenses at tier 3 (2 x $15) is 30\n\nTotal cost = $330\n\nFormula: `(price for the tier x quantity within the tier)` + `(price for next tier x quantity in next tier)` + `...` = final price.",
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "properties": {
                "price": {
                  "description": "Price of the quantity range.\nIf the value of this field is `0`, the product is free.",
                  "type": "number",
                  "format": "double",
                  "example": 99.95
                },
                "maxQuantity": {
                  "description": "Maximum permitted unit quantity.\nIf this value is `null`, no limit is in place.\n\nThis value starts from the end of the previous quantity range.\nIf there are no previous quantity ranges,\nthis value starts at 1.",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "example": 1,
                  "minimum": 1,
                  "maximum": 999999999
                }
              }
            }
          },
          "minQuantity": {
            "description": "Minimum permitted unit quantity.\nIf this value is `null`, no limit is in place.",
            "type": [
              "integer",
              "null"
            ],
            "default": null,
            "example": 1,
            "minimum": 1,
            "maximum": 999999999
          }
        }
      },
      "PlanFormulaVolume": {
        "title": "Volume",
        "description": "Volume pricing details.\nUse this formula to charge for units that are sold in bulk,\nor volume ranges. In general,\nthis formula means that a customer pays less per unit when they buy a large volume of units.\n\nFor more information, see [Volume](https://www.rebilly.com/docs/settings/pricing-formulas/#volume).",
        "type": "object",
        "required": [
          "brackets",
          "formula"
        ],
        "properties": {
          "formula": {
            "type": "string",
            "description": "Price formula that determines which algorithm is used to calculate the invoice price based on the following factors:\n\n- Quantity in the order.\n  This value may be variable if you are charging based on usage.\n  If you are not charging based on usage,\n  this value is determined when an order is created.\n\n- Price of the quantity range.\n  Some formulas set a price based on defined product quantity ranges.\n\nFor more information, see [Price formulas](https://www.rebilly.com/docs/billing/pricing-formulas/).",
            "enum": [
              "volume"
            ]
          },
          "brackets": {
            "description": "Use this formula to charge for units that are sold in bulk, or volume ranges.\nThis formula enables customers to pays less per unit when they buy a large volume of units.\nUnit cost is based on the highest volume range, and does not include lower volume range pricing.\n\nFor example, a company sells t-shirts in the following volume ranges:\n\nPrice per unit| Max quantity | Description\n--------------|--------------|------------\n$10           | 1            | 1 t-shirt\n$8            | 5            | 2 to 5 t-shirts\n$4            | null         | 6 or more t-shirts\n\n- If a customer buys 1 unit, they pay $10.\n- If a customer buys 3 units, they pay $24 per unit, which is $8 per unit.\n- If a customer buys 10 units, they pay $40, which is $4 per unit.",
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "properties": {
                "price": {
                  "description": "Price of the quantity range.\nIf the value of this field is `0`, the product is free.",
                  "type": "number",
                  "format": "double",
                  "example": 99.95
                },
                "maxQuantity": {
                  "description": "Maximum permitted unit quantity.\nIf this value is `null`, no limit is in place.\n\nThis value starts from the end of the previous quantity range.\nIf there are no previous quantity ranges,\nthis value starts at 1.",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "example": 1,
                  "minimum": 1,
                  "maximum": 999999999
                }
              }
            }
          },
          "minQuantity": {
            "description": "Minimum permitted unit quantity.\nIf this value is `null`, no limit is in place.",
            "type": [
              "integer",
              "null"
            ],
            "default": null,
            "example": 1,
            "minimum": 1,
            "maximum": 999999999
          }
        }
      },
      "PlanPriceFormula": {
        "description": "Pricing details.",
        "type": "object",
        "discriminator": {
          "propertyName": "formula",
          "mapping": {
            "fixed-fee": "#/components/schemas/PlanFormulaFixedFee",
            "flat-rate": "#/components/schemas/PlanFormulaFlatRate",
            "stairstep": "#/components/schemas/PlanFormulaStairstep",
            "tiered": "#/components/schemas/PlanFormulaTiered",
            "volume": "#/components/schemas/PlanFormulaVolume"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/PlanFormulaFixedFee"
          },
          {
            "$ref": "#/components/schemas/PlanFormulaFlatRate"
          },
          {
            "$ref": "#/components/schemas/PlanFormulaStairstep"
          },
          {
            "$ref": "#/components/schemas/PlanFormulaTiered"
          },
          {
            "$ref": "#/components/schemas/PlanFormulaVolume"
          }
        ]
      },
      "PlanSetup": {
        "type": [
          "object",
          "null"
        ],
        "description": "Setup fee information for the plan.",
        "required": [
          "price"
        ],
        "properties": {
          "price": {
            "description": "One-time setup fee charged when the plan starts.\nSet to `0` if no setup fee applies.",
            "type": "number",
            "format": "double"
          }
        }
      },
      "OneTimeSalePlan": {
        "type": "object",
        "description": "Details of the one-time sale plan.\nUse this plan for non-recurring, one-time, sales.",
        "required": [
          "id",
          "name",
          "currency",
          "productId",
          "pricing"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the plan.",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X",
            "readOnly": true
          },
          "name": {
            "description": "Name of the plan.\nThis name is displayed on invoices and receipts.",
            "type": "string",
            "maxLength": 255
          },
          "description": {
            "type": "string",
            "description": "Plain-text description of the plan.\nThis field accepts plain-text only.",
            "maxLength": 65535
          },
          "richDescription": {
            "type": "string",
            "description": "Rich-text description of the plan.\nThis field accepts rich text formatting, such as: bold, underline, italic, and hyperlinks.",
            "maxLength": 65535
          },
          "productId": {
            "type": "string",
            "description": "ID of the related product.",
            "maxLength": 50,
            "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
          },
          "productOptions": {
            "type": [
              "object",
              "null"
            ],
            "description": "Name-value pairs that specify the product options.",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "color": "red",
              "size": "xxl"
            }
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "currencySign": {
            "description": "Currency sign.",
            "readOnly": true,
            "type": "string"
          },
          "pricing": {
            "$ref": "#/components/schemas/PlanPriceFormula"
          },
          "setup": {
            "$ref": "#/components/schemas/PlanSetup"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "isActive": {
            "type": "boolean",
            "description": "Specifies if the plan is active.",
            "default": true
          },
          "revision": {
            "type": "integer",
            "readOnly": true,
            "description": "Number of times the plan is modified.\nCompare this value with materialized subscription item revision values."
          },
          "isTrialOnly": {
            "type": "boolean",
            "description": "Specifies if a plan is a trial that does not have recurring instructions.",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "attachments"
                  ]
                }
              }
            }
          }
        }
      },
      "SchedulingMethodDayAndMonthOfYear": {
        "type": "object",
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "day-and-month-of-year"
            ]
          },
          "day": {
            "type": "integer",
            "minimum": 1,
            "maximum": 31,
            "description": "Day of the month in which the event occurs.\nIf the month has less days, the last day of the month is selected."
          },
          "month": {
            "type": "integer",
            "minimum": 1,
            "maximum": 12,
            "description": "Month of the year in which the event occurs."
          },
          "time": {
            "$ref": "#/components/schemas/TimeIso8601Extended"
          }
        },
        "required": [
          "day",
          "month",
          "method"
        ]
      },
      "ServicePeriodAnchorInstruction": {
        "type": [
          "object",
          "null"
        ],
        "description": "Instruction for calculating the service period anchor.\n\nThe service period anchor is used, in conjunction with the subscription\nstart time, to calculate when the service period starts and ends.",
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "day-of-month": "#/components/schemas/SchedulingMethodDayOfMonth",
            "day-of-week": "#/components/schemas/SchedulingMethodDayOfWeek",
            "day-and-month-of-year": "#/components/schemas/SchedulingMethodDayAndMonthOfYear"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/SchedulingMethodDayOfMonth"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodDayOfWeek"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodDayAndMonthOfYear"
          }
        ]
      },
      "PlanTrial": {
        "type": [
          "object",
          "null"
        ],
        "required": [
          "price",
          "period"
        ],
        "properties": {
          "price": {
            "description": "Price of setting up a trial.\nIf your service charges a fee for a trial, specify it here.\nTo charge no trial fee, set this value to `0`.",
            "type": "number",
            "format": "double"
          },
          "period": {
            "type": "object",
            "description": "Period information.",
            "required": [
              "unit",
              "length"
            ],
            "properties": {
              "unit": {
                "description": "Unit of time.",
                "type": "string",
                "enum": [
                  "day",
                  "week",
                  "month",
                  "year"
                ]
              },
              "length": {
                "description": "Length of time.",
                "type": "integer",
                "minimum": 1
              }
            }
          }
        }
      },
      "InvoiceTimeShift": {
        "type": [
          "object",
          "null"
        ],
        "description": "Use invoice time shift to control the billing time.\n\nInvoice time shift adjusts the invoice issue and due date when billing must occur before the service period changes.\n\nUse invoice time shift in conjunction with `billingTiming` to:\n\n- Bill immediately when the service period starts.\n- Bill immediately after the service period ends.\n- Bill at an interval of time before the service period starts.\n- Bill at an interval of time after the service period starts.\n- Bill at an interval of time before the service period ends.\n- Bill at an interval of time after the service period ends.",
        "properties": {
          "issueTimeShift": {
            "type": "object",
            "description": "Calculation instruction of the billing time.\n\nThis is used in conjunction with the service period anchor to calculate\nthe time at which the invoice is issued. For more information, see\n[Service period anchor, billing timing, and invoice time shift](https://www.rebilly.com/docs/dev-docs/concepts/#service-period-anchor-and-billing-timing-and-invoice-time-shift).",
            "required": [
              "chronology",
              "duration",
              "unit"
            ],
            "properties": {
              "chronology": {
                "type": "string",
                "description": "Sequential order of the billing time relative to the start of the service period.",
                "enum": [
                  "before"
                ]
              },
              "duration": {
                "type": "integer",
                "description": "Amount of time by which to move the invoice issue time or date.",
                "minimum": 1
              },
              "unit": {
                "description": "Unit of time.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/TimeUnit"
                  },
                  {
                    "$ref": "#/components/schemas/TimePluralUnit"
                  }
                ]
              }
            }
          },
          "dueTimeShift": {
            "type": "object",
            "required": [
              "duration",
              "unit"
            ],
            "description": "Calculation instruction of the invoice due time.\n\nThis is used in conjunction with the billing anchor to calculate when\nan invoice is due for payment. For more information, see\n[Service period anchor, billing timing, and invoice time shift](https://www.rebilly.com/docs/dev-docs/concepts/#service-period-anchor-and-billing-timing-and-invoice-time-shift).\n\nThe sequential order of due time shift is always after the due date.",
            "default": {
              "duration": 1,
              "unit": "hour"
            },
            "properties": {
              "duration": {
                "type": "integer",
                "description": "Amount of time by which to move the invoice due time or date.",
                "minimum": 1
              },
              "unit": {
                "description": "Unit of time.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/TimeUnit"
                  },
                  {
                    "$ref": "#/components/schemas/TimePluralUnit"
                  }
                ]
              }
            }
          }
        }
      },
      "SubscriptionPlan": {
        "description": "Details of the subscription order plan.\nUse this plan for subscriptions or sales that reoccur over a period of time.",
        "type": "object",
        "required": [
          "id",
          "name",
          "currency",
          "productId",
          "pricing"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the plan.",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X",
            "readOnly": true
          },
          "name": {
            "description": "Name of the plan.\nThis name is displayed on invoices and receipts.",
            "type": "string",
            "maxLength": 255
          },
          "description": {
            "type": "string",
            "description": "Plain-text description of the plan.\nThis field accepts plain-text only.",
            "maxLength": 65535
          },
          "richDescription": {
            "type": "string",
            "description": "Rich-text description of the plan.\nThis field accepts rich text formatting, such as: bold, underline, italic, and hyperlinks.",
            "maxLength": 65535
          },
          "productId": {
            "type": "string",
            "description": "ID of the related product.",
            "maxLength": 50,
            "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
          },
          "productOptions": {
            "type": [
              "object",
              "null"
            ],
            "description": "Name-value pairs that specify the product options.",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "color": "red",
              "size": "xxl"
            }
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "currencySign": {
            "description": "Currency sign.",
            "readOnly": true,
            "type": "string"
          },
          "pricing": {
            "$ref": "#/components/schemas/PlanPriceFormula"
          },
          "setup": {
            "$ref": "#/components/schemas/PlanSetup"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "isActive": {
            "type": "boolean",
            "description": "Specifies if the plan is active.",
            "default": true
          },
          "revision": {
            "type": "integer",
            "readOnly": true,
            "description": "Number of times the plan is modified.\nCompare this value with materialized subscription item revision values."
          },
          "isTrialOnly": {
            "type": "boolean",
            "description": "Specifies if a plan is a trial that does not have recurring instructions.",
            "readOnly": true
          },
          "recurringInterval": {
            "description": "Service interval settings.\nFor a one-time sale, set this value to `null`.",
            "type": "object",
            "required": [
              "unit",
              "length"
            ],
            "properties": {
              "periodAnchorInstruction": {
                "$ref": "#/components/schemas/ServicePeriodAnchorInstruction"
              },
              "unit": {
                "description": "Unit of time.",
                "type": "string",
                "enum": [
                  "day",
                  "week",
                  "month",
                  "year"
                ]
              },
              "length": {
                "description": "Length of time.",
                "type": "integer",
                "minimum": 1
              },
              "limit": {
                "description": "Number of invoices the subscription order generates.\nIf this value is `1`, only the initial order creation is generated.\n\nExample: For a 1 year contract that is billed monthly,\nwhere the `periodUnit` is `month` and the `periodDuration` is `1`,\nset this field to `12`.",
                "type": [
                  "integer",
                  "null"
                ],
                "minimum": 1,
                "maximum": 65535
              },
              "billingTiming": {
                "type": "string",
                "default": "prepaid",
                "description": "Billing timing in relation to the service period.\nFor `prepaid` plans the customer pays when the service period starts,\nwhereas, for `postpaid` plans, the customer pays when the service period ends.",
                "enum": [
                  "prepaid",
                  "postpaid"
                ]
              }
            }
          },
          "trial": {
            "description": "Trial configuration setting.\nIf you do not want to offer a trial, set this value to `null`.",
            "$ref": "#/components/schemas/PlanTrial"
          },
          "meteredBilling": {
            "type": [
              "object",
              "null"
            ],
            "required": [
              "strategy"
            ],
            "description": "Use metered billing when an exact quantity is unknown.\nReport usage during a service period and charge customers afterwards.\nMetered billing plans must be postpaid.",
            "properties": {
              "strategy": {
                "type": "string",
                "enum": [
                  "sum",
                  "last"
                ],
                "x-enumDescriptions": {
                  "sum": "Total amount of reported invoice item quantity usage.",
                  "last": "Last reported invoice item quantity usage."
                }
              },
              "min": {
                "description": "Minimum quantity that is charged at the end of a service period regardless of reported usage.",
                "type": [
                  "number",
                  "null"
                ],
                "format": "float",
                "minimum": 0.01
              },
              "max": {
                "description": "Maximum quantity that is charged at the end of a service period regardless of reported usage.",
                "type": [
                  "number",
                  "null"
                ],
                "format": "float",
                "minimum": 0.01
              }
            }
          },
          "invoiceTimeShift": {
            "readOnly": true,
            "deprecated": true,
            "$ref": "#/components/schemas/InvoiceTimeShift"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "attachments"
                  ]
                }
              }
            }
          }
        }
      },
      "TrialOnlyPlan": {
        "description": "Details of the trial-only plan.\nUse this plan for limited-time product trials.\nTrials may have a reduced fee, or may be free.",
        "type": "object",
        "required": [
          "id",
          "name",
          "currency",
          "productId",
          "trial"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the plan.",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X",
            "readOnly": true
          },
          "name": {
            "description": "Name of the plan.\nThis name is displayed on invoices and receipts.",
            "type": "string",
            "maxLength": 255
          },
          "description": {
            "type": "string",
            "description": "Plain-text description of the plan.\nThis field accepts plain-text only.",
            "maxLength": 65535
          },
          "richDescription": {
            "type": "string",
            "description": "Rich-text description of the plan.\nThis field accepts rich text formatting, such as: bold, underline, italic, and hyperlinks.",
            "maxLength": 65535
          },
          "productId": {
            "type": "string",
            "description": "ID of the related product.",
            "maxLength": 50,
            "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
          },
          "productOptions": {
            "type": [
              "object",
              "null"
            ],
            "description": "Name-value pairs that specify the product options.",
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "color": "red",
              "size": "xxl"
            }
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "currencySign": {
            "description": "Currency sign.",
            "readOnly": true,
            "type": "string"
          },
          "setup": {
            "$ref": "#/components/schemas/PlanSetup"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "isActive": {
            "type": "boolean",
            "description": "Specifies if the plan is active.",
            "default": true
          },
          "revision": {
            "type": "integer",
            "readOnly": true,
            "description": "Number of times the plan is modified.\nCompare this value with materialized subscription item revision values."
          },
          "isTrialOnly": {
            "type": "boolean",
            "description": "Specifies if a plan is a trial that does not have recurring instructions.",
            "readOnly": true
          },
          "trial": {
            "description": "Trial configuration settings.",
            "$ref": "#/components/schemas/PlanTrial"
          },
          "invoiceTimeShift": {
            "readOnly": true,
            "deprecated": true,
            "description": "Use invoice time shift to adjust the invoice issue and due date when billing must occur before the service period changes.\nFor example, rent must be paid in advance,\nso the invoice must be in advance of the billing date.\nFor more information, see [Service period anchor, and billing timing, and invoice time shift](https://www.rebilly.com/docs/dev-docs/concepts/#service-period-anchor-and-billing-timing-and-invoice-time-shift).",
            "$ref": "#/components/schemas/InvoiceTimeShift"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "attachments"
                  ]
                }
              }
            }
          }
        }
      },
      "Plan": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/OneTimeSalePlan"
          },
          {
            "$ref": "#/components/schemas/SubscriptionPlan"
          },
          {
            "$ref": "#/components/schemas/TrialOnlyPlan"
          }
        ]
      },
      "Product": {
        "type": "object",
        "required": [
          "name"
        ],
        "description": "Products are the items that your business sells.\nProducts include digital goods, services, and physical goods.\nProducts appear on invoice line items.\nIf you set a tax category identifier, taxes are calculated at invoice generation.\nIf the product is shippable, shipping costs are calculated at invoice generation.\nPricing and variations are set within plans.\nFor more information, see [Plans](https://www.rebilly.com/docs/dev-docs/api/plans/).",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the product.",
            "readOnly": true,
            "maxLength": 50,
            "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
          },
          "name": {
            "description": "Name of the product.",
            "type": "string",
            "minLength": 3,
            "maxLength": 255,
            "example": "Premium membership"
          },
          "unitLabel": {
            "description": "Unit label, such as per `seat` or per `unit`.",
            "type": "string",
            "minLength": 1,
            "maxLength": 50,
            "example": "seat",
            "default": "unit"
          },
          "description": {
            "description": "Description of the product.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 512
          },
          "requiresShipping": {
            "description": "Specifies if the product requires shipping.\nIf this value is `true`, shipping calculations are applied.",
            "type": "boolean",
            "example": false,
            "default": false
          },
          "options": {
            "description": "Product options such as color, size, and so forth.\nProduct option values are defined in plans.\nFor more information, see [Plans](https://www.rebilly.com/docs/dev-docs/api/plans/).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "taxCategoryId": {
            "description": "Tax category of the product.\nFor a complete list of supported tax categories, see [TaxJar sales tax API reference](https://developers.taxjar.com/api/reference/#get-list-tax-categories).\nIf none of the tax categories from the list are applicable for your product, use the general tax category `00000`.",
            "type": [
              "string",
              "null"
            ],
            "example": "00000"
          },
          "accountingCode": {
            "description": "Accounting code of the product.",
            "type": [
              "string",
              "null"
            ],
            "example": "4010"
          },
          "recognition": {
            "type": [
              "object",
              "null"
            ],
            "properties": {
              "debitAccountId": {
                "description": "ID of the debit journal account.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "creditAccountId": {
                "description": "ID of the credit journal account.",
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "OriginalPlan": {
        "type": "object",
        "description": "Use an existing plan without changes for the current order.\n\nTo create a new plan, see [Create a plan](https://www.rebilly.com/catalog/all/plans/postplan).",
        "required": [
          "id"
        ],
        "properties": {
          "id": {
            "description": "ID of the plan.",
            "$ref": "#/components/schemas/ResourceId"
          }
        }
      },
      "FlexiblePlan": {
        "allOf": [
          {
            "type": "object",
            "required": [
              "id"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "ID of the plan.",
                "maxLength": 50,
                "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
              }
            }
          },
          {
            "oneOf": [
              {
                "$ref": "#/components/schemas/OneTimeSalePlan"
              },
              {
                "$ref": "#/components/schemas/SubscriptionPlan"
              },
              {
                "$ref": "#/components/schemas/TrialOnlyPlan"
              }
            ]
          }
        ]
      },
      "UsageLimits": {
        "type": "object",
        "description": "Specifies the soft and hard usage limit thresholds for an item with a metered billing plan.\nThis value is ignored when the plan is not metered.",
        "properties": {
          "softLimit": {
            "type": "object",
            "description": "Defines thresholds for notification purposes.\nFor example, to notify the customer that their usage is near the hard limit of their metered billing plan.\nThis notification informs the customer so that they can upgrade their plan before the hard limit is reached.\nWhen the reported usage reaches 75%, 90%, and 100% of the configured limit a specific event is triggered.\nTo notify the customer, a webhook and notification can be configured for this event.\nThis field is useful for accounting and customer success purposes.\nThe usage of metered billing plans can still be reported if the soft limit is reached.",
            "minProperties": 1,
            "maxProperties": 1,
            "properties": {
              "quantity": {
                "type": "integer",
                "description": "Usage limit quantity.",
                "minimum": 0
              },
              "amount": {
                "type": "number",
                "format": "double",
                "description": "Usage limit amount in the currency of the order.",
                "minimum": 0
              }
            }
          },
          "hardLimit": {
            "type": "object",
            "description": "Defines a limit where the customer can no longer use the service.\nHard limits are used in addition to soft limits.\nWhen a soft limit is reached,\na customer may receive a notification\nbut the service can still be provided up to the hard limit value so that the customer can upgrade their plan.\nWhen the reported usage reaches the configured limit,\na specific event is triggered.\nTo notify the customer in the merchant system,\nor block a service,\na webhook and notification can be configured for this event.\nWhen the total usage reaches the hard limit quantity,\nor amount values,\nmetered billing plan usages can no longer be reported.",
            "minProperties": 1,
            "maxProperties": 1,
            "properties": {
              "quantity": {
                "type": "integer",
                "description": "Usage limit quantity.",
                "minimum": 0
              },
              "amount": {
                "type": "number",
                "format": "double",
                "description": "Usage limit amount in the currency of the order.",
                "minimum": 0
              }
            }
          },
          "trialLimit": {
            "oneOf": [
              {
                "type": "number",
                "format": "double",
                "minimum": 0
              },
              {
                "type": "null"
              }
            ],
            "description": "Defines a usage cap during the trial period of a subscription.\nThis limit is enforced only while the subscription is in its trial phase.\nWhen the reported usage reaches the configured trial limit, an event called 'trial-usage-limit-reached' is triggered.\nTo notify the customer or restrict access to the service, a webhook and notification can be configured for this event.\nOnce the trial limit is reached, additional usage cannot be reported unless the trial ends.",
            "example": 20.725
          }
        }
      },
      "QuoteSubscriptionItem": {
        "type": "object",
        "required": [
          "plan"
        ],
        "properties": {
          "id": {
            "description": "ID of the quote item.",
            "readOnly": true,
            "type": "string",
            "example": "qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY"
          },
          "type": {
            "description": "Specifies the type of order item.",
            "type": "string",
            "x-basic": true,
            "enum": [
              "subscription"
            ]
          },
          "quantity": {
            "description": "Number of product units in the specified plan.\nQuantity for metered billing is always 0.",
            "type": "integer",
            "default": 1,
            "minimum": 0,
            "maximum": 1000000000
          },
          "plan": {
            "description": "Plan details.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/OriginalPlan"
              },
              {
                "$ref": "#/components/schemas/FlexiblePlan"
              }
            ]
          },
          "description": {
            "type": "string",
            "description": "Description of the quote item.",
            "example": "Charge per approved transaction with DCC",
            "default": "",
            "maxLength": 255
          },
          "priceDescription": {
            "type": "string",
            "description": "Price description of the quote item.\nThis value is only used for metered billing items.",
            "example": "50% of the markup for approved transactions",
            "default": "",
            "maxLength": 255
          },
          "usageLimits": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageLimits"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          }
        }
      },
      "QuoteOneTimeSaleItem": {
        "type": "object",
        "required": [
          "plan"
        ],
        "properties": {
          "id": {
            "description": "ID of the quote item.",
            "readOnly": true,
            "type": "string",
            "example": "qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY"
          },
          "type": {
            "description": "Specifies the type of order item.",
            "type": "string",
            "x-basic": true,
            "enum": [
              "one-time-sale"
            ]
          },
          "quantity": {
            "description": "Number of product units in the specified plan.",
            "type": "integer",
            "default": 1,
            "minimum": 0,
            "maximum": 1000000000
          },
          "plan": {
            "description": "Plan details.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/OriginalPlan"
              },
              {
                "$ref": "#/components/schemas/FlexiblePlan"
              }
            ]
          },
          "description": {
            "type": "string",
            "description": "Description of the quote item.",
            "example": "Charge per approved transaction with DCC",
            "default": "",
            "maxLength": 255
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          }
        }
      },
      "QuoteItem": {
        "type": "object",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "subscription": "#/components/schemas/QuoteSubscriptionItem",
            "one-time-sale": "#/components/schemas/QuoteOneTimeSaleItem"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/QuoteSubscriptionItem"
          },
          {
            "$ref": "#/components/schemas/QuoteOneTimeSaleItem"
          }
        ]
      },
      "CreationQuote": {
        "type": "object",
        "title": "CreationQuote",
        "required": [
          "websiteId",
          "customerId",
          "order",
          "type"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "description": "ID of the quote.",
            "type": "string",
            "maxLength": 50,
            "example": "qt_01HXBZMEGPETPHJZH6V4RHBMA8"
          },
          "type": {
            "description": "Type of the quote.\nWhen a quote is accepted, a new order is created.",
            "type": "string",
            "enum": [
              "creation"
            ]
          },
          "acceptanceConditions": {
            "type": "array",
            "writeOnly": true,
            "description": "Conditions that must be met for the quote to be automatically accepted.",
            "items": {
              "type": "string",
              "enum": [
                "customer",
                "payment"
              ],
              "x-enumDescriptions": {
                "customer": "Quote can be accepted by customer.",
                "payment": "Related invoice must be paid in full."
              }
            },
            "example": [
              "payment"
            ],
            "default": [
              "customer"
            ]
          },
          "acceptanceFulfillment": {
            "type": "array",
            "readOnly": true,
            "description": "List of `acceptanceConditions` with fulfillment status.",
            "items": {
              "type": "object",
              "properties": {
                "condition": {
                  "type": "string",
                  "enum": [
                    "customer",
                    "payment",
                    "organization"
                  ]
                },
                "isFulfilled": {
                  "type": "boolean"
                }
              }
            }
          },
          "invoiceId": {
            "type": "string",
            "description": "ID of the payment invoice.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "status": {
            "description": "Status of the quote.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "draft",
              "issued",
              "accepted",
              "rejected",
              "canceled",
              "expired"
            ],
            "x-enumDescriptions": {
              "draft": "Quote can be edited. This quote cannot be sent to a customer.",
              "issued": "Quote cannot be edited. This quote can be sent to a customer.",
              "accepted": "Customer accepted the quote and created an order.",
              "rejected": "Customer rejected the quote.",
              "canceled": "Organization or customer canceled the quote.",
              "expired": "Expired before customer or organization interaction."
            }
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "order": {
            "type": "object",
            "description": "Properties of the related order.",
            "required": [
              "items"
            ],
            "properties": {
              "id": {
                "description": "ID of the related order.",
                "readOnly": true,
                "type": [
                  "string",
                  "null"
                ],
                "maxLength": 50,
                "example": "ord_01HVKA5975PJBSQ1SX72G3MSZC"
              },
              "items": {
                "type": "array",
                "description": "Items included in the quote.",
                "minItems": 1,
                "items": {
                  "$ref": "#/components/schemas/QuoteItem"
                }
              },
              "autopay": {
                "type": "boolean",
                "default": false,
                "description": "Specifies if payment attempts for the related order are made automatically.\nIf autopay is enabled, the payment is retrieved from the customer on the renewal date using the payment instrument that is set at `paymentInstrumentId`,\nor the default payment instrument on the order."
              },
              "shipping": {
                "$ref": "#/components/schemas/Shipping"
              },
              "deliveryAddress": {
                "description": "Delivery address of the order.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ContactObject"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "billingAddress": {
                "description": "Billing address of the order.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ContactObject"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "startTime": {
                "description": "Date and time when the created order starts.\nIf this value is `null`, the quote acceptance time is used.",
                "type": [
                  "string",
                  "null"
                ],
                "x-sortable": true,
                "x-basic": true,
                "format": "date-time"
              },
              "isLegacy": {
                "description": "Specifies if the order is a legacy order.",
                "type": "boolean",
                "default": true,
                "example": true
              }
            }
          },
          "invoicePreview": {
            "type": "object",
            "description": "Preview of the quote invoice.",
            "readOnly": true,
            "properties": {
              "currency": {
                "description": "Currency of the invoice.",
                "$ref": "#/components/schemas/CurrencyCode"
              },
              "initialAmounts": {
                "type": "object",
                "description": "Total amounts of the initial invoice.",
                "properties": {
                  "amount": {
                    "description": "Amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "subtotalAmount": {
                    "description": "Subtotal amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "discountAmount": {
                    "description": "Discount amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "shippingAmount": {
                    "description": "Shipping amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "taxAmount": {
                    "description": "Tax amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  }
                }
              },
              "recurringAmounts": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Total amounts of the recurring invoice.\nThis includes recurring items only.\nIf the quote does not have recurring items, the value of this field is `null`.",
                "properties": {
                  "amount": {
                    "description": "Amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "subtotalAmount": {
                    "description": "Subtotal amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "discountAmount": {
                    "description": "Discount amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "shippingAmount": {
                    "description": "Shipping amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "taxAmount": {
                    "description": "Tax amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  }
                }
              },
              "items": {
                "type": "array",
                "description": "Invoice items.",
                "items": {
                  "type": "object",
                  "properties": {
                    "quoteItemId": {
                      "description": "ID of the related quote item.",
                      "type": "string",
                      "example": "qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY"
                    },
                    "type": {
                      "type": "string",
                      "description": "Type of the invoice item.",
                      "x-basic": true,
                      "enum": [
                        "debit",
                        "credit"
                      ]
                    },
                    "name": {
                      "description": "Name of the invoice item.",
                      "type": "string",
                      "maxLength": 1000
                    },
                    "description": {
                      "description": "Description of the invoice item.",
                      "type": "string",
                      "example": "Charge per approved transaction with DCC",
                      "maxLength": 255
                    },
                    "priceDescription": {
                      "type": "string",
                      "description": "Price description of the invoice item.",
                      "example": "50% of the markup for approved transactions",
                      "maxLength": 255
                    },
                    "unitPrice": {
                      "description": "Unit price of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "quantity": {
                      "description": "Quantity of the invoice item.",
                      "type": "integer"
                    },
                    "period": {
                      "description": "Date interval of the invoice item.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "setupUnitPrice": {
                      "description": "Unit price of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "trialUnitPrice": {
                      "description": "Unit price of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "trialPeriod": {
                      "description": "Date interval of the invoice item trial.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "taxAmount": {
                      "description": "Tax amount of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "setupTaxAmount": {
                      "description": "Tax amount of the setup that is applied to the invoice.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "trialTaxAmount": {
                      "description": "Tax amount of the trial that is applied to the invoice.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    }
                  }
                }
              }
            }
          },
          "paymentTerms": {
            "description": "Payment terms for the customer which are displayed on the quote.",
            "type": "string"
          },
          "expirationTime": {
            "description": "Date and time when the quote expires.\nThe default expiration time is one month from the time the quote is issued.\nIn a `draft` state, this field may be `null`.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "issuedTime": {
            "description": "Date and time when the quote is issued.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "acceptedTime": {
            "description": "Date and time when the quote is accepted.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "rejectedTime": {
            "description": "Date and time when the quote is rejected.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "canceledTime": {
            "description": "Date and time when the quote is canceled.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "redirectUrl": {
            "description": "URL to redirect the customer to when a quote is rejected.\nThe default value is the website URL.",
            "type": "string",
            "maxLength": 2083,
            "format": "uri"
          },
          "signature": {
            "type": "object",
            "description": "Written signature and printed organization name.",
            "properties": {
              "showWrittenSignatureLines": {
                "type": "boolean",
                "default": false,
                "description": "Specifies whether to show written signature lines."
              },
              "organizationPrintedName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Printed name of the organization.",
                "default": null
              }
            }
          },
          "tax": {
            "$ref": "#/components/schemas/Taxes"
          },
          "couponIds": {
            "type": [
              "array",
              "null"
            ],
            "description": "List of coupons to redeem on the customer and apply to the related invoice.\n\nFor more information, see [Coupons](https://www.rebilly.com/docs/settings/coupons-and-discounts/).",
            "items": {
              "type": "string",
              "description": "Coupon ID."
            }
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.\nIf the quote is issued, a customer can be redirected to the `invoicePaymentFormUrl` value\nto pay the related invoice using one of the methods which are available to the customer.",
                  "type": "string",
                  "enum": [
                    "self",
                    "quoteAcceptanceFormUrl",
                    "invoicePaymentFormUrl"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "website": {
                "type": "object"
              },
              "order": {
                "type": "object"
              },
              "invoice": {
                "type": "object"
              }
            }
          }
        }
      },
      "ChangeQuote": {
        "type": "object",
        "title": "ChangeQuote",
        "required": [
          "websiteId",
          "customerId",
          "order",
          "type"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "description": "ID of the quote.",
            "type": "string",
            "maxLength": 50,
            "example": "qt_01HXBZMEGPETPHJZH6V4RHBMA8"
          },
          "type": {
            "description": "Type of the quote.\nWhen a quote is accepted, quote items and settings are applied to the related order.",
            "type": "string",
            "enum": [
              "change"
            ]
          },
          "acceptanceConditions": {
            "type": "array",
            "writeOnly": true,
            "description": "Conditions that must be met for the quote to be automatically accepted.",
            "items": {
              "type": "string",
              "enum": [
                "customer",
                "payment"
              ],
              "x-enumDescriptions": {
                "customer": "Quote can be accepted by customer.",
                "payment": "Related invoice must be paid in full."
              }
            },
            "example": [
              "payment"
            ],
            "default": [
              "customer"
            ]
          },
          "acceptanceFulfillment": {
            "type": "array",
            "readOnly": true,
            "description": "List of `acceptanceConditions` with fulfillment status.",
            "items": {
              "type": "object",
              "properties": {
                "condition": {
                  "type": "string",
                  "enum": [
                    "customer",
                    "payment",
                    "organization"
                  ]
                },
                "isFulfilled": {
                  "type": "boolean"
                }
              }
            }
          },
          "invoiceId": {
            "type": "string",
            "description": "ID of the payment invoice.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "status": {
            "description": "Status of the quote.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "draft",
              "issued",
              "accepted",
              "rejected",
              "canceled",
              "expired"
            ],
            "x-enumDescriptions": {
              "draft": "Quote can be edited. This quote cannot be sent to a customer.",
              "issued": "Quote cannot be edited. This quote can be sent to a customer.",
              "accepted": "Customer accepted the quote. Quote items and settings are applied to the order.",
              "rejected": "Customer rejected the quote.",
              "canceled": "Organization or customer canceled the quote.",
              "expired": "Expired before customer or organization interaction."
            }
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "order": {
            "type": "object",
            "description": "Properties of the related order.",
            "required": [
              "id",
              "items"
            ],
            "properties": {
              "id": {
                "description": "ID of the related order.",
                "type": "string",
                "maxLength": 50,
                "example": "ord_01HVKA5975PJBSQ1SX72G3MSZC"
              },
              "items": {
                "type": "array",
                "description": "Items included in the quote.",
                "minItems": 1,
                "items": {
                  "$ref": "#/components/schemas/QuoteItem"
                }
              },
              "renewalPolicy": {
                "description": "Specifies if the order retains its current `renewalTime` or resets it to a newly calculated `renewalTime`.",
                "type": "string",
                "default": "retain",
                "enum": [
                  "reset",
                  "retain"
                ]
              },
              "prorated": {
                "description": "Specifies whether to give a pro rata credit for the amount of time remaining between the `effectiveTime` and the end of the current period.\nIn addition, if the `renewalTime` is retained, by setting the `renewalPolicy` to `retain`,\na pro rata debit occurs for the amount between the `effectiveTime` and the `renewalTime` as a percentage of the normal period length.",
                "type": "boolean"
              },
              "effectiveTime": {
                "description": "Date from which the renewal time for `reset` operations and proration calculations are made.\nIf this field is omitted, this value defaults to the time of quote acceptance.",
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "keepTrial": {
                "description": "Specifies if the order must retain its active trial.\nThis field is only applicable if `renewalPolicy` is set to `retain`.",
                "type": "boolean",
                "default": false
              },
              "interimOnly": {
                "type": "boolean",
                "default": true,
                "description": "Specifies if the quotation invoice must include interim items only.\nIf this value is set to `false`, all upcoming items are included."
              },
              "usageSettings": {
                "type": "array",
                "default": [],
                "description": "Usage settings for items with metered billing.",
                "items": {
                  "type": "object",
                  "required": [
                    "productId",
                    "policy"
                  ],
                  "properties": {
                    "productId": {
                      "type": "string",
                      "description": "ID of the product to use to transfer usage.\nIf the `policy` value is `transfer`,\nand an existing item and a new item are of the same product,\nusage can be transferred to the new item.\nIf a new item of the same product does not exist,\nor does not have a metered billing plan,\nthis transfer is ignored.",
                      "example": "prod_0YV7DENSVGDBW9S71XZNNYYQ0X"
                    },
                    "policy": {
                      "type": "string",
                      "enum": [
                        "reset",
                        "transfer"
                      ],
                      "description": "Policy for removed items that have a metered billing plan.",
                      "x-enumDescriptions": {
                        "reset": "Delete existing usages.",
                        "transfer": "Transfer usages from removed item to new item of the same product."
                      }
                    }
                  }
                }
              },
              "autopay": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Specifies if payment attempts for the related order are made automatically.\nIf autopay is enabled, the payment is retrieved from the customer on the renewal date using the payment instrument that is set at `paymentInstrumentId`,\nor the default payment instrument on the order.\nIf this value is `null`, the related order autopay is not affected."
              },
              "shipping": {
                "$ref": "#/components/schemas/Shipping"
              }
            }
          },
          "invoicePreview": {
            "type": "object",
            "description": "Preview of the quote invoice.",
            "readOnly": true,
            "properties": {
              "currency": {
                "description": "Currency of the invoice.",
                "$ref": "#/components/schemas/CurrencyCode"
              },
              "initialAmounts": {
                "type": "object",
                "description": "Total amounts of the initial invoice.",
                "properties": {
                  "amount": {
                    "description": "Amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "subtotalAmount": {
                    "description": "Subtotal amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "discountAmount": {
                    "description": "Discount amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "shippingAmount": {
                    "description": "Shipping amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "taxAmount": {
                    "description": "Tax amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  }
                }
              },
              "recurringAmounts": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Total amounts of the recurring invoice.\nThis includes recurring items only.\nIf the quote does not have recurring items, the value of this field is `null`.",
                "properties": {
                  "amount": {
                    "description": "Amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "subtotalAmount": {
                    "description": "Subtotal amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "discountAmount": {
                    "description": "Discount amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "shippingAmount": {
                    "description": "Shipping amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "taxAmount": {
                    "description": "Tax amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  }
                }
              },
              "items": {
                "type": "array",
                "description": "Invoice items.",
                "items": {
                  "type": "object",
                  "properties": {
                    "quoteItemId": {
                      "description": "ID of the related quote item.",
                      "type": "string",
                      "example": "qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY"
                    },
                    "type": {
                      "type": "string",
                      "description": "Type of the invoice item.",
                      "x-basic": true,
                      "enum": [
                        "debit",
                        "credit"
                      ]
                    },
                    "name": {
                      "description": "Name of the invoice item.",
                      "type": "string",
                      "maxLength": 1000
                    },
                    "description": {
                      "description": "Description of the invoice item.",
                      "type": "string",
                      "example": "Charge per approved transaction with DCC",
                      "maxLength": 255
                    },
                    "priceDescription": {
                      "type": "string",
                      "description": "Price description of the invoice item.",
                      "example": "50% of the markup for approved transactions",
                      "maxLength": 255
                    },
                    "unitPrice": {
                      "description": "Unit price of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "quantity": {
                      "description": "Quantity of the invoice item.",
                      "type": "integer"
                    },
                    "period": {
                      "description": "Date interval of the invoice item.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "setupUnitPrice": {
                      "description": "Unit price of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "trialUnitPrice": {
                      "description": "Unit price of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "trialPeriod": {
                      "description": "Date interval of the invoice item trial.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "taxAmount": {
                      "description": "Tax amount of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "setupTaxAmount": {
                      "description": "Tax amount of the setup that is applied to the invoice.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "trialTaxAmount": {
                      "description": "Tax amount of the trial that is applied to the invoice.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    }
                  }
                }
              }
            }
          },
          "paymentTerms": {
            "description": "Payment terms for the customer which are displayed on the quote.",
            "type": "string"
          },
          "expirationTime": {
            "description": "Date and time when the quote expires.\nThe default expiration time is one month from the time the quote is issued.\nIn a `draft` state, this field may be `null`.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "issuedTime": {
            "description": "Date and time when the quote is issued.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "acceptedTime": {
            "description": "Date and time when the quote is accepted.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "rejectedTime": {
            "description": "Date and time when the quote is rejected.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "canceledTime": {
            "description": "Date and time when the quote is canceled.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "redirectUrl": {
            "description": "URL to redirect the customer to when a quote is rejected.\nThe default value is the website URL.",
            "type": "string",
            "maxLength": 2083,
            "format": "uri"
          },
          "signature": {
            "type": "object",
            "description": "Written signature and printed organization name.",
            "properties": {
              "showWrittenSignatureLines": {
                "type": "boolean",
                "default": false,
                "description": "Specifies whether to show written signature lines."
              },
              "organizationPrintedName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Printed name of the organization.",
                "default": null
              }
            }
          },
          "tax": {
            "$ref": "#/components/schemas/Taxes"
          },
          "couponIds": {
            "type": [
              "array",
              "null"
            ],
            "description": "List of coupons to redeem on the customer and apply to the related invoice.\n\nFor more information, see [Coupons](https://www.rebilly.com/docs/settings/coupons-and-discounts/).",
            "items": {
              "type": "string",
              "description": "Coupon ID."
            }
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.\nIf the quote is issued, a customer can be redirected to the `invoicePaymentFormUrl` value\nto pay the related invoice using one of the methods which are available to the customer.",
                  "type": "string",
                  "enum": [
                    "self",
                    "quoteAcceptanceFormUrl",
                    "invoicePaymentFormUrl"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "website": {
                "type": "object"
              },
              "order": {
                "type": "object"
              },
              "invoice": {
                "type": "object"
              }
            }
          }
        }
      },
      "ReactivationQuote": {
        "type": "object",
        "title": "ReactivationQuote",
        "required": [
          "websiteId",
          "customerId",
          "order",
          "type"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "description": "ID of the quote.",
            "type": "string",
            "maxLength": 50,
            "example": "qt_01HXBZMEGPETPHJZH6V4RHBMA8"
          },
          "type": {
            "description": "Type of the quote.\nWhen a quote is accepted, quote items and settings are applied to the order and the order is reactivated.",
            "type": "string",
            "enum": [
              "reactivation"
            ]
          },
          "acceptanceConditions": {
            "type": "array",
            "writeOnly": true,
            "description": "Conditions that must be met for the quote to be automatically accepted.",
            "items": {
              "type": "string",
              "enum": [
                "customer",
                "payment"
              ],
              "x-enumDescriptions": {
                "customer": "Quote can be accepted by customer.",
                "payment": "Related invoice must be paid in full."
              }
            },
            "example": [
              "payment"
            ],
            "default": [
              "customer"
            ]
          },
          "acceptanceFulfillment": {
            "type": "array",
            "readOnly": true,
            "description": "List of `acceptanceConditions` with fulfillment status.",
            "items": {
              "type": "object",
              "properties": {
                "condition": {
                  "type": "string",
                  "enum": [
                    "customer",
                    "payment",
                    "organization"
                  ]
                },
                "isFulfilled": {
                  "type": "boolean"
                }
              }
            }
          },
          "invoiceId": {
            "type": "string",
            "description": "ID of the payment invoice.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "status": {
            "description": "Status of the quote.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "draft",
              "issued",
              "accepted",
              "rejected",
              "canceled",
              "expired"
            ],
            "x-enumDescriptions": {
              "draft": "Quote can be edited. This quote cannot be sent to a customer.",
              "issued": "Quote cannot be edited. This quote can be sent to a customer.",
              "accepted": "Customer accepted the quote. The related order is reactivated and quote items and settings are applied to the order.",
              "rejected": "Customer rejected the quote.",
              "canceled": "Organization or customer canceled the quote.",
              "expired": "Expired before customer or organization interaction."
            }
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "order": {
            "type": "object",
            "description": "Properties of the related order.",
            "required": [
              "id",
              "items"
            ],
            "properties": {
              "id": {
                "description": "ID of the related order.",
                "type": "string",
                "maxLength": 50,
                "example": "ord_01HVKA5975PJBSQ1SX72G3MSZC"
              },
              "items": {
                "type": "array",
                "description": "Items included in the quote.",
                "minItems": 1,
                "items": {
                  "$ref": "#/components/schemas/QuoteItem"
                }
              },
              "effectiveTime": {
                "description": "Date and time when the service period starts,\nunless the order is canceled but still active.\nIf the order is still active,\nthe order continues for the current service period.\n\nIf this field is omitted, this value defaults to the current time.",
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "renewalTime": {
                "description": "Date and time of the next order renewal.\nIf this field is omitted, this value is computed from the `effectiveTime` field.\n\nIf the order is canceled but still active,\nit is ignored and the next renewal occurs as scheduled.",
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              },
              "paymentInstrumentId": {
                "description": "ID of the payment instrument.\nIf this field is omitted, the order payment instrument remains unchanged.",
                "type": [
                  "string",
                  "null"
                ],
                "maxLength": 50,
                "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
              },
              "autopay": {
                "type": [
                  "boolean",
                  "null"
                ],
                "description": "Specifies if payment attempts for the related order are made automatically.\nIf autopay is enabled, the payment is retrieved from the customer on the renewal date using the payment instrument that is set at `paymentInstrumentId`,\nor the default payment instrument on the order.\nIf this value is `null`, the related order autopay is not affected."
              },
              "shipping": {
                "$ref": "#/components/schemas/Shipping"
              }
            }
          },
          "invoicePreview": {
            "type": "object",
            "description": "Preview of the quote invoice.",
            "readOnly": true,
            "properties": {
              "currency": {
                "description": "Currency of the invoice.",
                "$ref": "#/components/schemas/CurrencyCode"
              },
              "initialAmounts": {
                "type": "object",
                "description": "Total amounts of the initial invoice.",
                "properties": {
                  "amount": {
                    "description": "Amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "subtotalAmount": {
                    "description": "Subtotal amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "discountAmount": {
                    "description": "Discount amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "shippingAmount": {
                    "description": "Shipping amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "taxAmount": {
                    "description": "Tax amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  }
                }
              },
              "recurringAmounts": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Total amounts of the recurring invoice.\nThis includes recurring items only.\nIf the quote does not have recurring items, the value of this field is `null`.",
                "properties": {
                  "amount": {
                    "description": "Amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "subtotalAmount": {
                    "description": "Subtotal amount of the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "discountAmount": {
                    "description": "Discount amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "shippingAmount": {
                    "description": "Shipping amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  },
                  "taxAmount": {
                    "description": "Tax amount that is applied to the invoice.",
                    "type": "number",
                    "x-type": "Money",
                    "format": "double"
                  }
                }
              },
              "items": {
                "type": "array",
                "description": "Invoice items.",
                "items": {
                  "type": "object",
                  "properties": {
                    "quoteItemId": {
                      "description": "ID of the related quote item.",
                      "type": "string",
                      "example": "qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY"
                    },
                    "type": {
                      "type": "string",
                      "description": "Type of the invoice item.",
                      "x-basic": true,
                      "enum": [
                        "debit",
                        "credit"
                      ]
                    },
                    "name": {
                      "description": "Name of the invoice item.",
                      "type": "string",
                      "maxLength": 1000
                    },
                    "description": {
                      "description": "Description of the invoice item.",
                      "type": "string",
                      "example": "Charge per approved transaction with DCC",
                      "maxLength": 255
                    },
                    "priceDescription": {
                      "type": "string",
                      "description": "Price description of the invoice item.",
                      "example": "50% of the markup for approved transactions",
                      "maxLength": 255
                    },
                    "unitPrice": {
                      "description": "Unit price of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "quantity": {
                      "description": "Quantity of the invoice item.",
                      "type": "integer"
                    },
                    "period": {
                      "description": "Date interval of the invoice item.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "setupUnitPrice": {
                      "description": "Unit price of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "trialUnitPrice": {
                      "description": "Unit price of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "trialPeriod": {
                      "description": "Date interval of the invoice item trial.",
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "taxAmount": {
                      "description": "Tax amount of the invoice item.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "setupTaxAmount": {
                      "description": "Tax amount of the setup that is applied to the invoice.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    },
                    "trialTaxAmount": {
                      "description": "Tax amount of the trial that is applied to the invoice.",
                      "type": [
                        "number",
                        "null"
                      ],
                      "format": "double"
                    }
                  }
                }
              }
            }
          },
          "paymentTerms": {
            "description": "Payment terms for the customer which are displayed on the quote.",
            "type": "string"
          },
          "expirationTime": {
            "description": "Date and time when the quote expires.\nThe default expiration time is one month from the time the quote is issued.\nIn a `draft` state, this field may be `null`.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "issuedTime": {
            "description": "Date and time when the quote is issued.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "acceptedTime": {
            "description": "Date and time when the quote is accepted.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "rejectedTime": {
            "description": "Date and time when the quote is rejected.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "canceledTime": {
            "description": "Date and time when the quote is canceled.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "format": "date-time"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "redirectUrl": {
            "description": "URL to redirect the customer to when a quote is rejected.\nThe default value is the website URL.",
            "type": "string",
            "maxLength": 2083,
            "format": "uri"
          },
          "signature": {
            "type": "object",
            "description": "Written signature and printed organization name.",
            "properties": {
              "showWrittenSignatureLines": {
                "type": "boolean",
                "default": false,
                "description": "Specifies whether to show written signature lines."
              },
              "organizationPrintedName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Printed name of the organization.",
                "default": null
              }
            }
          },
          "tax": {
            "$ref": "#/components/schemas/Taxes"
          },
          "couponIds": {
            "type": [
              "array",
              "null"
            ],
            "description": "List of coupons to redeem on the customer and apply to the related invoice.\n\nFor more information, see [Coupons](https://www.rebilly.com/docs/settings/coupons-and-discounts/).",
            "items": {
              "type": "string",
              "description": "Coupon ID."
            }
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.\nIf the quote is issued, a customer can be redirected to the `invoicePaymentFormUrl` value\nto pay the related invoice using one of the methods which are available to the customer.",
                  "type": "string",
                  "enum": [
                    "self",
                    "quoteAcceptanceFormUrl",
                    "invoicePaymentFormUrl"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "website": {
                "type": "object"
              },
              "order": {
                "type": "object"
              },
              "invoice": {
                "type": "object"
              }
            }
          }
        }
      },
      "Quote": {
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "creation": "#/components/schemas/CreationQuote",
            "change": "#/components/schemas/ChangeQuote",
            "reactivation": "#/components/schemas/ReactivationQuote"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/CreationQuote"
          },
          {
            "$ref": "#/components/schemas/ChangeQuote"
          },
          {
            "$ref": "#/components/schemas/ReactivationQuote"
          }
        ]
      },
      "PatchQuote": {
        "type": "object",
        "description": "Patch quote object.",
        "properties": {
          "tax": {
            "$ref": "#/components/schemas/Taxes"
          }
        }
      },
      "QuoteTimeline": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the timeline message.",
            "readOnly": true,
            "maxLength": 50,
            "example": "tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC"
          },
          "type": {
            "description": "Type of timeline message.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "quote-created",
              "quote-issued",
              "quote-accepted",
              "quote-rejected",
              "quote-canceled",
              "quote-recalled",
              "quote-updated",
              "quote-expired",
              "quote-order-attached"
            ]
          },
          "triggeredBy": {
            "description": "Specifies who, or what, triggered the timeline message.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "rebilly",
              "app",
              "direct-api"
            ]
          },
          "message": {
            "description": "Contents of the timeline message.",
            "type": "string"
          },
          "extraData": {
            "$ref": "#/components/schemas/TimelineExtraData"
          },
          "occurredTime": {
            "description": "Date and time when the timeline message occurred.",
            "readOnly": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "ReadyToPayAmount": {
        "type": "object",
        "title": "With amount",
        "required": [
          "websiteId",
          "currency",
          "amount",
          "riskMetadata"
        ],
        "properties": {
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "amount": {
            "description": "Amount to pay.",
            "type": "number",
            "format": "double"
          },
          "billingAddress": {
            "description": "Billing address.",
            "writeOnly": true,
            "$ref": "#/components/schemas/ContactObject"
          },
          "riskMetadata": {
            "$ref": "#/components/schemas/RiskMetadata"
          }
        }
      },
      "ReadyToPayItems": {
        "type": "object",
        "title": "With items",
        "required": [
          "websiteId",
          "items",
          "riskMetadata"
        ],
        "properties": {
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "planId",
                "quantity"
              ],
              "properties": {
                "planId": {
                  "type": "string",
                  "description": "ID of the plan.",
                  "maxLength": 50,
                  "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                },
                "quantity": {
                  "description": "Number of product units in the specified plan.",
                  "type": "integer"
                }
              }
            }
          },
          "billingAddress": {
            "description": "Billing address.",
            "writeOnly": true,
            "$ref": "#/components/schemas/ContactObject"
          },
          "riskMetadata": {
            "$ref": "#/components/schemas/RiskMetadata"
          }
        }
      },
      "ReadyToPay": {
        "type": "object",
        "oneOf": [
          {
            "$ref": "#/components/schemas/ReadyToPayAmount"
          },
          {
            "$ref": "#/components/schemas/ReadyToPayItems"
          }
        ]
      },
      "PostReadyToPay": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "customerId": {
                "$ref": "#/components/schemas/CustomerId"
              }
            }
          },
          {
            "$ref": "#/components/schemas/ReadyToPay"
          }
        ]
      },
      "Country": {
        "description": "ISO 3166 alpha-2 country code.\nFor examples, see [ISO.org](https://www.iso.org/obp/ui/#search/code/).",
        "type": "string",
        "pattern": "^[A-Z]{2}$",
        "example": "US"
      },
      "ApplePayFeature": {
        "type": "object",
        "title": "Apple Pay Digital Wallet",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the feature.",
            "enum": [
              "Apple Pay"
            ]
          },
          "displayName": {
            "description": "String of 64 or fewer UTF-8 characters containing the canonical name for your store,\nthat is suitable for display.\nDo not localize the name.",
            "type": "string",
            "example": "Test Merchant"
          },
          "country": {
            "$ref": "#/components/schemas/Country"
          }
        }
      },
      "GooglePayFeature": {
        "type": "object",
        "title": "Google Pay Digital Wallet",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the feature.",
            "enum": [
              "Google Pay"
            ]
          },
          "merchantName": {
            "description": "Merchant name in Google Pay.",
            "type": "string",
            "example": "Test Merchant"
          },
          "merchantOrigin": {
            "description": "Merchant origin in Google Pay.\nThe fully qualified domain name.",
            "type": "string",
            "example": "www.example.com"
          },
          "country": {
            "$ref": "#/components/schemas/Country"
          }
        }
      },
      "SamsungPayFeature": {
        "type": "object",
        "title": "Samsung Pay Digital Wallet",
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the feature.",
            "enum": [
              "Samsung Pay"
            ]
          },
          "merchantName": {
            "description": "Merchant name in Samsung Pay.",
            "type": "string",
            "example": "Test Merchant"
          }
        }
      },
      "PaymentCardFeature": {
        "type": "object",
        "discriminator": {
          "propertyName": "name",
          "mapping": {
            "Apple Pay": "#/components/schemas/ApplePayFeature",
            "Google Pay": "#/components/schemas/GooglePayFeature",
            "Samsung Pay": "#/components/schemas/SamsungPayFeature"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/ApplePayFeature"
          },
          {
            "$ref": "#/components/schemas/GooglePayFeature"
          },
          {
            "$ref": "#/components/schemas/SamsungPayFeature"
          }
        ]
      },
      "ReadyToPayMethodFilters": {
        "type": "array",
        "description": "For the method to be applicable, one or more of the following filters must match.\nIf no filters are sent, no restrictions are applied.\nFor more information, see [Using filters](https://www.rebilly.com/docs/dev-docs/search-filters).",
        "items": {
          "type": "string"
        }
      },
      "ReadyToPayPaymentCardMethod": {
        "type": "object",
        "title": "Payment card",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "description": "Payment method.",
            "enum": [
              "payment-card"
            ]
          },
          "feature": {
            "description": "Specific feature of this method.\nFor example, a digital wallet.\nIf the method does not have any features, this value is null.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/PaymentCardFeature"
              },
              {
                "type": "null"
              }
            ]
          },
          "brands": {
            "type": "array",
            "description": "List of supported brands.",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/PaymentCardBrand"
            }
          },
          "filters": {
            "$ref": "#/components/schemas/ReadyToPayMethodFilters"
          }
        }
      },
      "AchPlaidFeature": {
        "type": "object",
        "title": "Plaid",
        "required": [
          "name",
          "linkToken",
          "expirationTime"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the feature.",
            "enum": [
              "Plaid"
            ]
          },
          "linkToken": {
            "type": "string",
            "description": "Plaid `linkToken` for frontend integrations."
          },
          "expirationTime": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the `linkToken` expires."
          }
        }
      },
      "ReadyToPayAchMethodFeature": {
        "type": "object",
        "discriminator": {
          "propertyName": "name",
          "mapping": {
            "Plaid": "#/components/schemas/AchPlaidFeature"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/AchPlaidFeature"
          }
        ]
      },
      "ReadyToPayAchMethod": {
        "type": "object",
        "title": "ACH",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "description": "Payment method.",
            "enum": [
              "ach"
            ]
          },
          "feature": {
            "description": "Specific feature of this method.\nFor example, a digital wallet or a processor.\nIf the method does not have any features, this value is null.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ReadyToPayAchMethodFeature"
              },
              {
                "type": "null"
              }
            ]
          },
          "filters": {
            "$ref": "#/components/schemas/ReadyToPayMethodFilters"
          }
        }
      },
      "ReadyToPayGenericMethod": {
        "type": "object",
        "title": "Generic",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "$ref": "#/components/schemas/AlternativePaymentMethods"
          },
          "filters": {
            "$ref": "#/components/schemas/ReadyToPayMethodFilters"
          }
        }
      },
      "PayPalBillingAgreementFeature": {
        "type": "object",
        "title": "Billing agreement",
        "required": [
          "name",
          "paypalMerchantId",
          "paypalClientId",
          "billingAgreementToken",
          "expirationTime"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the feature.",
            "enum": [
              "PayPal billing agreement"
            ]
          },
          "paypalMerchantId": {
            "type": "string",
            "description": "ID of the PayPal merchant."
          },
          "paypalClientId": {
            "type": "string",
            "description": "ID of the PayPal client."
          },
          "billingAgreementToken": {
            "type": "string",
            "description": "PayPal billing agreement token."
          },
          "expirationTime": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the billing agreement token expires."
          }
        }
      },
      "ReadyToPayPayPalMethodFeature": {
        "type": "object",
        "discriminator": {
          "propertyName": "name",
          "mapping": {
            "PayPal billing agreement": "#/components/schemas/PayPalBillingAgreementFeature"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/PayPalBillingAgreementFeature"
          }
        ]
      },
      "ReadyToPayPayPalMethod": {
        "type": "object",
        "title": "PayPal",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "description": "Payment method.",
            "enum": [
              "paypal"
            ]
          },
          "feature": {
            "description": "Specific features of PayPal.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ReadyToPayPayPalMethodFeature"
              },
              {
                "type": "null"
              }
            ]
          },
          "filters": {
            "$ref": "#/components/schemas/ReadyToPayMethodFilters"
          }
        }
      },
      "KlarnaFeature": {
        "type": "object",
        "title": "Klarna",
        "required": [
          "name",
          "clientToken",
          "sessionId"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the feature.",
            "enum": [
              "Klarna"
            ]
          },
          "clientToken": {
            "type": "string",
            "description": "Klarna client token."
          },
          "sessionId": {
            "type": "string",
            "description": "Klarna session token."
          }
        }
      },
      "ReadyToPayKlarnaMethodFeature": {
        "type": "object",
        "discriminator": {
          "propertyName": "name",
          "mapping": {
            "Klarna": "#/components/schemas/KlarnaFeature"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/KlarnaFeature"
          }
        ]
      },
      "ReadyToPayKlarnaMethod": {
        "type": "object",
        "title": "Klarna",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "description": "Payment method.",
            "enum": [
              "Klarna"
            ]
          },
          "feature": {
            "description": "Specific feature of this method.\nFor example, a digital wallet or a processor.\nIf the method does not have any features, this value is null.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ReadyToPayKlarnaMethodFeature"
              },
              {
                "type": "null"
              }
            ]
          },
          "filters": {
            "$ref": "#/components/schemas/ReadyToPayMethodFilters"
          }
        }
      },
      "ReadyToPayMethods": {
        "type": "object",
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "payment-card": "#/components/schemas/ReadyToPayPaymentCardMethod",
            "ach": "#/components/schemas/ReadyToPayAchMethod",
            "cash": "#/components/schemas/ReadyToPayGenericMethod",
            "check": "#/components/schemas/ReadyToPayGenericMethod",
            "paypal": "#/components/schemas/ReadyToPayPayPalMethod",
            "AdvCash": "#/components/schemas/ReadyToPayGenericMethod",
            "Alfa-click": "#/components/schemas/ReadyToPayGenericMethod",
            "Alipay": "#/components/schemas/ReadyToPayGenericMethod",
            "AstroPay Card": "#/components/schemas/ReadyToPayGenericMethod",
            "AstroPay-GO": "#/components/schemas/ReadyToPayGenericMethod",
            "BankReferenced": "#/components/schemas/ReadyToPayGenericMethod",
            "bank-transfer": "#/components/schemas/ReadyToPayGenericMethod",
            "bank-transfer-2": "#/components/schemas/ReadyToPayGenericMethod",
            "bank-transfer-3": "#/components/schemas/ReadyToPayGenericMethod",
            "bank-transfer-4": "#/components/schemas/ReadyToPayGenericMethod",
            "bank-transfer-5": "#/components/schemas/ReadyToPayGenericMethod",
            "bank-transfer-6": "#/components/schemas/ReadyToPayGenericMethod",
            "bank-transfer-7": "#/components/schemas/ReadyToPayGenericMethod",
            "bank-transfer-8": "#/components/schemas/ReadyToPayGenericMethod",
            "bank-transfer-9": "#/components/schemas/ReadyToPayGenericMethod",
            "Baloto": "#/components/schemas/ReadyToPayGenericMethod",
            "Beeline": "#/components/schemas/ReadyToPayGenericMethod",
            "Belfius-direct-net": "#/components/schemas/ReadyToPayGenericMethod",
            "bitcoin": "#/components/schemas/ReadyToPayGenericMethod",
            "Bizum": "#/components/schemas/ReadyToPayGenericMethod",
            "Boleto": "#/components/schemas/ReadyToPayGenericMethod",
            "cash-deposit": "#/components/schemas/ReadyToPayGenericMethod",
            "CASHlib": "#/components/schemas/ReadyToPayGenericMethod",
            "CashToCode": "#/components/schemas/ReadyToPayGenericMethod",
            "China UnionPay": "#/components/schemas/ReadyToPayGenericMethod",
            "Cleo": "#/components/schemas/ReadyToPayGenericMethod",
            "CODVoucher": "#/components/schemas/ReadyToPayGenericMethod",
            "Conekta-oxxo": "#/components/schemas/ReadyToPayGenericMethod",
            "Cupon-de-pagos": "#/components/schemas/ReadyToPayGenericMethod",
            "cryptocurrency": "#/components/schemas/ReadyToPayGenericMethod",
            "domestic-cards": "#/components/schemas/ReadyToPayGenericMethod",
            "echeck": "#/components/schemas/ReadyToPayGenericMethod",
            "ecoPayz": "#/components/schemas/ReadyToPayGenericMethod",
            "ecoVoucher": "#/components/schemas/ReadyToPayGenericMethod",
            "Efecty": "#/components/schemas/ReadyToPayGenericMethod",
            "EPS": "#/components/schemas/ReadyToPayGenericMethod",
            "ePay.bg": "#/components/schemas/ReadyToPayGenericMethod",
            "eZeeWallet": "#/components/schemas/ReadyToPayGenericMethod",
            "FasterPay": "#/components/schemas/ReadyToPayGenericMethod",
            "Flexepin": "#/components/schemas/ReadyToPayGenericMethod",
            "Giropay": "#/components/schemas/ReadyToPayGenericMethod",
            "Gpaysafe": "#/components/schemas/ReadyToPayGenericMethod",
            "Google Pay": "#/components/schemas/ReadyToPayGenericMethod",
            "iDebit": "#/components/schemas/ReadyToPayGenericMethod",
            "iDEAL": "#/components/schemas/ReadyToPayGenericMethod",
            "ING-homepay": "#/components/schemas/ReadyToPayGenericMethod",
            "INOVAPAY-pin": "#/components/schemas/ReadyToPayGenericMethod",
            "INOVAPAY-wallet": "#/components/schemas/ReadyToPayGenericMethod",
            "InstaDebit": "#/components/schemas/ReadyToPayGenericMethod",
            "instant-bank-transfer": "#/components/schemas/ReadyToPayGenericMethod",
            "InstantPayments": "#/components/schemas/ReadyToPayGenericMethod",
            "Interac": "#/components/schemas/ReadyToPayGenericMethod",
            "Interac-online": "#/components/schemas/ReadyToPayGenericMethod",
            "Interac-eTransfer": "#/components/schemas/ReadyToPayGenericMethod",
            "invoice": "#/components/schemas/ReadyToPayGenericMethod",
            "iWallet": "#/components/schemas/ReadyToPayGenericMethod",
            "Jeton": "#/components/schemas/ReadyToPayGenericMethod",
            "jpay": "#/components/schemas/ReadyToPayGenericMethod",
            "Khelocard": "#/components/schemas/ReadyToPayGenericMethod",
            "Klarna": "#/components/schemas/ReadyToPayKlarnaMethod",
            "KNOT": "#/components/schemas/ReadyToPayGenericMethod",
            "loonie": "#/components/schemas/ReadyToPayGenericMethod",
            "Matrix": "#/components/schemas/ReadyToPayGenericMethod",
            "MaxiCash": "#/components/schemas/ReadyToPayGenericMethod",
            "Megafon": "#/components/schemas/ReadyToPayGenericMethod",
            "MiFinity-eWallet": "#/components/schemas/ReadyToPayGenericMethod",
            "miscellaneous": "#/components/schemas/ReadyToPayGenericMethod",
            "Bancontact": "#/components/schemas/ReadyToPayGenericMethod",
            "Bancontact-mobile": "#/components/schemas/ReadyToPayGenericMethod",
            "MTS": "#/components/schemas/ReadyToPayGenericMethod",
            "MuchBetter": "#/components/schemas/ReadyToPayGenericMethod",
            "Multibanco": "#/components/schemas/ReadyToPayGenericMethod",
            "Neosurf": "#/components/schemas/ReadyToPayGenericMethod",
            "Netbanking": "#/components/schemas/ReadyToPayGenericMethod",
            "Neteller": "#/components/schemas/ReadyToPayGenericMethod",
            "Nordea-Solo": "#/components/schemas/ReadyToPayGenericMethod",
            "OchaPay": "#/components/schemas/ReadyToPayGenericMethod",
            "online-bank-transfer": "#/components/schemas/ReadyToPayGenericMethod",
            "Onlineueberweisen": "#/components/schemas/ReadyToPayGenericMethod",
            "oriental-wallet": "#/components/schemas/ReadyToPayGenericMethod",
            "OXXO": "#/components/schemas/ReadyToPayGenericMethod",
            "P24": "#/components/schemas/ReadyToPayGenericMethod",
            "Pagadito": "#/components/schemas/ReadyToPayGenericMethod",
            "PagoEffectivo": "#/components/schemas/ReadyToPayGenericMethod",
            "Pagsmile-deposit-express": "#/components/schemas/ReadyToPayGenericMethod",
            "Pagsmile-lottery": "#/components/schemas/ReadyToPayGenericMethod",
            "PayCash": "#/components/schemas/ReadyToPayGenericMethod",
            "Payeer": "#/components/schemas/ReadyToPayGenericMethod",
            "PaymentAsia-crypto": "#/components/schemas/ReadyToPayGenericMethod",
            "Paymero": "#/components/schemas/ReadyToPayGenericMethod",
            "Perfect-money": "#/components/schemas/ReadyToPayGenericMethod",
            "Piastrix": "#/components/schemas/ReadyToPayGenericMethod",
            "plaid-account": "#/components/schemas/ReadyToPayGenericMethod",
            "PayTabs": "#/components/schemas/ReadyToPayGenericMethod",
            "Paysafecard": "#/components/schemas/ReadyToPayGenericMethod",
            "Paysafecash": "#/components/schemas/ReadyToPayGenericMethod",
            "Pay4Fun": "#/components/schemas/ReadyToPayGenericMethod",
            "Paynote": "#/components/schemas/ReadyToPayGenericMethod",
            "PinPay": "#/components/schemas/ReadyToPayGenericMethod",
            "phone": "#/components/schemas/ReadyToPayGenericMethod",
            "PhonePe": "#/components/schemas/ReadyToPayGenericMethod",
            "POLi": "#/components/schemas/ReadyToPayGenericMethod",
            "PostFinance-card": "#/components/schemas/ReadyToPayGenericMethod",
            "PostFinance-e-finance": "#/components/schemas/ReadyToPayGenericMethod",
            "QIWI": "#/components/schemas/ReadyToPayGenericMethod",
            "QPay": "#/components/schemas/ReadyToPayGenericMethod",
            "QQPay": "#/components/schemas/ReadyToPayGenericMethod",
            "rapyd-checkout": "#/components/schemas/ReadyToPayGenericMethod",
            "Resurs": "#/components/schemas/ReadyToPayGenericMethod",
            "SafetyPay": "#/components/schemas/ReadyToPayGenericMethod",
            "SEPA": "#/components/schemas/ReadyToPayGenericMethod",
            "Skrill": "#/components/schemas/ReadyToPayGenericMethod",
            "Skrill Rapid Transfer": "#/components/schemas/ReadyToPayGenericMethod",
            "SMSVoucher": "#/components/schemas/ReadyToPayGenericMethod",
            "Sofort": "#/components/schemas/ReadyToPayGenericMethod",
            "SparkPay": "#/components/schemas/ReadyToPayGenericMethod",
            "swift-dbt": "#/components/schemas/ReadyToPayGenericMethod",
            "Tele2": "#/components/schemas/ReadyToPayGenericMethod",
            "Terminaly-RF": "#/components/schemas/ReadyToPayGenericMethod",
            "ToditoCash-card": "#/components/schemas/ReadyToPayGenericMethod",
            "Trustly": "#/components/schemas/ReadyToPayGenericMethod",
            "UPayCard": "#/components/schemas/ReadyToPayGenericMethod",
            "UPI": "#/components/schemas/ReadyToPayGenericMethod",
            "USD-coin": "#/components/schemas/ReadyToPayGenericMethod",
            "VCreditos": "#/components/schemas/ReadyToPayGenericMethod",
            "VenusPoint": "#/components/schemas/ReadyToPayGenericMethod",
            "voucher": "#/components/schemas/ReadyToPayGenericMethod",
            "voucher-2": "#/components/schemas/ReadyToPayGenericMethod",
            "voucher-3": "#/components/schemas/ReadyToPayGenericMethod",
            "voucher-4": "#/components/schemas/ReadyToPayGenericMethod",
            "Webmoney": "#/components/schemas/ReadyToPayGenericMethod",
            "Webpay": "#/components/schemas/ReadyToPayGenericMethod",
            "Webpay-2": "#/components/schemas/ReadyToPayGenericMethod",
            "Webpay Card": "#/components/schemas/ReadyToPayGenericMethod",
            "WeChat Pay": "#/components/schemas/ReadyToPayGenericMethod",
            "XPay-P2P": "#/components/schemas/ReadyToPayGenericMethod",
            "XPay-QR": "#/components/schemas/ReadyToPayGenericMethod",
            "Yandex-money": "#/components/schemas/ReadyToPayGenericMethod",
            "Zotapay": "#/components/schemas/ReadyToPayGenericMethod",
            "Zimpler": "#/components/schemas/ReadyToPayGenericMethod"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/ReadyToPayPaymentCardMethod"
          },
          {
            "$ref": "#/components/schemas/ReadyToPayAchMethod"
          },
          {
            "$ref": "#/components/schemas/ReadyToPayGenericMethod"
          },
          {
            "$ref": "#/components/schemas/ReadyToPayPayPalMethod"
          },
          {
            "$ref": "#/components/schemas/ReadyToPayKlarnaMethod"
          }
        ]
      },
      "UsageStatus": {
        "type": "object",
        "readOnly": true,
        "description": "Current status of the usage limits.",
        "properties": {
          "isSoftLimitReached": {
            "type": "boolean",
            "description": "Specifies if the soft limit has been reached.",
            "example": false
          },
          "isHardLimitReached": {
            "type": "boolean",
            "description": "Specifies if the hard limit has been reached.",
            "example": false
          },
          "isTrialLimitReached": {
            "type": "boolean",
            "description": "Specifies if the trial limit has been reached.",
            "example": false
          }
        }
      },
      "SubscriptionOrOneTimeSaleItem": {
        "type": "object",
        "required": [
          "plan"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the order item.",
            "readOnly": true,
            "maxLength": 50
          },
          "planId": {
            "description": "ID of the plan.",
            "deprecated": true,
            "x-basic": true,
            "type": "string",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
          },
          "quantity": {
            "description": "Number of product units in the specified plan.",
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000000
          },
          "quantityFilled": {
            "description": "Number of filled product units.",
            "type": "number",
            "format": "double",
            "example": 5.125
          },
          "plan": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OriginalPlan"
              },
              {
                "$ref": "#/components/schemas/FlexiblePlan"
              }
            ]
          },
          "usageLimits": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageLimits"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "usageStatus": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageStatus"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "revision": {
            "type": "integer",
            "readOnly": true,
            "description": "Revision number that increments with each overriding change to this specific plan item."
          },
          "isModified": {
            "type": "boolean",
            "readOnly": true,
            "description": "Specifies if the plan information is modified for this subscription."
          },
          "isGrandfathered": {
            "type": "boolean",
            "readOnly": true,
            "description": "Specifies if the current plan revision number is greater than the plan item revision number."
          },
          "excludeFromMrr": {
            "type": "boolean",
            "description": "Specifies if this item should be excluded from monthly recurring revenue calculations."
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "product": {
                "type": "object"
              }
            }
          }
        }
      },
      "Subscription": {
        "type": "object",
        "required": [
          "orderType",
          "customerId",
          "websiteId",
          "items"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the order.",
            "readOnly": true,
            "maxLength": 50,
            "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "orderType": {
            "description": "Specifies the type of order.\nAn order may be a subscription or a one-time purchase.\n\n> **Note:** The order type cannot be changed after creation.",
            "type": "string",
            "x-basic": true,
            "enum": [
              "subscription-order"
            ]
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "renewalReminderTime": {
            "description": "Date and time when the renewal reminder event triggers.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "renewalReminderNumber": {
            "description": "Number of triggered renewal reminder events.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true
          },
          "abandonReminderTime": {
            "description": "Date and time when the abandon order reminder event triggers.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "abandonReminderNumber": {
            "description": "Number of abandon order reminder events that are triggered.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true
          },
          "organizationId": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/OrganizationId"
              }
            ]
          },
          "status": {
            "description": "Status of the subscription service.\nA subscription starts in the `pending` status, and becomes `active` when the service period begins.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "active",
              "abandoned",
              "canceled",
              "churned",
              "paused",
              "voided",
              "completed",
              "trial-ended"
            ]
          },
          "inTrial": {
            "description": "Specifies if the subscription is currently in a trial period.",
            "type": "boolean",
            "readOnly": true
          },
          "trial": {
            "type": "object",
            "description": "Details of the trial.\nTo use plan defaults, omit the `trial` key or set this value to `null`.",
            "properties": {
              "enabled": {
                "description": "Specifies if there is a trial for this subscription.\nPlans without trial prices are free trials.",
                "type": "boolean"
              },
              "endTime": {
                "description": "Time and date when the trial ends.\nIf a trial is enabled on this subscription, a value must be provided.\n\nIf the specified trial end time is in the past, the current time is used.",
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              }
            }
          },
          "isTrialOnly": {
            "description": "Specifies if a subscription ends after a trial period.\nIf this value is `true`, recurring settings are ignored.",
            "type": "boolean",
            "default": false
          },
          "trialConversionTime": {
            "description": "Date and time when the subscription had a trial conversion.\nTrial conversion occurs when the first successful payment is made after a trial period.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "invoiceTimeShift": {
            "description": "Shifts issue time and due time of invoices for this subscription.\n\nThis setting overrides plan settings.\nTo use plan settings, set this value to `null`.\n\nTo use multiple plans in one subscription,\nall plans must have the same billing period,\nthis property enables the customer to subscribe to different plans.",
            "$ref": "#/components/schemas/InvoiceTimeShift"
          },
          "recurringInterval": {
            "type": [
              "object",
              "null"
            ],
            "description": "Recurring interval to override plan settings.\nTo use plan settings, set this value to `null`.\n\nTo use multiple plans in one subscription,\nall plans must have the same recurring period length.",
            "example": null,
            "properties": {
              "periodAnchorInstruction": {
                "$ref": "#/components/schemas/ServicePeriodAnchorInstruction"
              }
            }
          },
          "autopay": {
            "description": "Specifies if payment attempts are made automatically.\nIf autopay is enabled, the payment is retrieved from the customer on the renewal date using the payment instrument that is set at `paymentInstrumentId`,\nor the default payment instrument on the subscription.",
            "type": "boolean",
            "default": true
          },
          "startTime": {
            "description": "Date and time when the subscription starts.\nIf this value is `null`, the current time is used.\nThis value cannot be more than one service period in the past.",
            "type": [
              "string",
              "null"
            ],
            "x-sortable": true,
            "x-basic": true,
            "example": null,
            "format": "date-time"
          },
          "churnTime": {
            "description": "Date and time when the subscription is deactivated.",
            "x-sortable": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "renewalTime": {
            "description": "Date and time when the subscription renews.",
            "type": [
              "string",
              "null"
            ],
            "x-sortable": true,
            "x-basic": true,
            "format": "date-time"
          },
          "rebillNumber": {
            "description": "Current billing period number.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true,
            "x-sortable": true
          },
          "lineItems": {
            "description": "Subscription line items which queue until the next renewal, or interim, invoice is issued for the subscription.",
            "readOnly": true,
            "type": "array",
            "deprecated": true,
            "items": {
              "type": "object",
              "description": "Invoice line item.\nUse the `isInterim` property of upcoming invoice items instead.",
              "deprecated": true,
              "properties": {
                "type": {
                  "description": "Type of invoice line item.",
                  "type": "string",
                  "enum": [
                    "debit",
                    "credit"
                  ]
                },
                "description": {
                  "description": "Description of the line item.",
                  "type": "string",
                  "maxLength": 1000
                },
                "unitPriceAmount": {
                  "description": "Unit price of the line item.",
                  "type": "number",
                  "format": "double",
                  "example": 49.95
                },
                "unitPriceCurrency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "quantity": {
                  "description": "Quantity of the line item.",
                  "type": "integer",
                  "example": 1
                },
                "periodStartTime": {
                  "description": "Date and time when the service period begins for this item.",
                  "type": "string",
                  "format": "date-time"
                },
                "periodEndTime": {
                  "description": "Date and time when the service period ends for this item.",
                  "type": "string",
                  "format": "date-time"
                },
                "createdTime": {
                  "$ref": "#/components/schemas/CreatedTime"
                },
                "updatedTime": {
                  "$ref": "#/components/schemas/UpdatedTime"
                }
              }
            }
          },
          "lineItemSubtotal": {
            "type": "object",
            "readOnly": true,
            "deprecated": true,
            "description": "Subtotal of line items in this subscription (signed value).\nIf credits exceed debits, this value is a negative number.",
            "properties": {
              "currency": {
                "$ref": "#/components/schemas/CurrencyCode"
              },
              "amount": {
                "type": "number",
                "x-type": "Money",
                "x-sortable": true,
                "description": "Amount of the subtotal.",
                "format": "double",
                "example": 49.95
              }
            }
          },
          "mrr": {
            "description": "Monthly recurring revenue of the order.",
            "type": "number",
            "x-type": "Money",
            "x-sortable": true,
            "format": "double",
            "readOnly": true,
            "example": 49.95
          },
          "paymentInstrumentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the payment instrument to use for autopay.\nIf this value is not provided, or if the payment instrument is inactive,\nthe customer's default payment instrument is used.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "billingStatus": {
            "description": "Billing status of the most recent invoice.\nThis value may help you to determine if you should change the service status of the service,\nsuch as suspending the service.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "draft",
              "unpaid",
              "past-due",
              "abandoned",
              "paid",
              "voided",
              "refunded",
              "disputed",
              "partially-refunded",
              "partially-paid"
            ]
          },
          "websiteId": {
            "type": "string",
            "description": "ID of the website.\nA website is where an organization obtains a customer.\nFor more information, see [Obtain an organization ID and website ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).\n\n> **Note:** The ID of the website cannot be changed after creation.",
            "maxLength": 50,
            "example": "web_0YV7DE4Z26DQSA1AC92FBJ7SEG",
            "x-sortable": true,
            "x-basic": true
          },
          "currency": {
            "description": "Currency of the order.",
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "initialInvoiceId": {
            "description": "ID of the initial invoice.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "recentInvoiceId": {
            "description": "ID of the most recently issued invoice.\nThe invoice might not be `paid` yet.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "items": {
            "description": "Details of items in the order.",
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/SubscriptionOrOneTimeSaleItem"
            }
          },
          "deliveryAddress": {
            "description": "Delivery address of the order.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "billingAddress": {
            "description": "Billing address of the order.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "activationTime": {
            "description": "Date and time when the order is activated.",
            "x-sortable": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "voidTime": {
            "description": "Date and time when the order is voided.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "abandonTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date and time when the pending order is automatically abandoned.\nIf this value is not passed during order creation,\na [pending order TTL](https://www.rebilly.com/catalog/all/organizations/patchorganization#organizations/patchorganization/t=request&path=settings/billing/pendingorderttl) setting is used to calculate the value.",
            "format": "date-time"
          },
          "delinquencyPeriod": {
            "type": [
              "string",
              "null"
            ],
            "description": "Length of time, in ISO-8601 durations format,\nwhich is added to the due time of the order when setting the delinquency time for all related invoices.\nWhen the delinquency time of an invoice is reached, the order is automatically canceled.\n\n{% admonition type=\"warning\" %}\n- If the `delinquencyPeriod` value is `null`, the order does not change state and remains active.\nYou must explicitly configure the delinquency period to enable automatic cancellation of unpaid orders.\n- If you add a delinquency period to an active order, it is applied to all new invoices created for the order. It is not applied to the unpaid and past-due invoices. To apply a delinquency period to unpaid and past-due invoices, set the `delinquencyTime` parameter using the [upsert an invoice API operation](https://www.rebilly.com/catalog/all/invoices/putinvoice#invoices/putinvoice/t=request&path=delinquencytime).\n{% /admonition %}\n\nIf this value is not passed during order creation,\nan [order delinquency period](https://www.rebilly.com/catalog/all/organizations/patchorganization#organizations/patchorganization/t=request&path=settings/billing/orderdelinquencyperiod) setting is used to calculate the value.",
            "example": "P7D",
            "default": null
          },
          "couponIds": {
            "type": [
              "array",
              "null"
            ],
            "description": "List of coupons to redeem on the customer and restrict to this order.\n\nFor more information, see [Coupons](https://www.rebilly.com/docs/settings/coupons-and-discounts/).\n\nThis parameter uses the following logic:\n\n- If this parameter is not supplied, applied coupons are not changed.\n- If an empty array is supplied, all applied coupon redemptions are canceled.\n- If a list of coupons is supplied, unapplied coupons in the list are applied.\n  Coupons that have already been applied do not change state.\n  Applied coupons that are not supplied in list are canceled.\n\nIf the list of applied coupons on a pending order is changed by this parameter during an order update, the invoice for the order is reissued.",
            "writeOnly": true,
            "items": {
              "type": "string",
              "description": "ID of the coupon."
            }
          },
          "poNumber": {
            "description": "Purchase order number displayed on the issued invoices.",
            "type": [
              "string",
              "null"
            ],
            "example": "PO123456"
          },
          "shipping": {
            "$ref": "#/components/schemas/Shipping"
          },
          "notes": {
            "description": "Notes for the customer displayed on the order invoice.",
            "type": "string"
          },
          "canceledBy": {
            "description": "Specifies who initiated the cancellation.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "enum": [
              "merchant",
              "customer",
              "rebilly",
              null
            ]
          },
          "cancelCategory": {
            "description": "Category of the cancellation.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "enum": [
              "billing-failure",
              "delinquency",
              "did-not-use",
              "did-not-want",
              "missing-features",
              "bugs-or-problems",
              "do-not-remember",
              "risk-warning",
              "contract-expired",
              "too-expensive",
              "never-started",
              "switched-plan",
              "organization-deactivated",
              "other",
              null
            ]
          },
          "cancelDescription": {
            "description": "Description of the cancellation reason in free form.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 255
          },
          "revision": {
            "description": "Number of times the order data has been modified.\n\nThe revision is useful when analyzing webhook data to determine if the\nchange takes precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "riskMetadata": {
            "description": "Risk metadata.\nIf this value is `null`, this field uses risk metadata that is captured when creating the payment token.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "billingPortalToken": {
            "description": "Customer JWT to access a billing portal.\nThis field is presented only if a billing portal exists.\nThis is an experimental field and can be changed or removed in the future.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "website",
                    "customer",
                    "initialInvoice",
                    "recentInvoice",
                    "approvalUrl",
                    "attachments"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "recentInvoice": {
                "type": "object"
              },
              "initialInvoice": {
                "type": "object"
              },
              "customer": {
                "type": "object"
              },
              "website": {
                "type": "object"
              },
              "leadSource": {
                "type": "object"
              },
              "shippingRate": {
                "type": "object"
              },
              "paymentInstrument": {
                "type": "object"
              },
              "upcomingInvoice": {
                "type": "object"
              }
            }
          }
        }
      },
      "OneTimeSale": {
        "type": "object",
        "required": [
          "orderType",
          "customerId",
          "websiteId",
          "items"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the one-time sale.",
            "readOnly": true,
            "maxLength": 50,
            "example": "ots_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "orderType": {
            "description": "Specifies the type of order.\nAn order may be a subscription or a one-time purchase.",
            "type": "string",
            "x-basic": true,
            "enum": [
              "one-time-order"
            ]
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "organizationId": {
            "deprecated": true,
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/OrganizationId"
              }
            ]
          },
          "status": {
            "description": "Status of the one-time order.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "abandoned",
              "completed",
              "canceled"
            ]
          },
          "billingStatus": {
            "description": "Billing status of the most recent invoice.\nThis value may help you to determine if you should change the service status of the service,\nsuch as suspending the service.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "draft",
              "unpaid",
              "past-due",
              "abandoned",
              "paid",
              "voided",
              "refunded",
              "disputed",
              "partially-refunded",
              "partially-paid"
            ]
          },
          "websiteId": {
            "x-sortable": true,
            "x-basic": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/WebsiteId"
              }
            ]
          },
          "currency": {
            "description": "Currency of the order.",
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "initialInvoiceId": {
            "description": "ID of the initial invoice (`null` for one-time orders).",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "recentInvoiceId": {
            "description": "ID of the most recently issued invoice.\nThe invoice might not be `paid` yet.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "items": {
            "description": "Details of items in the order.",
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/SubscriptionOrOneTimeSaleItem"
            }
          },
          "deliveryAddress": {
            "description": "Delivery address of the order.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "billingAddress": {
            "description": "Billing address of the order.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "activationTime": {
            "description": "Date and time when the order is activated.",
            "x-sortable": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "voidTime": {
            "description": "Date and time when the order is voided.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "abandonTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date and time when the pending order is automatically abandoned.\nIf this value is not passed during order creation,\na [pending order TTL](https://www.rebilly.com/catalog/all/organizations/patchorganization#organizations/patchorganization/t=request&path=settings/billing/pendingorderttl) setting is used to calculate the value.",
            "format": "date-time"
          },
          "couponIds": {
            "type": [
              "array",
              "null"
            ],
            "description": "List of coupons to redeem on the customer and restrict to this order.\n\nFor more information, see [Coupons](https://www.rebilly.com/docs/settings/coupons-and-discounts/).\n\nThis parameter uses the following logic:\n\n- If this parameter is not supplied, applied coupons are not changed.\n- If an empty array is supplied, all applied coupon redemptions are canceled.\n- If a list of coupons is supplied, unapplied coupons in the list are applied.\n  Coupons that have already been applied do not change state.\n  Applied coupons that are not supplied in list are canceled.\n\nIf the list of applied coupons on a pending order is changed by this parameter during an order update, the invoice for the order is reissued.",
            "writeOnly": true,
            "items": {
              "type": "string",
              "description": "ID of the coupon."
            }
          },
          "poNumber": {
            "description": "Purchase order number displayed on the issued invoices.",
            "type": [
              "string",
              "null"
            ],
            "example": "PO123456"
          },
          "shipping": {
            "$ref": "#/components/schemas/Shipping"
          },
          "notes": {
            "description": "Notes for the customer displayed on the order invoice.",
            "type": "string"
          },
          "revision": {
            "description": "Number of times the order data has been modified.\n\nThe revision is useful when analyzing webhook data to determine if the\nchange takes precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "riskMetadata": {
            "description": "Risk metadata.\nIf this value is `null`, this field uses risk metadata that is captured when creating the payment token.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "website",
                    "customer",
                    "initialInvoice",
                    "recentInvoice",
                    "approvalUrl",
                    "attachments"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "recentInvoice": {
                "type": "object"
              },
              "customer": {
                "type": "object"
              },
              "website": {
                "type": "object"
              },
              "leadSource": {
                "type": "object"
              },
              "shippingRate": {
                "type": "object"
              },
              "paymentInstrument": {
                "type": "object"
              }
            }
          }
        }
      },
      "SubscriptionOrOneTimeSale": {
        "type": "object",
        "description": "Subscription details.",
        "discriminator": {
          "propertyName": "orderType",
          "mapping": {
            "subscription-order": "#/components/schemas/Subscription",
            "one-time-order": "#/components/schemas/OneTimeSale"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/Subscription"
          },
          {
            "$ref": "#/components/schemas/OneTimeSale"
          }
        ]
      },
      "Search": {
        "type": "object",
        "properties": {
          "customers": {
            "description": "List of returned customers.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Customer"
            }
          },
          "invoices": {
            "description": "List of returned invoices.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Invoice"
            }
          },
          "orders": {
            "description": "List of returned orders.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
            }
          },
          "transactions": {
            "description": "List of returned transactions.",
            "readOnly": true,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Transaction"
            }
          },
          "searched": {
            "description": "Names of searched resources.\nIncludes all searched resources.",
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "ShippingOption": {
        "type": "object",
        "required": [
          "name",
          "price",
          "currency"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the shipping rate.",
            "readOnly": true,
            "maxLength": 50,
            "example": "ship_rate_0YVDN408G4DQE9G1RV1QCFHJ3P"
          },
          "name": {
            "type": "string",
            "description": "Name of the shipping rate."
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Description of the shipping rate."
          },
          "price": {
            "description": "Price of the shipping rate.\nIf `price` is `0`, shipping is free.",
            "type": "number",
            "format": "double"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          }
        }
      },
      "ShippingRate": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ShippingOption"
          },
          {
            "properties": {
              "filter": {
                "type": "string",
                "description": "Filter based on invoice properties that is used to determine when the rate is applicable.\nIf no filters are used, the rate is always applicable.",
                "default": "",
                "example": "deliveryAddress.country:US,CA,RU;amount:100..1000"
              },
              "status": {
                "description": "Status of the shipping rate.\nIf `status` is `inactive` the shipping rate is not applied.",
                "type": "string",
                "enum": [
                  "active",
                  "inactive"
                ],
                "default": "active"
              },
              "createdTime": {
                "$ref": "#/components/schemas/CreatedTime"
              },
              "updatedTime": {
                "$ref": "#/components/schemas/UpdatedTime"
              },
              "_links": {
                "$ref": "#/components/schemas/SelfLink"
              }
            }
          }
        ]
      },
      "OneTimeSaleItem": {
        "type": "object",
        "required": [
          "type",
          "plan"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the one-time sale.",
            "readOnly": true,
            "maxLength": 50,
            "example": "ots_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "type": {
            "description": "Specifies the type of order item.",
            "type": "string",
            "x-basic": true,
            "const": "one-time-sale"
          },
          "planId": {
            "description": "ID of the plan.",
            "x-basic": true,
            "type": "string",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
          },
          "productId": {
            "type": "string",
            "description": "ID of the related product.",
            "maxLength": 50,
            "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ",
            "readOnly": true
          },
          "plan": {
            "description": "Details of the plan.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/OriginalPlan"
              },
              {
                "$ref": "#/components/schemas/FlexiblePlan"
              }
            ]
          },
          "quantity": {
            "description": "Number of product units in the specified plan.",
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000000
          },
          "revision": {
            "description": "Number of times the order data has been modified.\n\nThe revision is useful when analyzing webhook data to determine if the\nchange takes precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          }
        }
      },
      "SubscriptionItem": {
        "type": "object",
        "required": [
          "type",
          "plan"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the subscription.",
            "readOnly": true,
            "maxLength": 50,
            "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "type": {
            "description": "Specifies the type of order item.",
            "type": "string",
            "x-basic": true,
            "const": "subscription"
          },
          "renewalReminderTime": {
            "description": "Date and time when the renewal reminder event triggers.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "renewalReminderNumber": {
            "description": "Number of triggered renewal reminder events.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true
          },
          "recurringInterval": {
            "type": [
              "object",
              "null"
            ],
            "description": "Recurring interval to override plan settings.\nTo use plan settings, set this value to `null`.\n\nTo use multiple plans in one subscription,\nall plans must have the same recurring period length.",
            "example": null,
            "properties": {
              "periodAnchorInstruction": {
                "$ref": "#/components/schemas/ServicePeriodAnchorInstruction"
              }
            }
          },
          "renewalTime": {
            "description": "Date and time when the subscription renews.",
            "type": [
              "string",
              "null"
            ],
            "x-sortable": true,
            "x-basic": true,
            "format": "date-time"
          },
          "rebillNumber": {
            "description": "Current billing period number.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true,
            "x-sortable": true
          },
          "planId": {
            "description": "ID of the plan.",
            "x-basic": true,
            "type": "string",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
          },
          "productId": {
            "type": "string",
            "description": "ID of the related product.",
            "maxLength": 50,
            "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ",
            "readOnly": true
          },
          "plan": {
            "description": "Details of the plan.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/OriginalPlan"
              },
              {
                "$ref": "#/components/schemas/FlexiblePlan"
              }
            ]
          },
          "quantity": {
            "description": "Number of product units in the specified plan.",
            "type": "integer",
            "minimum": 0,
            "maximum": 1000000000
          },
          "quantityFilled": {
            "description": "Number of filled product units.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "example": 5.125
          },
          "usageLimits": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageLimits"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "usageStatus": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageStatus"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "revision": {
            "type": "integer",
            "readOnly": true,
            "description": "Revision number that increments with each overriding change to this specific item."
          },
          "excludeFromMrr": {
            "type": "boolean",
            "description": "Specifies if this item should be excluded from monthly recurring revenue calculations."
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          }
        }
      },
      "OrderUpcomingInvoiceItem": {
        "type": "object",
        "readOnly": true,
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the upcoming invoice item.",
            "maxLength": 50,
            "example": "ii_0YVFDEQS2KCFTBN9HXWJFY55GV"
          },
          "isInterim": {
            "description": "Specifies if the line item is added to an interim invoice.",
            "type": "boolean"
          },
          "description": {
            "description": "Description of the upcoming invoice item.",
            "type": "string",
            "maxLength": 1000
          },
          "unitPrice": {
            "description": "Unit price of the upcoming invoice item.",
            "type": "number",
            "format": "double"
          },
          "quantity": {
            "description": "Quantity of the upcoming invoice item.",
            "type": "integer"
          },
          "price": {
            "description": "Total price of the upcoming invoice item.",
            "type": "number",
            "format": "double"
          },
          "productId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the product.",
            "maxLength": 50,
            "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
          },
          "planId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the plan.",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
          },
          "orderId": {
            "type": "string",
            "description": "ID of the order.",
            "maxLength": 50,
            "example": "ord_01HVKA5975PJBSQ1SX72G3MSZC"
          },
          "periodStartTime": {
            "description": "Date and time when the billing period starts.",
            "type": "string",
            "format": "date-time"
          },
          "periodEndTime": {
            "description": "Date and time when the billing period ends.",
            "type": "string",
            "format": "date-time"
          },
          "periodNumber": {
            "description": "Billing period number that is associated with the invoice item.\nFor example, an invoice item for a service is included in billing period number 3.\nThe invoice item is only applied to billing period number 3.",
            "type": "integer"
          },
          "tax": {
            "description": "Invoice item tax.",
            "$ref": "#/components/schemas/TaxItem"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "OrderUpcomingInvoice": {
        "type": "object",
        "readOnly": true,
        "properties": {
          "id": {
            "description": "ID of the upcoming invoice.\nThis value is persisted in the future renewal invoice.",
            "type": "string",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "currency": {
            "x-sortable": true,
            "x-basic": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "revision": {
            "description": "Number of times the upcoming invoice data has changed.\n\nUse the revision number when analyzing webhook data to\ndetermine if a change should take precedence over the current\nrepresentation.",
            "type": "integer"
          },
          "items": {
            "type": "array",
            "description": "Upcoming invoice items array.",
            "items": {
              "$ref": "#/components/schemas/OrderUpcomingInvoiceItem"
            }
          },
          "amount": {
            "description": "Amount of the invoice.",
            "type": "number",
            "x-type": "Money",
            "x-sortable": true,
            "x-basic": true,
            "format": "double",
            "readOnly": true
          },
          "amountDue": {
            "description": "Amount that is due on the invoice.",
            "type": "number",
            "x-type": "Money",
            "x-sortable": true,
            "format": "double",
            "readOnly": true
          },
          "subtotalAmount": {
            "description": "Subtotal amount of the invoice.",
            "type": "number",
            "x-type": "Money",
            "format": "double",
            "readOnly": true
          },
          "discountAmount": {
            "description": "Discount amount that is applied to the invoice.",
            "type": "number",
            "x-type": "Money",
            "format": "double",
            "readOnly": true
          },
          "shipping": {
            "$ref": "#/components/schemas/Shipping"
          },
          "tax": {
            "$ref": "#/components/schemas/Taxes"
          },
          "discounts": {
            "type": "array",
            "description": "Discounts applied.",
            "readOnly": true,
            "items": {
              "type": "object",
              "readOnly": true,
              "properties": {
                "couponId": {
                  "type": "string",
                  "description": "ID of the coupon.",
                  "maxLength": 50,
                  "example": "cpn_0YVCNKF81GD778N4YNVGDJK558"
                },
                "redemptionId": {
                  "description": "ID of the redemption.",
                  "$ref": "#/components/schemas/ResourceId"
                },
                "amount": {
                  "description": "Total amount discounted by this coupon.",
                  "type": "number",
                  "format": "double"
                },
                "description": {
                  "type": "string",
                  "description": "Description of the discount."
                },
                "context": {
                  "$ref": "#/components/schemas/DiscountContext"
                }
              }
            }
          },
          "issuedTime": {
            "description": "Date and time when the invoice is issued.",
            "x-label": "Date Issued",
            "x-sortable": true,
            "x-basic": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "dueTime": {
            "description": "Date and time when the invoice is due for payment.",
            "type": "string",
            "x-sortable": true,
            "format": "date-time"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "Website": {
        "type": "object",
        "required": [
          "name",
          "url",
          "servicePhone",
          "serviceEmail"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/WebsiteId"
              }
            ]
          },
          "name": {
            "description": "Name of the website.",
            "type": "string"
          },
          "url": {
            "description": "Domain address of the website.",
            "type": "string"
          },
          "servicePhone": {
            "description": "Customer service phone number of the website.",
            "type": "string"
          },
          "serviceEmail": {
            "description": "Customer service email address of the website.",
            "type": "string",
            "format": "email"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "settings": {
            "type": "object",
            "description": "Website settings.",
            "properties": {
              "depositForm": {
                "type": "object",
                "description": "Deposit form settings.",
                "properties": {
                  "theme": {
                    "description": "Theme settings that are used in the deposit form.",
                    "type": [
                      "object",
                      "null"
                    ],
                    "properties": {
                      "colorPrimary": {
                        "description": "Primary color for the deposit form in hexadecimal format.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "maxLength": 6,
                        "example": "0044d4"
                      },
                      "colorSecondary": {
                        "description": "Secondary color for the deposit form in hexadecimal format.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "maxLength": 6,
                        "example": "ffffff"
                      },
                      "buttonTemplate": {
                        "description": "Submit button template. `{{amount}}` can be used as a placeholder for amount and currency.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "maxLength": 100,
                        "example": "Pay {{amount}}"
                      }
                    }
                  }
                }
              },
              "paymentForm": {
                "type": "object",
                "description": "Payment form settings.",
                "properties": {
                  "css": {
                    "description": "Hosted payment form [CSS options](https://www.rebilly.com/docs/content/concepts-and-features/tutorial/customize-style-rebilly-instruments/#2-use-css-property-to-override-any-styles).",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "theme": {
                    "description": "Hosted payment form [theme options](https://www.rebilly.com/docs/content/concepts-and-features/tutorial/customize-style-rebilly-instruments/#adjust-the-default-style).",
                    "type": [
                      "object",
                      "null"
                    ],
                    "additionalProperties": {
                      "type": "string"
                    },
                    "example": {
                      "colorPrimary": "#504CCA"
                    }
                  },
                  "features": {
                    "description": "Hosted payment form features.",
                    "type": [
                      "object",
                      "null"
                    ],
                    "properties": {
                      "showCoupons": {
                        "type": [
                          "array",
                          "null"
                        ],
                        "items": {
                          "type": "string"
                        }
                      },
                      "fullPageRedirect": {
                        "type": [
                          "boolean",
                          "null"
                        ],
                        "description": "Specifies whether the hosted payment form uses a full page redirect, or the default iframe modal, for approval URL redirects.",
                        "default": false
                      },
                      "skipRedirectOnPaymentComplete": {
                        "type": [
                          "boolean",
                          "null"
                        ],
                        "description": "Specifies whether the hosted payment form skips the redirect to the website URL when the payment is completed.",
                        "default": false
                      },
                      "hideZeroAmountSummaryItems": {
                        "type": [
                          "boolean",
                          "null"
                        ],
                        "description": "Specifies if the hosted payment form displays 0 amount line items in the summary.",
                        "default": false
                      }
                    }
                  }
                }
              },
              "amplitude": {
                "type": "object",
                "description": "Amplitude settings.\nAmplitude is an analytics tool for tracking user behavior.",
                "properties": {
                  "tracking": {
                    "description": "Specifies if the hosted pages, such as KYC pages, include Amplitude analytics.",
                    "type": "boolean",
                    "default": false
                  },
                  "apiKey": {
                    "description": "API key of an Amplitude project.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "minLength": 20,
                    "maxLength": 50,
                    "example": "35d1795750c585984f7e6b01c0ca6e19"
                  }
                }
              }
            }
          },
          "logoId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the linked file object.",
            "maxLength": 50,
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "logoUrl": {
            "readOnly": true,
            "description": "URL of the website logo.",
            "type": [
              "string",
              "null"
            ]
          },
          "organizationId": {
            "deprecated": true,
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/OrganizationId"
              }
            ]
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "logoUrl"
                  ]
                }
              }
            }
          }
        }
      },
      "RecurringOrder": {
        "type": "object",
        "required": [
          "type",
          "customerId",
          "websiteId",
          "items"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the order.",
            "readOnly": true,
            "maxLength": 50,
            "example": "ord_01HVKA5975PJBSQ1SX72G3MSZC"
          },
          "type": {
            "type": "string",
            "description": "Type of the order.",
            "const": "recurring"
          },
          "organizationId": {
            "type": "string",
            "description": "Unique organization identifier.\nAn organization is an entity that represents a company.\nFor more information, see [Obtain an organization ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).",
            "maxLength": 50,
            "readOnly": true,
            "example": "org_0YVDM8RC7GDADADSBSMW124JA8"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "activationInvoiceId": {
            "type": "string",
            "description": "ID of the activation invoice.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "recentInvoiceId": {
            "description": "ID of the most recently issued invoice.\nThe invoice might not be `paid` yet.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "status": {
            "description": "Status of the order.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "active",
              "canceled",
              "churned",
              "paused",
              "voided",
              "completed",
              "trial-ended",
              "abandoned"
            ]
          },
          "inTrial": {
            "description": "Specifies if the subscription is currently in a trial period.",
            "type": "boolean",
            "readOnly": true
          },
          "trial": {
            "type": "object",
            "description": "Details of the trial.\nTo use plan defaults, omit the `trial` key or set this value to `null`.",
            "properties": {
              "enabled": {
                "description": "Specifies if there is a trial for this subscription.\nPlans without trial prices are free trials.",
                "type": "boolean"
              },
              "endTime": {
                "description": "Time and date when the trial ends.\nIf a trial is enabled on this subscription, a value must be provided.\n\nIf the specified trial end time is in the past, the current time is used.",
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time"
              }
            }
          },
          "isTrialOnly": {
            "description": "Specifies if a subscription ends after a trial period.\nIf this value is `true`, recurring settings are ignored.",
            "type": "boolean",
            "default": false
          },
          "trialConversionTime": {
            "description": "Date and time when the subscription had a trial conversion.\nTrial conversion occurs when the first successful payment is made after a trial period.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "description": "Item in the order.",
            "items": {
              "type": "object",
              "discriminator": {
                "propertyName": "type",
                "mapping": {
                  "one-time-sale": "#/components/schemas/OneTimeSaleItem",
                  "subscription": "#/components/schemas/SubscriptionItem"
                }
              },
              "oneOf": [
                {
                  "$ref": "#/components/schemas/SubscriptionItem"
                },
                {
                  "$ref": "#/components/schemas/OneTimeSaleItem"
                }
              ]
            }
          },
          "invoiceIssueTimeShift": {
            "description": "Invoice issue time shift interval in ISO-8601 format.\n\nThis field adjusts the issue date and time of renewal invoices for the order.\n\nThis interval value supports the `-` symbol.",
            "type": "string",
            "default": "+P00Y00M00DT00H00M00S",
            "example": "+P00Y00M00DT00H00M00S"
          },
          "invoiceDueTimeShift": {
            "description": "Invoice due time shift interval in ISO-8601 format.\n\nUse this field to adjust when payment is due for the order.\nIf autopay is configured, payment is collected automatically on this date.\n\nThis interval value supports the `+` symbol.",
            "type": "string",
            "default": "+P00Y00M00DT00H00M00S",
            "example": "+P00Y00M00DT00H00M00S"
          },
          "paymentInstrumentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the payment instrument to use for autopay.\nIf this value is not provided, or if the payment instrument is inactive,\nthe customer's default payment instrument is used.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "poNumber": {
            "description": "Purchase order number that is displayed on the issued invoices.",
            "type": [
              "string",
              "null"
            ],
            "example": "PO123456"
          },
          "notes": {
            "description": "Notes for the customer that are displayed on the order invoice.",
            "type": "string"
          },
          "billingAddress": {
            "description": "Billing address of the order.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "deliveryAddress": {
            "description": "Delivery address of the order.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "delinquencyPeriod": {
            "type": [
              "string",
              "null"
            ],
            "description": "Length of time, in ISO-8601 durations format,\nwhich is added to the due time of the order when setting the delinquency time for all related invoices.\nWhen the delinquency time of an invoice is reached, the order is automatically canceled.\n\nIf the provided value is `null`, the order does not change state.",
            "example": "+P00Y00M07DT00H00M00S",
            "default": null
          },
          "couponIds": {
            "type": [
              "array",
              "null"
            ],
            "description": "List of coupons to redeem on the customer and restrict to this order.\n\nFor more information, see [Coupons](https://www.rebilly.com/docs/settings/coupons-and-discounts/).\n\nThis parameter uses the following logic:\n\n- If this parameter is not supplied, applied coupons are not changed.\n- If an empty array is supplied, all applied coupon redemptions are canceled.\n- If a list of coupons is supplied, unapplied coupons in the list are applied.\n  Coupons that have already been applied do not change state.\n  Applied coupons that are not supplied in list are canceled.\n\nIf the list of applied coupons on a pending order is changed by this parameter during an order update, the invoice for the order is reissued.",
            "writeOnly": true,
            "items": {
              "type": "string",
              "description": "ID of the coupon."
            }
          },
          "riskMetadata": {
            "description": "Risk metadata.\nIf this value is `null`, this field uses risk metadata that is captured when creating the payment token.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "startTime": {
            "description": "Date and time when the subscription starts.\nIf this value is `null`, the current time is used.\nThis value cannot be more than one service period in the past.",
            "type": "string",
            "x-sortable": true,
            "x-basic": true,
            "format": "date-time"
          },
          "activationTime": {
            "description": "Date and time when the order is activated.",
            "x-sortable": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "currency": {
            "description": "Currency of the order.",
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "shipping": {
            "$ref": "#/components/schemas/Shipping"
          },
          "autopay": {
            "description": "Specifies if payment attempts are made automatically.\nIf autopay is enabled, the payment is retrieved from the customer on the renewal date using the payment instrument that is set at `paymentInstrumentId`,\nor the default payment instrument on the order.",
            "type": "boolean",
            "default": true
          },
          "abandonTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date and time when the pending order is automatically abandoned.\nIf this value is not passed during order creation,\na [pending order TTL](https://www.rebilly.com/catalog/all/organizations/patchorganization/#!t=request&path=settings/billing/pendingOrderTtl) setting is used to calculate the value.",
            "format": "date-time"
          },
          "abandonReminderTime": {
            "description": "Date and time when the abandon order reminder event triggers.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "abandonReminderNumber": {
            "description": "Number of abandon order reminder events that are triggered.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true
          },
          "voidTime": {
            "description": "Date and time when the order is voided.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "churnTime": {
            "description": "Date and time when the order is deactivated.",
            "x-sortable": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "cancellationTime": {
            "description": "Date and time when a order is cancelled.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "canceledBy": {
            "description": "Specifies who initiated the cancellation.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "enum": [
              "merchant",
              "customer",
              "rebilly",
              null
            ]
          },
          "cancelCategory": {
            "description": "Category of the cancellation.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "enum": [
              "billing-failure",
              "did-not-use",
              "did-not-want",
              "missing-features",
              "bugs-or-problems",
              "do-not-remember",
              "risk-warning",
              "contract-expired",
              "too-expensive",
              "never-started",
              "switched-plan",
              "other",
              null
            ]
          },
          "cancelDescription": {
            "description": "Description of the cancellation reason in free form.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 255
          },
          "billingPortalToken": {
            "description": "Customer JWT to access a billing portal.\nThis field is presented only if a billing portal exists.\nThis is an experimental field and can be changed or removed in the future.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "mrr": {
            "description": "Monthly recurring revenue of the order.",
            "type": "number",
            "x-type": "Money",
            "x-sortable": true,
            "format": "double",
            "readOnly": true,
            "example": 49.95
          },
          "revision": {
            "description": "Number of times the order data has been modified.\n\nThe revision is useful when analyzing webhook data to determine if the\nchange takes precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "renewalTime": {
            "description": "Date and time when the next subscription in this recurring order renews.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "$ref": "#/components/schemas/Customer"
              },
              "activationInvoice": {
                "$ref": "#/components/schemas/Invoice"
              },
              "recentInvoice": {
                "$ref": "#/components/schemas/Invoice"
              },
              "upcomingInvoice": {
                "$ref": "#/components/schemas/OrderUpcomingInvoice"
              },
              "paymentInstrument": {
                "$ref": "#/components/schemas/PaymentInstrument"
              },
              "website": {
                "$ref": "#/components/schemas/Website"
              }
            }
          }
        }
      },
      "OneTimeOrder": {
        "type": "object",
        "required": [
          "type",
          "customerId",
          "websiteId",
          "items"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the order.",
            "readOnly": true,
            "maxLength": 50,
            "example": "ord_01HVKA5975PJBSQ1SX72G3MSZC"
          },
          "type": {
            "type": "string",
            "description": "Type of the order.",
            "const": "one-time"
          },
          "organizationId": {
            "type": "string",
            "description": "Unique organization identifier.\nAn organization is an entity that represents a company.\nFor more information, see [Obtain an organization ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).",
            "maxLength": 50,
            "readOnly": true,
            "example": "org_0YVDM8RC7GDADADSBSMW124JA8"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "activationInvoiceId": {
            "type": "string",
            "description": "ID of the activation invoice.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "recentInvoiceId": {
            "description": "ID of the most recently issued invoice.\nThe invoice might not be `paid` yet.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "status": {
            "description": "Status of the order.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "voided",
              "completed",
              "abandoned"
            ]
          },
          "items": {
            "type": "array",
            "minItems": 1,
            "description": "Item in the order.",
            "items": {
              "$ref": "#/components/schemas/OneTimeSaleItem"
            }
          },
          "poNumber": {
            "description": "Purchase order number that is displayed on the issued invoices.",
            "type": [
              "string",
              "null"
            ],
            "example": "PO123456"
          },
          "notes": {
            "description": "Notes for the customer that are displayed on the order invoice.",
            "type": "string"
          },
          "billingAddress": {
            "description": "Billing address of the order.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "deliveryAddress": {
            "description": "Delivery address of the order.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "delinquencyPeriod": {
            "type": [
              "string",
              "null"
            ],
            "description": "Length of time, in ISO-8601 durations format,\nwhich is added to the due time of the order when setting the delinquency time for all related invoices.\nWhen the delinquency time of an invoice is reached, the order is automatically canceled.\n\nIf the provided value is `null`, the order does not change state.",
            "example": "+P00Y00M07DT00H00M00S",
            "default": null
          },
          "couponIds": {
            "type": [
              "array",
              "null"
            ],
            "description": "List of coupons to redeem on the customer and restrict to this order.\n\nFor more information, see [Coupons](https://www.rebilly.com/docs/settings/coupons-and-discounts/).\n\nThis parameter uses the following logic:\n\n- If this parameter is not supplied, applied coupons are not changed.\n- If an empty array is supplied, all applied coupon redemptions are canceled.\n- If a list of coupons is supplied, unapplied coupons in the list are applied.\n  Coupons that have already been applied do not change state.\n  Applied coupons that are not supplied in list are canceled.\n\nIf the list of applied coupons on a pending order is changed by this parameter during an order update, the invoice for the order is reissued.",
            "writeOnly": true,
            "items": {
              "type": "string",
              "description": "ID of the coupon."
            }
          },
          "riskMetadata": {
            "description": "Risk metadata.\nIf this value is `null`, this field uses risk metadata that is captured when creating the payment token.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "activationTime": {
            "description": "Date and time when the order is activated.",
            "x-sortable": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "currency": {
            "description": "Currency of the order.",
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "shipping": {
            "$ref": "#/components/schemas/Shipping"
          },
          "abandonTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date and time when the pending order is automatically abandoned.\nIf this value is not passed during order creation,\na [pending order TTL](https://www.rebilly.com/catalog/all/organizations/patchorganization/#!t=request&path=settings/billing/pendingOrderTtl) setting is used to calculate the value.",
            "format": "date-time"
          },
          "abandonReminderTime": {
            "description": "Date and time when the abandon order reminder event triggers.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "abandonReminderNumber": {
            "description": "Number of abandon order reminder events that are triggered.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true
          },
          "voidTime": {
            "description": "Date and time when the order is voided.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "revision": {
            "description": "Number of times the order data has been modified.\n\nThe revision is useful when analyzing webhook data to determine if the\nchange takes precedence over the current representation.",
            "type": "integer",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "$ref": "#/components/schemas/Customer"
              },
              "activationInvoice": {
                "$ref": "#/components/schemas/Invoice"
              },
              "recentInvoice": {
                "$ref": "#/components/schemas/Invoice"
              },
              "upcomingInvoice": {
                "$ref": "#/components/schemas/OrderUpcomingInvoice"
              },
              "paymentInstrument": {
                "$ref": "#/components/schemas/PaymentInstrument"
              },
              "website": {
                "$ref": "#/components/schemas/Website"
              }
            }
          }
        }
      },
      "Order": {
        "type": "object",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "recurring": "#/components/schemas/RecurringOrder",
            "one-time": "#/components/schemas/OneTimeOrder"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/RecurringOrder"
          },
          {
            "$ref": "#/components/schemas/OneTimeOrder"
          }
        ]
      },
      "OrderPause": {
        "type": "object",
        "description": "Order pause details.",
        "required": [
          "orderId"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the order pause.",
            "readOnly": true,
            "maxLength": 50,
            "example": "sub_pau_01H085J3ZR1WKD120D73D7N4C9"
          },
          "orderId": {
            "type": "string",
            "description": "ID of the paused order.",
            "maxLength": 50,
            "example": "ord_01HVKA5975PJBSQ1SX72G3MSZC"
          },
          "status": {
            "description": "Status of the order pause.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "ongoing",
              "revoked",
              "finished"
            ]
          },
          "pausedBy": {
            "description": "Specifies who initiated the pause.",
            "type": "string",
            "default": "customer",
            "enum": [
              "merchant",
              "customer"
            ]
          },
          "description": {
            "description": "Description of the pause reason in free form.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "effectiveTime": {
            "description": "Date and time when the service period pauses.\n\nThis time must be later than the current time.\nIf this time is earlier then the current time, the current time is used.\n\nIf this field is omitted, this value defaults to the current time.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "endTime": {
            "description": "Date and time when the pause ends and the order resumes billing.\n\nTo resume a order from this point in time,\nuse the current time or an earlier time.\nIf `endTime` is earlier then the current time, the current time is used.\nIf this field is empty, the order is indefinitely paused.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "timeRemaining": {
            "description": "Amount of time between the pause end time and the renewal time in ISO-8601 durations format.\nBy default, this value is computed as the time between the pause and the renewal.\n\nExample: A $30 per month subscription on a 30-day month is paused on day 20 of the order.\nThere are 10 unused days on the order.\nTherefore, the order renews in 10 days after it is resumed.\nThe upcoming invoice does not change the amount for the invoiced period, it remains at $30.\nIf the order uses a billing anchor,\nthe renewal time after a pause shift behaves as though the renewal time is moved forward by an [Order API operation](https://www.rebilly.com/catalog/all/orders),\nand the billing anchor is ignored for that period.\n\nFor more information, see [Service period anchor, billing timing, and invoice time shift](https://www.rebilly.com/docs/dev-docs/concepts/#service-period-anchor-and-billing-timing-and-invoice-time-shift).",
            "type": [
              "string",
              "null"
            ],
            "example": "P3600S"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "OrderCancellation": {
        "type": "object",
        "required": [
          "orderId"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the cancellation.",
            "readOnly": true,
            "maxLength": 50,
            "example": "sub_cnl_0YVJ5XVQM9CDP8248ZQX0RDMKV"
          },
          "orderId": {
            "type": "string",
            "description": "ID of the canceled order.",
            "maxLength": 50,
            "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "proratedInvoiceId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the invoice on which the cancellation proration is calculated.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "appliedInvoiceId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the invoice on which the cancellation fees or credits are applied.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "canceledBy": {
            "description": "Specifies who initiated the cancellation.",
            "type": "string",
            "default": "customer",
            "enum": [
              "merchant",
              "customer",
              "rebilly"
            ]
          },
          "reason": {
            "description": "Reason for the cancellation.",
            "type": "string",
            "default": "other",
            "enum": [
              "did-not-use",
              "did-not-want",
              "missing-features",
              "bugs-or-problems",
              "do-not-remember",
              "risk-warning",
              "contract-expired",
              "too-expensive",
              "other",
              "billing-failure"
            ]
          },
          "description": {
            "description": "Description of the cancellation reason in free form.",
            "type": "string",
            "maxLength": 255
          },
          "prorated": {
            "description": "Specifies if the customer gets a pro-rata credit for the time remaining between `churnTime` and order next renewal time.",
            "type": "boolean",
            "default": false
          },
          "status": {
            "description": "Status of the order cancellation.",
            "type": "string",
            "default": "confirmed",
            "enum": [
              "draft",
              "confirmed",
              "completed",
              "revoked"
            ],
            "x-enumDescriptions": {
              "draft": "Creates a draft cancellation so that the cancellation and charge can be previewed.",
              "confirmed": "Confirms an order cancellation.\nSets the order to cancel when the `churnTime` is reached.",
              "completed": "Marks an order cancellation as completed.\nThis is a read-only status that is set when the `churnTime` is reached.\nThe cancellation may not be changed or deleted when the status is `completed`.",
              "revoked": "Revokes an order cancellation."
            }
          },
          "canceledTime": {
            "description": "Date and time when an order is canceled.\nBy default, this occurs when `status` is `confirmed`, unless `draft` is specified.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "churnTime": {
            "description": "Date and time when the order is deactivated.\nIf this field and `churnTimePolicy` are omitted, this value defaults to the current time.",
            "type": "string",
            "format": "date-time"
          },
          "churnTimePolicy": {
            "description": "Specifies when the order is to be deactivated.\nThe `churnTimePolicy` takes precedence over the `churnTime` in request.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              null,
              "now",
              "at-next-renewal"
            ]
          },
          "lineItems": {
            "description": "Items to be added to the new invoice.\nProration item is generated and added automatically.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Invoice line item.",
              "required": [
                "type",
                "unitPriceAmount",
                "unitPriceCurrency",
                "quantity"
              ],
              "properties": {
                "type": {
                  "description": "Type of invoice line item.",
                  "type": "string",
                  "enum": [
                    "debit",
                    "credit"
                  ]
                },
                "description": {
                  "description": "Description of the line item.",
                  "type": "string",
                  "maxLength": 1000
                },
                "unitPriceAmount": {
                  "description": "Unit price of the line item.",
                  "type": "number",
                  "format": "double",
                  "example": 49.95
                },
                "unitPriceCurrency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "quantity": {
                  "description": "Quantity of the line item.",
                  "type": "integer",
                  "example": 1
                },
                "periodStartTime": {
                  "description": "Date and time when the service period begins for this item.",
                  "type": "string",
                  "format": "date-time"
                },
                "periodEndTime": {
                  "description": "Date and time when the service period ends for this item.",
                  "type": "string",
                  "format": "date-time"
                },
                "createdTime": {
                  "$ref": "#/components/schemas/CreatedTime"
                },
                "updatedTime": {
                  "$ref": "#/components/schemas/UpdatedTime"
                }
              }
            }
          },
          "lineItemSubtotal": {
            "description": "Subtotal of the line items added after the order cancellation.",
            "readOnly": true,
            "type": "object",
            "properties": {
              "amount": {
                "type": "number",
                "description": "Subtotal amount of the line items.",
                "example": 49.95
              },
              "currency": {
                "$ref": "#/components/schemas/CurrencyCode"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "OrderReactivation": {
        "type": "object",
        "required": [
          "orderId"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the reactivation.",
            "readOnly": true,
            "maxLength": 50,
            "example": "ord_rct_0YVJ62AF5XCFCA6EBFAAA3Z7E0"
          },
          "orderId": {
            "type": "string",
            "description": "ID of the reactivated order.",
            "maxLength": 50,
            "example": "ord_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "cancellationId": {
            "type": "string",
            "description": "ID of the related cancellation.",
            "readOnly": true,
            "maxLength": 50,
            "example": "sub_cnl_0YVJ5XVQM9CDP8248ZQX0RDMKV"
          },
          "description": {
            "description": "Description of the reactivation reason in free form.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "effectiveTime": {
            "description": "Date and time when the service period starts,\nunless the order is canceled but still active.\n\nIf the order is still active,\nthe order continues for the current service period.\n\nIf this field is omitted, this value defaults to the current time.",
            "type": "string",
            "format": "date-time",
            "writeOnly": true
          },
          "renewalTime": {
            "description": "Date and time of the next order renewal.\nIf this field is omitted, this value is computed from the `effectiveTime` field.\n\nIf the order is canceled but still active,\nit is ignored and the next renewal occurs as scheduled.",
            "type": "string",
            "format": "date-time"
          },
          "paymentInstrumentId": {
            "writeOnly": true,
            "description": "ID of the payment instrument.\nIf this field is omitted, the order payment instrument remains unchanged.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "SubscriptionChange": {
        "type": "object",
        "required": [
          "items",
          "renewalPolicy",
          "prorated"
        ],
        "properties": {
          "items": {
            "description": "Details of items in the order.",
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "description": "New set of items for the subscription.\nTo remove an item, include the items array and exclude the items you want to remove.",
              "required": [
                "plan"
              ],
              "properties": {
                "plan": {
                  "description": "Plan details.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/OriginalPlan"
                    },
                    {
                      "$ref": "#/components/schemas/FlexiblePlan"
                    }
                  ]
                },
                "quantity": {
                  "description": "Number of units of the product on the given plan.",
                  "type": "integer"
                },
                "usageLimits": {
                  "$ref": "#/components/schemas/UsageLimits"
                }
              }
            }
          },
          "renewalPolicy": {
            "description": "Specifies if the subscription retains its current `renewalTime` or resets it to a newly calculated `renewalTime`.",
            "type": "string",
            "enum": [
              "reset",
              "retain"
            ]
          },
          "prorated": {
            "description": "Specifies whether to give a pro rata credit for the amount of time remaining between the `effectiveTime` and the end of the current period.\n\nIn addition, if the `renewalTime` is retained, by setting the `renewalPolicy` to `retain`,\na pro rata debit occurs for the amount between the `effectiveTime` and the `renewalTime` as a percentage of the normal period size.",
            "type": "boolean"
          },
          "effectiveTime": {
            "description": "Date from which the renewal time for `reset` operations and proration calculations are made.\nIf this field is omitted, this value defaults to the current time.",
            "type": "string",
            "format": "date-time"
          },
          "preview": {
            "description": "Specifies if changes to the subscription can be previewed.\nSubscriptions cannot be changed in preview.",
            "type": "boolean",
            "default": false
          },
          "keepTrial": {
            "description": "Specifies if the subscription order must retain its active trial.\nThis field is only applicable if `renewalPolicy` is set to `retain`.",
            "type": "boolean",
            "default": false
          },
          "ignoreRecurring": {
            "description": "Specifies if the subscription order must ignore the recurring settings of items in the order.\nThis field is only applicable if the subscription is trial-only and the `keepTrial` value is `true`.\nFor more information, see [Trial-only subscription](https://www.rebilly.com/docs/dev-docs/subscriptions#trial-only-subscription).",
            "type": "boolean",
            "default": false
          }
        }
      },
      "OrderChange": {
        "type": "object",
        "required": [
          "items",
          "renewalPolicy",
          "prorated"
        ],
        "properties": {
          "items": {
            "description": "Details of items in the order.",
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "description": "New items for the order.\nTo remove an item, include the items array and exclude the items you want to remove.",
              "required": [
                "plan"
              ],
              "properties": {
                "plan": {
                  "description": "Plan details.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/OriginalPlan"
                    },
                    {
                      "$ref": "#/components/schemas/FlexiblePlan"
                    }
                  ]
                },
                "quantity": {
                  "description": "Number of units of the product on the given plan.",
                  "type": "integer"
                },
                "usageLimits": {
                  "$ref": "#/components/schemas/UsageLimits"
                }
              }
            }
          },
          "renewalPolicy": {
            "description": "Specifies if the order retains its current `renewalTime` or resets it to a newly calculated `renewalTime`.",
            "type": "string",
            "enum": [
              "reset",
              "retain"
            ]
          },
          "prorated": {
            "description": "Specifies whether to give a pro rata credit for the amount of time remaining between the `effectiveTime` and the end of the current period.\n\nIn addition, if the `renewalTime` is retained, by setting the `renewalPolicy` to `retain`,\na pro rata debit occurs for the amount between the `effectiveTime` and the `renewalTime` as a percentage of the normal period size.",
            "type": "boolean"
          },
          "effectiveTime": {
            "description": "Date from which the renewal time for `reset` operations and proration calculations are made.\nIf this field is omitted, this value defaults to the current time.",
            "type": "string",
            "format": "date-time"
          },
          "preview": {
            "description": "Specifies if changes to the order can be previewed.\nOrders cannot be changed in preview.",
            "type": "boolean",
            "default": false
          },
          "keepTrial": {
            "description": "Specifies if the order must retain its active trial.\nThis field is only applicable if `renewalPolicy` is set to `retain`.",
            "type": "boolean",
            "default": false
          },
          "ignoreRecurring": {
            "description": "Specifies if the order must ignore the recurring settings of its items.\nThis field is only applicable if the order is trial-only and the `keepTrial` value is `true`.\nFor more information, see [Trial-only order](https://www.rebilly.com/docs/dev-docs/subscriptions#trial-only-subscription).",
            "type": "boolean",
            "default": false
          }
        }
      },
      "OrderItemUpdate": {
        "type": "object",
        "properties": {
          "quantityFilled": {
            "description": "Filled quantity of the subscription item (experimental property).",
            "type": "number",
            "format": "double",
            "example": 5.125
          },
          "excludeFromMrr": {
            "type": "boolean",
            "description": "Specifies if this item should be excluded from monthly recurring revenue calculations."
          },
          "plan": {
            "type": "object",
            "description": "Details of the subscription item plan.",
            "properties": {
              "productOptions": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Name-value pairs that specify the product options.",
                "additionalProperties": {
                  "type": "string"
                },
                "example": {
                  "color": "red",
                  "size": "xxl"
                }
              }
            }
          }
        }
      },
      "SubscriptionInvoice": {
        "type": "object",
        "properties": {
          "transactionId": {
            "description": "If present, applies a payment to the invoice created.\nIf the payment is for the invoice total, it would be marked as paid.",
            "$ref": "#/components/schemas/TransactionId"
          }
        }
      },
      "SubscriptionPause": {
        "type": "object",
        "description": "Subscription pause details.",
        "required": [
          "subscriptionId"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the subscription pause.",
            "readOnly": true,
            "maxLength": 50,
            "example": "sub_pau_01H085J3ZR1WKD120D73D7N4C9"
          },
          "subscriptionId": {
            "type": "string",
            "description": "ID of the paused subscription.",
            "maxLength": 50,
            "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "status": {
            "description": "Status of the subscription pause.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "ongoing",
              "revoked",
              "finished"
            ]
          },
          "pausedBy": {
            "description": "Specifies who initiated the pause.",
            "type": "string",
            "default": "customer",
            "enum": [
              "merchant",
              "customer"
            ]
          },
          "description": {
            "description": "Description of the pause reason in free form.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "effectiveTime": {
            "description": "Date and time when the service period pauses.\n\nThis time must be later than the current time.\nIf this time is earlier then the current time, the current time is used.\n\nIf this field is omitted, this value defaults to the current time.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "endTime": {
            "description": "Date and time when the pause ends and the subscription resumes billing.\n\nTo resume a subscription from this point in time,\nuse the current time or an earlier time.\nIf `endTime` is earlier then the current time, the current time is used.\nIf this field is empty, the subscription is indefinitely paused.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "timeRemaining": {
            "description": "Amount of time between the pause end time and the renewal time in ISO-8601 durations format.\nBy default, this value is computed as the time between the pause and the renewal.\n\nExample: A $30 per month subscription on a 30-day month is paused on day 20 of the subscription.\nThere are 10 unused days on the subscription.\nTherefore, the subscription renews in 10 days after it is resumed.\nThe upcoming invoice does not change the amount for the invoiced period, it remains at $30.\nIf the subscription uses a billing anchor,\nthe renewal time after a pause shift behaves as though the renewal time is moved forward by an [Order API operation](https://www.rebilly.com/catalog/all/orders),\nand the billing anchor is ignored for that period.\n\nFor more information, see [Service period anchor, billing timing, and invoice time shift](https://www.rebilly.com/docs/dev-docs/concepts/#service-period-anchor-and-billing-timing-and-invoice-time-shift).",
            "type": [
              "string",
              "null"
            ],
            "example": "P3600S"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "SubscriptionCancellation": {
        "type": "object",
        "required": [
          "subscriptionId"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the cancellation.",
            "readOnly": true,
            "maxLength": 50,
            "example": "sub_cnl_0YVJ5XVQM9CDP8248ZQX0RDMKV"
          },
          "subscriptionId": {
            "type": "string",
            "description": "ID of the canceled subscription order.",
            "maxLength": 50,
            "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "proratedInvoiceId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the invoice on which the cancellation proration is calculated.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "appliedInvoiceId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the invoice on which the cancellation fees or credits are applied.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "canceledBy": {
            "description": "Specifies who initiated the cancellation.",
            "type": "string",
            "default": "customer",
            "enum": [
              "merchant",
              "customer",
              "rebilly"
            ]
          },
          "reason": {
            "description": "Reason for the cancellation.",
            "type": "string",
            "default": "other",
            "enum": [
              "did-not-use",
              "did-not-want",
              "missing-features",
              "bugs-or-problems",
              "do-not-remember",
              "risk-warning",
              "contract-expired",
              "too-expensive",
              "other",
              "billing-failure"
            ]
          },
          "description": {
            "description": "Description of the cancellation reason in free form.",
            "type": "string",
            "maxLength": 255
          },
          "prorated": {
            "description": "Specifies if the customer gets a pro-rata credit for the time remaining between `churnTime` and subscription next renewal time.",
            "type": "boolean",
            "default": false
          },
          "status": {
            "description": "Status of the subscription order.",
            "type": "string",
            "default": "confirmed",
            "enum": [
              "draft",
              "confirmed",
              "completed",
              "revoked"
            ],
            "x-enumDescriptions": {
              "draft": "Creates a daft cancellation so that the cancellation and charge can be previewed.",
              "confirmed": "Confirms a subscription cancellation.\nSets the subscription to cancel when the `churnTime` is reached.",
              "completed": "Marks a subscription cancellation as completed.\nThis is a read-only status that is set when the `churnTime` is reached.\nThe cancellation may not be changed or deleted when the status is `completed`.",
              "revoked": "Revokes a subscription cancellation."
            }
          },
          "canceledTime": {
            "description": "Date and time when a subscription is cancelled.\nBy default, this occurs when `status` is `confirmed`, unless `draft` is specified.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "churnTime": {
            "description": "Date and time when the subscription is deactivated.\nIf this field and `churnTimePolicy` are omitted, this value defaults to the current time.",
            "type": "string",
            "format": "date-time"
          },
          "churnTimePolicy": {
            "description": "Specifies when the subscription is to be deactivated.\nThe `churnTimePolicy` takes precedence over the `churnTime` in request.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "null",
              "now",
              "at-next-renewal"
            ]
          },
          "lineItems": {
            "description": "Items to be added to the new invoice.\nProration item is generated and added automatically.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Invoice line item.",
              "required": [
                "type",
                "unitPriceAmount",
                "unitPriceCurrency",
                "quantity"
              ],
              "properties": {
                "type": {
                  "description": "Type of invoice line item.",
                  "type": "string",
                  "enum": [
                    "debit",
                    "credit"
                  ]
                },
                "description": {
                  "description": "Description of the line item.",
                  "type": "string",
                  "maxLength": 1000
                },
                "unitPriceAmount": {
                  "description": "Unit price of the line item.",
                  "type": "number",
                  "format": "double",
                  "example": 49.95
                },
                "unitPriceCurrency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "quantity": {
                  "description": "Quantity of the line item.",
                  "type": "integer",
                  "example": 1
                },
                "periodStartTime": {
                  "description": "Date and time when the period begins for this item.",
                  "type": "string",
                  "format": "date-time"
                },
                "periodEndTime": {
                  "description": "Date and time when the period ends for this item.",
                  "type": "string",
                  "format": "date-time"
                },
                "createdTime": {
                  "$ref": "#/components/schemas/CreatedTime"
                },
                "updatedTime": {
                  "$ref": "#/components/schemas/UpdatedTime"
                }
              }
            }
          },
          "lineItemSubtotal": {
            "description": "Subtotal of the line items added after the subscription cancellation.",
            "readOnly": true,
            "type": "object",
            "properties": {
              "amount": {
                "type": "number",
                "description": "Subtotal amount of the line items.",
                "example": 49.95
              },
              "currency": {
                "$ref": "#/components/schemas/CurrencyCode"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "SubscriptionReactivation": {
        "type": "object",
        "required": [
          "subscriptionId"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the reactivation.",
            "readOnly": true,
            "maxLength": 50,
            "example": "sub_rct_0YVJ62AF5XCFCA6EBFAAA3Z7E0"
          },
          "subscriptionId": {
            "type": "string",
            "description": "ID of the reactivated subscription.",
            "maxLength": 50,
            "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "cancellationId": {
            "type": "string",
            "description": "ID of the related cancellation.",
            "readOnly": true,
            "maxLength": 50,
            "example": "sub_cnl_0YVJ5XVQM9CDP8248ZQX0RDMKV"
          },
          "description": {
            "description": "Description of the reactivation reason in free form.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "effectiveTime": {
            "description": "Date and time when the service period starts,\nunless the subscription is canceled but still active.\n\nIf the subscription is still active,\nthe subscription continues for the current service period.\n\nIf this field is omitted, this value defaults to the current time.",
            "type": "string",
            "format": "date-time",
            "writeOnly": true
          },
          "renewalTime": {
            "description": "Date and time of the next subscription renewal.\nIf this field is omitted, this value is computed from the `effectiveTime` field.\n\nIf the subscription is canceled but still active,\nit is ignored and the next renewal occurs as scheduled.",
            "type": "string",
            "format": "date-time"
          },
          "paymentInstrumentId": {
            "writeOnly": true,
            "description": "ID of the payment instrument.\nIf this field is omitted, the subscription payment instrument remains unchanged.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "UpcomingInvoiceItem": {
        "type": "object",
        "readOnly": true,
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the upcoming invoice item.",
            "maxLength": 50,
            "example": "ii_0YVFDEQS2KCFTBN9HXWJFY55GV"
          },
          "isInterim": {
            "description": "Specifies if the line item is added to an interim invoice.",
            "type": "boolean"
          },
          "description": {
            "description": "Description of the upcoming invoice item.",
            "type": "string",
            "maxLength": 1000
          },
          "unitPrice": {
            "description": "Unit price of the upcoming invoice item.",
            "type": "number",
            "format": "double"
          },
          "quantity": {
            "description": "Quantity of the upcoming invoice item.",
            "type": "integer"
          },
          "price": {
            "description": "Total price of the upcoming invoice item.",
            "type": "number",
            "format": "double"
          },
          "productId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the product.",
            "maxLength": 50,
            "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
          },
          "planId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the plan.",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
          },
          "subscriptionId": {
            "type": "string",
            "description": "ID of the order.",
            "maxLength": 50,
            "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "periodStartTime": {
            "description": "Date and time when the billing period starts.",
            "type": "string",
            "format": "date-time"
          },
          "periodEndTime": {
            "description": "Date and time when the billing period ends.",
            "type": "string",
            "format": "date-time"
          },
          "periodNumber": {
            "description": "Billing period number that is associated with the invoice item.\nFor example, an invoice item for a service is included in billing period number 3.\nThe invoice item is only applied to billing period number 3.",
            "type": "integer"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "tax": {
            "description": "Invoice item tax.",
            "$ref": "#/components/schemas/TaxItem"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "product",
                    "plan",
                    "subscription"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "properties": {
              "product": {
                "type": "object"
              },
              "plan": {
                "type": "object"
              }
            }
          }
        }
      },
      "UpcomingInvoice": {
        "type": "object",
        "readOnly": true,
        "properties": {
          "id": {
            "description": "ID of the upcoming invoice, which is persisted in the future renewal invoice.",
            "type": "string",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "subscriptionId": {
            "description": "ID of the related subscription order.",
            "type": "string",
            "readOnly": true,
            "maxLength": 50,
            "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "currency": {
            "x-sortable": true,
            "x-basic": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "customerId": {
            "x-basic": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/CustomerId"
              }
            ]
          },
          "revision": {
            "description": "Number of times the upcoming invoice data has changed.\n\nUse the revision number when analyzing webhook data to\ndetermine if a change should take precedence over the current\nrepresentation.",
            "type": "integer"
          },
          "organizationId": {
            "allOf": [
              {
                "$ref": "#/components/schemas/OrganizationId"
              }
            ]
          },
          "items": {
            "type": "array",
            "description": "Upcoming invoice items array.",
            "items": {
              "$ref": "#/components/schemas/UpcomingInvoiceItem"
            }
          },
          "amount": {
            "description": "Amount of the invoice.",
            "type": "number",
            "x-type": "Money",
            "x-sortable": true,
            "x-basic": true,
            "format": "double",
            "readOnly": true
          },
          "amountDue": {
            "description": "Amount that is due on the invoice.",
            "type": "number",
            "x-type": "Money",
            "x-sortable": true,
            "format": "double",
            "readOnly": true
          },
          "subtotalAmount": {
            "description": "Subtotal amount of the invoice.",
            "type": "number",
            "x-type": "Money",
            "format": "double",
            "readOnly": true
          },
          "discountAmount": {
            "description": "Discount amount that is applied to the invoice.",
            "type": "number",
            "x-type": "Money",
            "format": "double",
            "readOnly": true
          },
          "shipping": {
            "$ref": "#/components/schemas/Shipping"
          },
          "tax": {
            "$ref": "#/components/schemas/Taxes"
          },
          "billingAddress": {
            "description": "Billing address of the invoice.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "deliveryAddress": {
            "description": "Delivery address of the invoice.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "poNumber": {
            "description": "Purchase order number that is displayed on the invoice.",
            "type": [
              "string",
              "null"
            ],
            "example": "PO123456"
          },
          "notes": {
            "description": "Notes for the customer that are displayed on the invoice.",
            "type": "string"
          },
          "discounts": {
            "type": "array",
            "description": "Discounts applied.",
            "readOnly": true,
            "items": {
              "type": "object",
              "readOnly": true,
              "properties": {
                "couponId": {
                  "type": "string",
                  "description": "ID of the coupon.",
                  "maxLength": 50,
                  "example": "cpn_0YVCNKF81GD778N4YNVGDJK558"
                },
                "redemptionId": {
                  "description": "ID of the redemption.",
                  "$ref": "#/components/schemas/ResourceId"
                },
                "amount": {
                  "description": "Total amount discounted by this coupon.",
                  "type": "number",
                  "format": "double"
                },
                "description": {
                  "type": "string",
                  "description": "Description of the discount."
                },
                "context": {
                  "$ref": "#/components/schemas/DiscountContext"
                }
              }
            }
          },
          "dueTime": {
            "description": "Date and time when the invoice is due for payment.",
            "type": "string",
            "x-sortable": true,
            "format": "date-time"
          },
          "issuedTime": {
            "description": "Date and time when the invoice is issued.",
            "x-label": "Date Issued",
            "x-sortable": true,
            "x-basic": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "website",
                    "customer",
                    "organization",
                    "subscription",
                    "attachments",
                    "leadSource"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "properties": {
              "customer": {
                "type": "object"
              },
              "website": {
                "type": "object"
              },
              "organization": {
                "type": "object"
              },
              "leadSource": {
                "type": "object"
              }
            }
          }
        }
      },
      "OrderTimeline": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the timeline message.",
            "readOnly": true,
            "maxLength": 50,
            "example": "tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC"
          },
          "type": {
            "description": "Type of timeline message.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "coupon-applied",
              "email-message-sent",
              "invoice-abandoned",
              "invoice-disputed",
              "invoice-issued",
              "invoice-paid",
              "invoice-partially-paid",
              "invoice-partially-refunded",
              "invoice-past-due",
              "invoice-refunded",
              "invoice-reissued",
              "invoice-renewal-payment-declined",
              "invoice-voided",
              "order-activated",
              "order-autopay-changed",
              "order-billing-address-changed",
              "order-billing-anchor-changed",
              "order-canceled",
              "order-churned",
              "order-completed",
              "order-custom-fields-changed",
              "order-delivery-address-changed",
              "order-downgraded",
              "order-items-changed",
              "order-paid-early",
              "order-quantity-changed",
              "order-reactivated",
              "order-recurring-interval-changed",
              "order-renewal-time-changed",
              "order-renewed",
              "order-risk-metadata-changed",
              "order-trial-ended",
              "order-upgraded",
              "order-voided",
              "order-abandoned",
              "quote-accepted",
              "subscription-paused",
              "subscription-pause-created",
              "subscription-pause-modified",
              "subscription-pause-revoked",
              "subscription-resumed",
              "subscription-trial-end-changed",
              "timeline-comment-created"
            ]
          },
          "triggeredBy": {
            "description": "Specifies who, or what, triggered the timeline event.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "rebilly",
              "app",
              "direct-api"
            ]
          },
          "message": {
            "description": "Contents of the timeline message.",
            "type": "string"
          },
          "extraData": {
            "$ref": "#/components/schemas/TimelineExtraData"
          },
          "occurredTime": {
            "description": "Date and time when the timeline message occurred.",
            "readOnly": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "Usage": {
        "type": "object",
        "required": [
          "subscriptionId",
          "quantity"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the usage record.",
            "maxLength": 50,
            "example": "sub_usg_0YVJ636B95DNA9M3B1638HXBCQ"
          },
          "subscriptionId": {
            "type": "string",
            "description": "Subscription ID for which the usage is reported.",
            "maxLength": 50,
            "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
          },
          "invoiceId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the invoice to which usage is applied.\nThis value is populated when the invoice is issued.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "invoiceItemId": {
            "description": "ID of the invoice item to which usage is applied.\nThis value is populated when the invoice is issued.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "ii_0YVFDEQS2KCFTBN9HXWJFY55GV"
          },
          "quantity": {
            "description": "Quantity of consumed units for a subscription plan product.\nRepresents the actual usage of a billable product or service by the customer.\nAccepts both integer and decimal values with a precision of up to 3 decimal places.\nThe minimum billable unit is 0.001.",
            "type": "number",
            "format": "double",
            "minimum": 0.001,
            "example": 5.125
          },
          "usageTime": {
            "description": "Date and time, in ISO 8601 format, when a usage occurred.\nIf this value is not provided or is empty, the date and time of the request is used.",
            "type": "string",
            "format": "date-time"
          },
          "acceptPartialQuantity": {
            "description": "Specifies whether partial usage should be accepted if the reported quantity exceeds the available limit.\n\nWhen set to `true`, the system automatically adjusts the reported quantity to the maximum allowed limit and reports the usage.\nWhen set to `false`, the system rejects the request if the reported quantity exceeds the limit.",
            "type": "boolean",
            "writeOnly": true,
            "default": false,
            "example": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "PaymentCardToken": {
        "type": "object",
        "title": "Payment card token",
        "description": "Creates a payment card token.\nA payment card token is a string that represents a customer's payment card details.\nIt can be used once, and expires upon first use or within 30 minutes of token creation.\nTo generate a full payment card token, you must provide the `billingAddress`.\nIf `billingAddress` is not provided, the token can not be used for payments.",
        "required": [
          "method",
          "paymentInstrument"
        ],
        "properties": {
          "method": {
            "description": "Payment method of the token.",
            "type": "string",
            "enum": [
              "payment-card"
            ]
          },
          "paymentInstrument": {
            "description": "Payment card instrument details.",
            "type": "object",
            "required": [
              "expMonth",
              "expYear"
            ],
            "properties": {
              "pan": {
                "description": "Primary Account Number (PAN) of the payment card.\nThis value is required to perform a payment.",
                "type": "string",
                "writeOnly": true
              },
              "cvv": {
                "description": "Card Verification Value (CVV/CVC) of the payment card.\nTakes precedence over `encryptedCvv` if both are included.",
                "type": "string",
                "writeOnly": true
              },
              "encryptedCvv": {
                "description": "Encrypted CVV of the payment card.\nUse to update a payment card with a CVV stored on the client side.\nThis value is returned for client side caching if `cvv` is provided in the request.",
                "type": [
                  "string",
                  "null"
                ],
                "minLength": 100,
                "maxLength": 255
              },
              "expMonth": {
                "description": "Expiration month of the payment card.",
                "type": "integer"
              },
              "expYear": {
                "description": "Expiration year of the payment card.",
                "type": "integer"
              },
              "bin": {
                "description": "Bank Identification Number (BIN) of the payment card.\nThis value is the first 6 digits of the payment card number.",
                "type": [
                  "string",
                  "null"
                ],
                "format": "bin",
                "readOnly": true
              },
              "last4": {
                "description": "Last 4 digits of the Primary Account Number (PAN) of the payment card.",
                "type": [
                  "string",
                  "null"
                ],
                "readOnly": true
              },
              "brand": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PaymentCardBrand"
                  }
                ]
              }
            }
          },
          "billingAddress": {
            "description": "Billing address object.\nThis value is required to perform payments.\nFor payment-card updates, `billingAddress` can be ignored.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "id": {
            "description": "ID of the token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "isUsed": {
            "description": "Specifies if the token has been used.",
            "type": "boolean",
            "default": false,
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "leadSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LeadSource"
              }
            ],
            "writeOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "usageTime": {
            "description": "Date and time when the token is used.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "expirationTime": {
            "description": "Date and time when the token expired.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "PayPalToken": {
        "type": "object",
        "title": "PayPal token",
        "required": [
          "method",
          "paymentInstrument"
        ],
        "properties": {
          "method": {
            "description": "Payment method of the token.",
            "type": "string",
            "enum": [
              "paypal"
            ]
          },
          "paymentInstrument": {
            "description": "Paypal instrument details required for express checkout.",
            "type": "object",
            "required": [
              "billingAgreementToken",
              "paypalMerchantId"
            ],
            "properties": {
              "paypalMerchantId": {
                "description": "ID of the PayPal merchant.",
                "type": "string"
              },
              "billingAgreementToken": {
                "description": "PayPal billing agreement token.",
                "type": "string"
              }
            }
          },
          "billingAddress": {
            "description": "Billing address object.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "id": {
            "description": "ID of the token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "isUsed": {
            "description": "Specifies if the token is already used.",
            "type": "boolean",
            "default": false,
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "leadSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LeadSource"
              }
            ],
            "writeOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "usageTime": {
            "description": "Date and time when the token is used.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "expirationTime": {
            "description": "Date and time when the token expires.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "BBANInstrument": {
        "description": "Bank account BBAN instrument.",
        "type": "object",
        "required": [
          "accountNumberType",
          "accountNumber",
          "routingNumber",
          "accountType"
        ],
        "properties": {
          "accountNumberType": {
            "description": "Bank account number type.\nA valid value is basic bank account number (BBAN) or international bank account number (IBAN).",
            "type": "string",
            "enum": [
              "BBAN"
            ]
          },
          "accountNumber": {
            "description": "Customer's bank account number.",
            "type": "string",
            "pattern": "^[0-9]+$",
            "writeOnly": true
          },
          "routingNumber": {
            "description": "Bank routing number.",
            "type": "string",
            "pattern": "^[0-9]+$"
          },
          "accountType": {
            "description": "Bank account type.",
            "type": "string",
            "enum": [
              "checking",
              "savings",
              "other"
            ]
          },
          "bic": {
            "description": "Bank Identifier Code (BIC).",
            "type": "string"
          },
          "bankName": {
            "description": "Bank name.",
            "type": "string"
          },
          "last4": {
            "description": "Last 4 digits of the bank account number.",
            "type": "string",
            "readOnly": true
          }
        }
      },
      "IBANInstrument": {
        "description": "Bank account IBAN instrument.",
        "type": "object",
        "required": [
          "accountNumberType",
          "accountNumber"
        ],
        "properties": {
          "accountNumberType": {
            "description": "Bank account number type.\nA valid value is basic bank account number (BBAN) or international bank account number (IBAN).",
            "type": "string",
            "enum": [
              "IBAN"
            ]
          },
          "accountNumber": {
            "description": "Bank account number.\nDetailed information about all ISO 13616-compliant national IBAN formats is available in the [SWIFT IBAN Registry](https://www.swift.com/standards/data-standards/iban).",
            "type": "string",
            "writeOnly": true
          },
          "bic": {
            "description": "Bank Identifier Code (BIC).",
            "type": "string"
          },
          "bankName": {
            "description": "Bank name.",
            "type": "string"
          },
          "last4": {
            "description": "Last 4 digits of the bank account number.",
            "type": "string",
            "readOnly": true
          }
        }
      },
      "BankAccountInstrument": {
        "type": "object",
        "description": "Bank account BBAN or IBAN instrument.",
        "discriminator": {
          "propertyName": "accountNumberType",
          "mapping": {
            "BBAN": "#/components/schemas/BBANInstrument",
            "IBAN": "#/components/schemas/IBANInstrument"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/BBANInstrument"
          },
          {
            "$ref": "#/components/schemas/IBANInstrument"
          }
        ]
      },
      "BankAccountToken": {
        "type": "object",
        "title": "Bank account token",
        "required": [
          "method",
          "paymentInstrument",
          "billingAddress"
        ],
        "properties": {
          "method": {
            "description": "Payment method of the token.",
            "type": "string",
            "enum": [
              "ach",
              "echeck"
            ]
          },
          "paymentInstrument": {
            "$ref": "#/components/schemas/BankAccountInstrument"
          },
          "billingAddress": {
            "description": "Billing address object.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "id": {
            "description": "ID of the token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "isUsed": {
            "description": "Specifies if the token is already used.",
            "type": "boolean",
            "default": false,
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "leadSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LeadSource"
              }
            ],
            "writeOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "usageTime": {
            "description": "Date and time when the token is used.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "expirationTime": {
            "description": "Date and time when the token expired.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "DigitalWalletToken": {
        "type": "object",
        "title": "Digital wallet token",
        "required": [
          "method",
          "paymentInstrument"
        ],
        "properties": {
          "method": {
            "description": "Payment method of the token.",
            "type": "string",
            "enum": [
              "digital-wallet"
            ]
          },
          "paymentInstrument": {
            "description": "Payment instrument details.",
            "type": "object",
            "required": [
              "type",
              "amount",
              "currency",
              "descriptor",
              "payload"
            ],
            "properties": {
              "type": {
                "description": "Type of digital wallet.",
                "type": "string",
                "enum": [
                  "Apple Pay",
                  "Google Pay",
                  "Samsung Pay"
                ]
              },
              "amount": {
                "description": "Authorized for the digital wallet amount.",
                "type": "number",
                "format": "double"
              },
              "currency": {
                "description": "Authorized for the digital wallet currency.",
                "$ref": "#/components/schemas/CurrencyCode"
              },
              "descriptor": {
                "description": "Descriptor for a payment.",
                "type": "string"
              },
              "bin": {
                "description": "Bank Identification Number (BIN) of the payment card.\nThis value is the same as the first 6 digits of the associated Primary Account Number (PAN).",
                "type": [
                  "string",
                  "null"
                ],
                "format": "bin",
                "readOnly": true
              },
              "last4": {
                "description": "Last 4 digits of the Primary Account Number (PAN) of the payment card.",
                "type": "string",
                "readOnly": true
              },
              "brand": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PaymentCardBrand"
                  }
                ]
              },
              "expMonth": {
                "readOnly": true,
                "description": "Payment card expiration month.",
                "type": "integer"
              },
              "expYear": {
                "readOnly": true,
                "description": "Payment card expiration year.",
                "type": "integer"
              },
              "payload": {
                "writeOnly": true,
                "description": "Digital wallet encoded data.\nThis field may contain the digital wallet billing address.",
                "type": "object"
              }
            }
          },
          "billingAddress": {
            "readOnly": true,
            "description": "Billing address object.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "id": {
            "description": "ID of the token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "isUsed": {
            "description": "Specifies if the token is already used.",
            "type": "boolean",
            "default": false,
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "leadSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LeadSource"
              }
            ],
            "writeOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "usageTime": {
            "description": "Date and time when the token is used.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "expirationTime": {
            "description": "Date and time when the token expired.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "PlaidAccountToken": {
        "type": "object",
        "title": "Plaid account token",
        "required": [
          "method",
          "billingAddress",
          "paymentInstrument"
        ],
        "properties": {
          "method": {
            "description": "Payment method of the token.",
            "type": "string",
            "enum": [
              "plaid-account"
            ]
          },
          "paymentInstrument": {
            "description": "Plaid payment instrument details.",
            "type": "object",
            "required": [
              "linkToken",
              "publicToken",
              "accountId"
            ],
            "properties": {
              "linkToken": {
                "type": "string",
                "description": "Plaid link token.",
                "writeOnly": true
              },
              "publicToken": {
                "type": "string",
                "description": "Plaid public token."
              },
              "accountId": {
                "type": "string",
                "description": "ID of the Plaid account."
              }
            }
          },
          "billingAddress": {
            "description": "Billing address object.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "id": {
            "description": "ID of the token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "isUsed": {
            "description": "Specifies if the token is already used.",
            "type": "boolean",
            "default": false,
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "leadSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LeadSource"
              }
            ],
            "writeOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "usageTime": {
            "description": "Date and time when the token is used.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "expirationTime": {
            "description": "Date and time when the token expired.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "KhelocardCardToken": {
        "type": "object",
        "title": "Khelocard card token",
        "required": [
          "method",
          "billingAddress",
          "paymentInstrument"
        ],
        "properties": {
          "method": {
            "description": "Payment method of the token.",
            "type": "string",
            "enum": [
              "Khelocard"
            ]
          },
          "paymentInstrument": {
            "description": "Token instrument details.",
            "type": "object",
            "required": [
              "number",
              "cvv",
              "expYear",
              "expMonth"
            ],
            "properties": {
              "number": {
                "description": "Khelocard card number.",
                "type": "string",
                "writeOnly": true
              },
              "cvv": {
                "description": "Khelocard Card Verification Value (CVV).",
                "type": "string",
                "writeOnly": true
              },
              "last4": {
                "description": "Last 4 digits of the Khelocard card number.",
                "type": "string",
                "readOnly": true
              },
              "expMonth": {
                "description": "Khelocard card expiration month.",
                "type": "integer"
              },
              "expYear": {
                "description": "Khelocard card expiration year.",
                "type": "integer"
              }
            }
          },
          "billingAddress": {
            "description": "Billing address object.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "id": {
            "description": "ID of the token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "isUsed": {
            "description": "Specifies if the token is already used.",
            "type": "boolean",
            "default": false,
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "leadSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LeadSource"
              }
            ],
            "writeOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "usageTime": {
            "description": "Date and time when the token is used.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "expirationTime": {
            "description": "Date and time when the token expired.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "KlarnaToken": {
        "type": "object",
        "title": "Klarna token",
        "required": [
          "method",
          "paymentInstrument"
        ],
        "properties": {
          "method": {
            "description": "Payment method of the token.",
            "type": "string",
            "enum": [
              "Klarna"
            ]
          },
          "paymentInstrument": {
            "description": "Klarna instrument details required for express checkout.",
            "type": "object",
            "required": [
              "klarnaAuthorizationToken",
              "klarnaSessionId"
            ],
            "properties": {
              "klarnaAuthorizationToken": {
                "description": "Klarna authorization token.",
                "type": "string"
              },
              "klarnaSessionId": {
                "description": "ID of the Klarna session.",
                "type": "string"
              }
            }
          },
          "billingAddress": {
            "description": "Billing address object.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "id": {
            "description": "ID of the token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "isUsed": {
            "description": "Specifies if the token is already used.",
            "type": "boolean",
            "default": false,
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "leadSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LeadSource"
              }
            ],
            "writeOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "usageTime": {
            "description": "Date and time when the token is used.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "expirationTime": {
            "description": "Date and time when the token expired.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "AlternativePaymentToken": {
        "type": "object",
        "title": "Alternative payment token",
        "required": [
          "method",
          "billingAddress"
        ],
        "properties": {
          "method": {
            "description": "Payment method of the token.",
            "type": "string",
            "allOf": [
              {
                "$ref": "#/components/schemas/AlternativePaymentMethods"
              },
              {
                "not": {
                  "enum": [
                    "payment-card",
                    "paypal",
                    "ach",
                    "echeck",
                    "digital-wallet",
                    "plaid-account",
                    "Khelocard",
                    "Klarna",
                    "cryptocurrency"
                  ]
                }
              }
            ]
          },
          "billingAddress": {
            "description": "Billing address object.",
            "$ref": "#/components/schemas/ContactObject"
          },
          "id": {
            "description": "ID of the token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "isUsed": {
            "description": "Specifies if the token is already used.",
            "type": "boolean",
            "default": false,
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "leadSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LeadSource"
              }
            ],
            "writeOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "usageTime": {
            "description": "Date and time when the token is used.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "expirationTime": {
            "description": "Date and time when the token expired.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "CryptocurrencyToken": {
        "type": "object",
        "title": "Cryptocurrency token",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "description": "Payment method of the token.",
            "type": "string",
            "enum": [
              "cryptocurrency"
            ]
          },
          "walletName": {
            "description": "Name of the crypto wallet.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "walletAddress": {
            "description": "Address of the crypto wallet.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "billingAddress": {
            "description": "Billing address object.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "id": {
            "description": "ID of the token.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "isUsed": {
            "description": "Specifies if the token is already used.",
            "type": "boolean",
            "default": false,
            "readOnly": true
          },
          "riskMetadata": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/RiskMetadata"
              },
              {
                "type": "null"
              }
            ]
          },
          "leadSource": {
            "allOf": [
              {
                "$ref": "#/components/schemas/LeadSource"
              }
            ],
            "writeOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "usageTime": {
            "description": "Date and time when the token is used.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "expirationTime": {
            "description": "Date and time when the token expired.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "CompositeToken": {
        "type": "object",
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "payment-card": "#/components/schemas/PaymentCardToken",
            "paypal": "#/components/schemas/PayPalToken",
            "ach": "#/components/schemas/BankAccountToken",
            "echeck": "#/components/schemas/BankAccountToken",
            "digital-wallet": "#/components/schemas/DigitalWalletToken",
            "plaid-account": "#/components/schemas/PlaidAccountToken",
            "Khelocard": "#/components/schemas/KhelocardCardToken",
            "Klarna": "#/components/schemas/KlarnaToken",
            "cash": "#/components/schemas/AlternativePaymentToken",
            "check": "#/components/schemas/AlternativePaymentToken",
            "AdvCash": "#/components/schemas/AlternativePaymentToken",
            "Alfa-click": "#/components/schemas/AlternativePaymentToken",
            "Alipay": "#/components/schemas/AlternativePaymentToken",
            "AstroPay Card": "#/components/schemas/AlternativePaymentToken",
            "AstroPay-GO": "#/components/schemas/AlternativePaymentToken",
            "BankReferenced": "#/components/schemas/AlternativePaymentToken",
            "bank-transfer": "#/components/schemas/AlternativePaymentToken",
            "bank-transfer-2": "#/components/schemas/AlternativePaymentToken",
            "bank-transfer-3": "#/components/schemas/AlternativePaymentToken",
            "bank-transfer-4": "#/components/schemas/AlternativePaymentToken",
            "bank-transfer-5": "#/components/schemas/AlternativePaymentToken",
            "bank-transfer-6": "#/components/schemas/AlternativePaymentToken",
            "bank-transfer-7": "#/components/schemas/AlternativePaymentToken",
            "bank-transfer-8": "#/components/schemas/AlternativePaymentToken",
            "bank-transfer-9": "#/components/schemas/AlternativePaymentToken",
            "Baloto": "#/components/schemas/AlternativePaymentToken",
            "Beeline": "#/components/schemas/AlternativePaymentToken",
            "Belfius-direct-net": "#/components/schemas/AlternativePaymentToken",
            "bitcoin": "#/components/schemas/AlternativePaymentToken",
            "Bizum": "#/components/schemas/AlternativePaymentToken",
            "Boleto": "#/components/schemas/AlternativePaymentToken",
            "cash-deposit": "#/components/schemas/AlternativePaymentToken",
            "CASHlib": "#/components/schemas/AlternativePaymentToken",
            "CashToCode": "#/components/schemas/AlternativePaymentToken",
            "China UnionPay": "#/components/schemas/AlternativePaymentToken",
            "Cleo": "#/components/schemas/AlternativePaymentToken",
            "CODVoucher": "#/components/schemas/AlternativePaymentToken",
            "Conekta-oxxo": "#/components/schemas/AlternativePaymentToken",
            "Cupon-de-pagos": "#/components/schemas/AlternativePaymentToken",
            "cryptocurrency": "#/components/schemas/CryptocurrencyToken",
            "domestic-cards": "#/components/schemas/AlternativePaymentToken",
            "ecoPayz": "#/components/schemas/AlternativePaymentToken",
            "ecoVoucher": "#/components/schemas/AlternativePaymentToken",
            "Efecty": "#/components/schemas/AlternativePaymentToken",
            "EPS": "#/components/schemas/AlternativePaymentToken",
            "ePay.bg": "#/components/schemas/AlternativePaymentToken",
            "eZeeWallet": "#/components/schemas/AlternativePaymentToken",
            "FasterPay": "#/components/schemas/AlternativePaymentToken",
            "Flexepin": "#/components/schemas/AlternativePaymentToken",
            "Giropay": "#/components/schemas/AlternativePaymentToken",
            "Gpaysafe": "#/components/schemas/AlternativePaymentToken",
            "Google Pay": "#/components/schemas/AlternativePaymentToken",
            "iDebit": "#/components/schemas/AlternativePaymentToken",
            "iDEAL": "#/components/schemas/AlternativePaymentToken",
            "ING-homepay": "#/components/schemas/AlternativePaymentToken",
            "INOVAPAY-pin": "#/components/schemas/AlternativePaymentToken",
            "INOVAPAY-wallet": "#/components/schemas/AlternativePaymentToken",
            "InstaDebit": "#/components/schemas/AlternativePaymentToken",
            "instant-bank-transfer": "#/components/schemas/AlternativePaymentToken",
            "InstantPayments": "#/components/schemas/AlternativePaymentToken",
            "Interac": "#/components/schemas/AlternativePaymentToken",
            "Interac-online": "#/components/schemas/AlternativePaymentToken",
            "Interac-eTransfer": "#/components/schemas/AlternativePaymentToken",
            "invoice": "#/components/schemas/AlternativePaymentToken",
            "iWallet": "#/components/schemas/AlternativePaymentToken",
            "Jeton": "#/components/schemas/AlternativePaymentToken",
            "jpay": "#/components/schemas/AlternativePaymentToken",
            "KNOT": "#/components/schemas/AlternativePaymentToken",
            "loonie": "#/components/schemas/AlternativePaymentToken",
            "Matrix": "#/components/schemas/AlternativePaymentToken",
            "MaxiCash": "#/components/schemas/AlternativePaymentToken",
            "Megafon": "#/components/schemas/AlternativePaymentToken",
            "MiFinity-eWallet": "#/components/schemas/AlternativePaymentToken",
            "miscellaneous": "#/components/schemas/AlternativePaymentToken",
            "Bancontact": "#/components/schemas/AlternativePaymentToken",
            "Bancontact-mobile": "#/components/schemas/AlternativePaymentToken",
            "MTS": "#/components/schemas/AlternativePaymentToken",
            "MuchBetter": "#/components/schemas/AlternativePaymentToken",
            "Multibanco": "#/components/schemas/AlternativePaymentToken",
            "Neosurf": "#/components/schemas/AlternativePaymentToken",
            "Netbanking": "#/components/schemas/AlternativePaymentToken",
            "Neteller": "#/components/schemas/AlternativePaymentToken",
            "Nordea-Solo": "#/components/schemas/AlternativePaymentToken",
            "OchaPay": "#/components/schemas/AlternativePaymentToken",
            "online-bank-transfer": "#/components/schemas/AlternativePaymentToken",
            "Onlineueberweisen": "#/components/schemas/AlternativePaymentToken",
            "oriental-wallet": "#/components/schemas/AlternativePaymentToken",
            "OXXO": "#/components/schemas/AlternativePaymentToken",
            "P24": "#/components/schemas/AlternativePaymentToken",
            "Pagadito": "#/components/schemas/AlternativePaymentToken",
            "PagoEffectivo": "#/components/schemas/AlternativePaymentToken",
            "Pagsmile-deposit-express": "#/components/schemas/AlternativePaymentToken",
            "Pagsmile-lottery": "#/components/schemas/AlternativePaymentToken",
            "PayCash": "#/components/schemas/AlternativePaymentToken",
            "Payeer": "#/components/schemas/AlternativePaymentToken",
            "PaymentAsia-crypto": "#/components/schemas/AlternativePaymentToken",
            "Paymero": "#/components/schemas/AlternativePaymentToken",
            "Perfect-money": "#/components/schemas/AlternativePaymentToken",
            "Piastrix": "#/components/schemas/AlternativePaymentToken",
            "PayTabs": "#/components/schemas/AlternativePaymentToken",
            "Paysafecard": "#/components/schemas/AlternativePaymentToken",
            "Paysafecash": "#/components/schemas/AlternativePaymentToken",
            "Pay4Fun": "#/components/schemas/AlternativePaymentToken",
            "Paynote": "#/components/schemas/AlternativePaymentToken",
            "PinPay": "#/components/schemas/AlternativePaymentToken",
            "phone": "#/components/schemas/AlternativePaymentToken",
            "PhonePe": "#/components/schemas/AlternativePaymentToken",
            "POLi": "#/components/schemas/AlternativePaymentToken",
            "PostFinance-card": "#/components/schemas/AlternativePaymentToken",
            "PostFinance-e-finance": "#/components/schemas/AlternativePaymentToken",
            "QIWI": "#/components/schemas/AlternativePaymentToken",
            "QPay": "#/components/schemas/AlternativePaymentToken",
            "QQPay": "#/components/schemas/AlternativePaymentToken",
            "rapyd-checkout": "#/components/schemas/AlternativePaymentToken",
            "Resurs": "#/components/schemas/AlternativePaymentToken",
            "SafetyPay": "#/components/schemas/AlternativePaymentToken",
            "SEPA": "#/components/schemas/AlternativePaymentToken",
            "Skrill": "#/components/schemas/AlternativePaymentToken",
            "Skrill Rapid Transfer": "#/components/schemas/AlternativePaymentToken",
            "SMSVoucher": "#/components/schemas/AlternativePaymentToken",
            "Sofort": "#/components/schemas/AlternativePaymentToken",
            "SparkPay": "#/components/schemas/AlternativePaymentToken",
            "swift-dbt": "#/components/schemas/AlternativePaymentToken",
            "Tele2": "#/components/schemas/AlternativePaymentToken",
            "Terminaly-RF": "#/components/schemas/AlternativePaymentToken",
            "ToditoCash-card": "#/components/schemas/AlternativePaymentToken",
            "Trustly": "#/components/schemas/AlternativePaymentToken",
            "UPayCard": "#/components/schemas/AlternativePaymentToken",
            "UPI": "#/components/schemas/AlternativePaymentToken",
            "USD-coin": "#/components/schemas/AlternativePaymentToken",
            "VCreditos": "#/components/schemas/AlternativePaymentToken",
            "VenusPoint": "#/components/schemas/AlternativePaymentToken",
            "voucher": "#/components/schemas/AlternativePaymentToken",
            "voucher-2": "#/components/schemas/AlternativePaymentToken",
            "voucher-3": "#/components/schemas/AlternativePaymentToken",
            "voucher-4": "#/components/schemas/AlternativePaymentToken",
            "Webmoney": "#/components/schemas/AlternativePaymentToken",
            "Webpay": "#/components/schemas/AlternativePaymentToken",
            "Webpay-2": "#/components/schemas/AlternativePaymentToken",
            "Webpay Card": "#/components/schemas/AlternativePaymentToken",
            "WeChat Pay": "#/components/schemas/AlternativePaymentToken",
            "XPay-P2P": "#/components/schemas/AlternativePaymentToken",
            "XPay-QR": "#/components/schemas/AlternativePaymentToken",
            "Yandex-money": "#/components/schemas/AlternativePaymentToken",
            "Zotapay": "#/components/schemas/AlternativePaymentToken",
            "Zimpler": "#/components/schemas/AlternativePaymentToken"
          }
        },
        "anyOf": [
          {
            "$ref": "#/components/schemas/PaymentCardToken"
          },
          {
            "$ref": "#/components/schemas/PayPalToken"
          },
          {
            "$ref": "#/components/schemas/BankAccountToken"
          },
          {
            "$ref": "#/components/schemas/DigitalWalletToken"
          },
          {
            "$ref": "#/components/schemas/PlaidAccountToken"
          },
          {
            "$ref": "#/components/schemas/KhelocardCardToken"
          },
          {
            "$ref": "#/components/schemas/KlarnaToken"
          },
          {
            "$ref": "#/components/schemas/AlternativePaymentToken"
          },
          {
            "$ref": "#/components/schemas/CryptocurrencyToken"
          }
        ]
      },
      "DigitalWalletValidation": {
        "type": "object",
        "required": [
          "type"
        ],
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "Apple Pay": "#/components/schemas/ApplePayValidation"
          }
        },
        "properties": {
          "type": {
            "description": "Type of digital wallet to validate.",
            "type": "string",
            "enum": [
              "Apple Pay"
            ]
          }
        }
      },
      "ApplePayValidation": {
        "description": "Apple Pay session validation.",
        "allOf": [
          {
            "$ref": "#/components/schemas/DigitalWalletValidation"
          },
          {
            "type": "object",
            "required": [
              "validationRequest"
            ],
            "properties": {
              "type": {
                "type": "string"
              },
              "validationRequest": {
                "description": "Validation request.",
                "type": "object",
                "properties": {
                  "validationUrl": {
                    "type": "string",
                    "description": "Apple Pay SDK URL that is used to perform validation."
                  },
                  "domainName": {
                    "type": "string",
                    "description": "Domain where the client code, such as [FramePay](https://docs.rebilly.com/docs/developer-docs/framepay/), is executed.\nThe domain name must be registered in the Apple Pay console.\nFor more information, see [Register a domain for Apple Pay](./PostDigitalWalletOnboardingApplePay).",
                    "example": "www.example.com"
                  },
                  "displayName": {
                    "type": "string",
                    "description": "Display name of your store.",
                    "example": "My Store"
                  }
                },
                "writeOnly": true
              },
              "validationResponse": {
                "description": "Apple Pay SDK validation response.",
                "type": "object",
                "readOnly": true
              }
            }
          }
        ]
      },
      "PaymentInstructionToken": {
        "type": "object",
        "title": "Payment token",
        "required": [
          "token"
        ],
        "properties": {
          "token": {
            "description": "Token ID of the payment.",
            "type": "string"
          }
        }
      },
      "PaymentInstructionInstrument": {
        "type": "object",
        "title": "Payment instrument",
        "required": [
          "paymentInstrumentId"
        ],
        "properties": {
          "paymentInstrumentId": {
            "type": "string",
            "description": "ID of the payment instrument.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          }
        }
      },
      "PaymentInstructionMethods": {
        "type": "object",
        "title": "Payment Methods",
        "properties": {
          "methods": {
            "type": "array",
            "description": "List of available payment methods.\nOnly payment methods with at least one active gateway account are allowed.\n\nIf not specified all available payment methods are displayed.\n\nCustomer can choose any of those as well as the payment instrument for them.\nAdditional steps occur via a redirect to `approvalUrl`.",
            "items": {
              "$ref": "#/components/schemas/PaymentMethod"
            }
          },
          "receivedBy": {
            "description": "Name of the cash receiver.\nThis field is available only for the `cash` payment method.",
            "type": "string"
          },
          "reference": {
            "description": "Reference data.\nThis field is available only for the `check` and `bank-transfer` payment methods.",
            "type": "string"
          }
        }
      },
      "PaymentInstruction": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/PaymentInstructionToken"
          },
          {
            "$ref": "#/components/schemas/PaymentInstructionInstrument"
          },
          {
            "$ref": "#/components/schemas/PaymentInstructionMethods"
          },
          {
            "$ref": "#/components/schemas/PaymentCardCreatePlain"
          },
          {
            "$ref": "#/components/schemas/BankAccountCreatePlain"
          }
        ]
      },
      "TransactionQuery": {
        "type": "object",
        "properties": {
          "transactionId": {
            "$ref": "#/components/schemas/TransactionId"
          },
          "result": {
            "description": "Result of the transaction.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "abandoned",
              "approved",
              "canceled",
              "declined",
              "unknown"
            ]
          },
          "status": {
            "description": "Status of the transaction.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "completed",
              "conn-error",
              "disputed",
              "never-sent",
              "offsite",
              "partially-refunded",
              "pending",
              "refunded",
              "sending",
              "suspended",
              "timeout",
              "voided",
              "waiting-approval",
              "waiting-capture",
              "waiting-gateway",
              "waiting-refund"
            ]
          },
          "amount": {
            "description": "Amount of the transaction.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "currency": {
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          }
        }
      },
      "TransactionUpdate": {
        "type": "object",
        "description": "Updates the status of a transaction to `completed` with a specified `result` and optional currency and amount values.",
        "required": [
          "result"
        ],
        "properties": {
          "result": {
            "description": "Result of the transaction.",
            "type": "string",
            "enum": [
              "abandoned",
              "approved",
              "canceled",
              "declined"
            ]
          },
          "amount": {
            "description": "Amount of the transaction.",
            "type": "number",
            "format": "double"
          },
          "currency": {
            "description": "Currency of the transaction.",
            "$ref": "#/components/schemas/CurrencyCode"
          }
        }
      },
      "TransactionRefund": {
        "type": "object",
        "required": [
          "amount"
        ],
        "properties": {
          "amount": {
            "description": "Amount of the refund.",
            "type": "number",
            "format": "double"
          },
          "description": {
            "description": "Description of the refund.",
            "type": "string",
            "maxLength": 255
          },
          "isProcessedOutside": {
            "description": "Specifies if the refund is processed outside of Rebilly.",
            "type": "boolean",
            "default": false
          }
        }
      },
      "TransactionTimeline": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the timeline message.",
            "readOnly": true,
            "maxLength": 50,
            "example": "tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC"
          },
          "type": {
            "description": "Type of timeline message.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "amount-adjusted",
              "blocklist-matched",
              "bump-offer-accepted",
              "bump-offer-presented",
              "bump-offer-rejected",
              "customer-redirected-offsite",
              "customer-returned",
              "dcc-offer-accepted",
              "dcc-offer-forced",
              "dcc-offer-presented",
              "dcc-offer-rejected",
              "dispute-changed",
              "dispute-created",
              "dispute-forfeited",
              "dispute-lost",
              "dispute-responded",
              "dispute-won",
              "gateway-connection-failed",
              "gateway-connection-timed-out",
              "gateway-response-received",
              "offsite-transaction-completed",
              "quickbooks-payment-created",
              "quickbooks-refund-receipt-created",
              "quickbooks-transaction-task-failed",
              "risk-score-changed",
              "timeline-comment-created",
              "transaction-abandoned",
              "transaction-amount-discrepancy-found",
              "transaction-approved",
              "transaction-canceled",
              "transaction-capture-delayed",
              "transaction-captured",
              "transaction-declined",
              "transaction-discrepancy-found",
              "transaction-disputed",
              "transaction-initiated",
              "transaction-payment-method-changed",
              "transaction-process-requested",
              "transaction-processed",
              "transaction-queried",
              "transaction-reconciled",
              "transaction-refunded",
              "transaction-retried",
              "transaction-rules-processed",
              "transaction-scheduled-time-changed",
              "transaction-timeout-resolved",
              "transaction-updated",
              "transaction-voided",
              "transaction-waiting-gateway",
              "transaction-waiting-gateway-completed"
            ]
          },
          "triggeredBy": {
            "description": "Specifies who, or what, triggered the timeline message.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "rebilly",
              "app",
              "direct-api"
            ]
          },
          "message": {
            "description": "Contents of the timeline message.",
            "type": "string"
          },
          "extraData": {
            "$ref": "#/components/schemas/TimelineExtraData"
          },
          "occurredTime": {
            "description": "Date and time when the timeline message occurred.",
            "readOnly": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "FixedFeeFormula": {
        "type": "object",
        "required": [
          "type",
          "currency",
          "amount"
        ],
        "properties": {
          "type": {
            "description": "Type of fee.",
            "type": "string",
            "enum": [
              "fixed-fee"
            ]
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "amount": {
            "description": "Amount of the fee.",
            "type": "number",
            "format": "double",
            "example": 10,
            "x-type": "Money"
          }
        }
      },
      "Bips": {
        "type": "number",
        "description": "Basis points.\nExample: 100 bips = 1%, 1 bip = 0.01%.",
        "format": "integer",
        "minimum": 0,
        "maximum": 100000,
        "example": 100
      },
      "PercentageFeeFormula": {
        "type": "object",
        "required": [
          "type",
          "currency",
          "bips"
        ],
        "properties": {
          "type": {
            "description": "Type of fee.",
            "type": "string",
            "enum": [
              "percentage"
            ]
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "bips": {
            "$ref": "#/components/schemas/Bips"
          },
          "minAmount": {
            "description": "Minimum fee amount.\nThis value is applied when the calculated fee is less than the required minimum.",
            "type": "number",
            "format": "double",
            "example": 10,
            "x-type": "Money"
          }
        }
      },
      "FeeFormula": {
        "type": "object",
        "description": "Formula that is used to calculate the fee.",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "fixed-fee": "#/components/schemas/FixedFeeFormula",
            "percentage": "#/components/schemas/PercentageFeeFormula"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/FixedFeeFormula"
          },
          {
            "$ref": "#/components/schemas/PercentageFeeFormula"
          }
        ]
      },
      "SettlementPeriod": {
        "type": "object",
        "description": "Instruction for calculating the settlement time.\nThe settlement time and settlement period anchor are used\nin conjunction with the transaction processed time,\nto calculate the time in which the amount settles.",
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "date-interval": "#/components/schemas/SchedulingMethodDateInterval",
            "immediately": "#/components/schemas/SchedulingMethodImmediately"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/SchedulingMethodDateInterval"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodImmediately"
          }
        ]
      },
      "SettlementSettings": {
        "type": "object",
        "description": "Settlement settings.\nUse these settings to set up settlement accounts.",
        "required": [
          "settlementCurrency",
          "settlementPeriod"
        ],
        "properties": {
          "settlementCurrency": {
            "description": "Default settlement currency for all transactions.",
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "settlementPeriod": {
            "description": "Default settlement period for all transactions.",
            "$ref": "#/components/schemas/SettlementPeriod"
          },
          "advancedSettings": {
            "description": "Advanced settlement settings.\nUse these settings to override either default settlement currency,\nperiod, or both for the transactions matched a filter.",
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "filter"
              ],
              "properties": {
                "filter": {
                  "type": "string",
                  "description": "Filter that is based on transaction properties and is used to determine when to apply the settings.",
                  "minLength": 1,
                  "maxLength": 255,
                  "example": "currency:EUR,GBP"
                },
                "settlementCurrency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "settlementPeriod": {
                  "$ref": "#/components/schemas/SettlementPeriod"
                }
              }
            }
          }
        }
      },
      "Fee": {
        "type": "object",
        "required": [
          "type",
          "name",
          "formula"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the fee.",
            "readOnly": true,
            "maxLength": 50,
            "example": "fee_01GQT145JX3XBRJ8K812Y3GRE9"
          },
          "type": {
            "description": "Type of fee.",
            "type": "string",
            "enum": [
              "buy",
              "sell"
            ]
          },
          "name": {
            "type": "string",
            "description": "Name of the fee.",
            "minLength": 1,
            "maxLength": 255,
            "example": "A gateway fee"
          },
          "filter": {
            "description": "Filter that is based on the properties of the transaction and used to determine when to apply the fee.",
            "minLength": 1,
            "maxLength": 255,
            "example": "type:sale,capture;result:approved",
            "type": [
              "string",
              "null"
            ]
          },
          "formula": {
            "$ref": "#/components/schemas/FeeFormula"
          },
          "settlementSettings": {
            "description": "Fee settlement settings.\nThis value overrides the gateway account financial settings of the transaction.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/SettlementSettings"
              },
              {
                "type": "null"
              }
            ]
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "PatchFee": {
        "type": "object",
        "properties": {
          "type": {
            "description": "Type of fee.",
            "type": "string",
            "enum": [
              "buy",
              "sell"
            ]
          },
          "name": {
            "type": "string",
            "description": "Name of the fee.",
            "minLength": 1,
            "maxLength": 255,
            "example": "A gateway fee"
          },
          "filter": {
            "description": "Filter that is based on the properties of the transaction and used to determine when to apply the fee.",
            "minLength": 1,
            "maxLength": 255,
            "example": "type:sale,capture;result:approved",
            "type": [
              "string",
              "null"
            ]
          },
          "formula": {
            "$ref": "#/components/schemas/FeeFormula"
          },
          "settlementSettings": {
            "description": "Fee settlement settings.\nThis value overrides the gateway account financial settings of the transaction.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/SettlementSettings"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "DepositRequest": {
        "type": "object",
        "required": [
          "websiteId",
          "customerId",
          "currency"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the deposit request.",
            "readOnly": true,
            "maxLength": 50,
            "example": "dep_req_0YVJ65BSGYC3EAT58SEX8KY6J7"
          },
          "websiteId": {
            "description": "ID of the website associated with the deposit.",
            "type": "string",
            "maxLength": 50,
            "example": "web_0YV7DE4Z26DQSA1AC92FBJ7SEG"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "transactionIds": {
            "type": "array",
            "description": "List of transaction IDs that are associated with the deposit request.\nThis list includes transactions that are created from the deposit request.\nThere is a maximum of one `approved` transaction in the list.",
            "items": {
              "type": "string",
              "maxLength": 50
            }
          },
          "status": {
            "description": "Status of the request.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "created",
              "pending",
              "initiated",
              "attempted",
              "completed",
              "expired"
            ],
            "x-enumDescriptions": {
              "created": "Request is created, but it has not been visited by a customer. This is a temporary state.",
              "pending": "Request has been visited by a customer, but no funds have been deposited yet. This is a temporary state.",
              "initiated": "A funds deposit transaction has been initiated. This is a temporary state.",
              "attempted": "A funds deposit transaction was attempted and declined. This is a temporary state.",
              "completed": "A funds deposit transaction has been approved and completed. This is a permanent state.",
              "expired": "Request expired without an approved deposit transaction. This is a permanent state."
            }
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "amounts": {
            "type": "array",
            "description": "List of available deposit amounts.\n\nIf `amounts` is not specified when a deposit is created, amounts are determined from the chosen deposit amount strategy.\nFor more information, see the [`strategyId` property](https://www.rebilly.com/catalog/all/deposits/postdepositrequest#deposits/postdepositrequest/t=request&path=strategyid).",
            "items": {
              "type": "number",
              "format": "double",
              "minimum": 0.01
            }
          },
          "defaultAmount": {
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "minimum": 0.01,
            "description": "Value of the default amount in the amounts list.\nThis value is calculated from the `defaultIndex` property of the deposit strategy that is applied to the deposit request."
          },
          "customAmount": {
            "type": [
              "object",
              "null"
            ],
            "description": "Custom amount restrictions.\nIf this value is `null`,  custom amounts are prohibited.\nIf `customAmount` is not specified when a deposit request is created, amount restrictions are determined from the chosen strategy.\nFor more information, see the [`strategyId` property](https://www.rebilly.com/catalog/all/deposits/postdepositrequest#deposits/postdepositrequest/t=request&path=strategyid).",
            "required": [
              "minimum",
              "multipleOf",
              "maximum"
            ],
            "properties": {
              "minimum": {
                "description": "Minimum custom amount.",
                "type": "number",
                "format": "double",
                "minimum": 0.01
              },
              "multipleOf": {
                "description": "Multiple by which the custom amount increases.\n\nFor example, if `minimum` is equal to 5.30, and `multipleOf` is 0.50, the valid custom amount is 5.30, 5.80, 6.30, 6.80 and so on until the `maximum` value is reached.\n\nA valid custom amount must be equal to `minimum` + X * `multipleOf`, where X is any non negative integer.",
                "type": "number",
                "format": "double",
                "minimum": 0.01
              },
              "maximum": {
                "description": "Maximum custom amount.\nThis value must be equal to `minimum` + X * `multipleOf`, where X is any positive integer.",
                "type": "number",
                "format": "double",
                "minimum": 0.01
              }
            }
          },
          "redirectUrl": {
            "description": "URL to redirect the customer to when a deposit is completed.\nThe default value is the website URL.",
            "type": "string",
            "maxLength": 2083,
            "format": "uri"
          },
          "expirationTime": {
            "description": "Date and time when the deposit request expires.\nThe default expiration time is one hour from the time the request is created.",
            "type": "string",
            "format": "date-time"
          },
          "propertiesSchema": {
            "readOnly": true,
            "description": "Defines properties the user can complete when they use the hosted deposit form.\nThis field accepts [JSON-schema](https://json-schema.org/) drafts 4, 6, and 7.",
            "type": [
              "object",
              "null"
            ],
            "example": {
              "type": "object",
              "properties": {
                "email": {
                  "type": "string"
                },
                "max": {
                  "type": "integer",
                  "minimum": 0,
                  "exclusiveMaximum": 100
                }
              },
              "required": [
                "email"
              ]
            }
          },
          "properties": {
            "readOnly": true,
            "description": "Properties that are available for the user to complete when they use the hosted deposit form.\nUse this object to describe fields that are rendered and completed on the hosted deposit form.",
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "email": "email@example.com",
              "max": "33"
            }
          },
          "notificationUrl": {
            "description": "URL where a server-to-server POST notification is sent.\nThis notification is sent when the transaction result is finalized after a timeout or an offsite interaction.\n\nDo not interpret this notification as a confirmation,\ncomplete a `GET` request to confirm the result of the transaction.\nTo ensure the request is not reattempted,\nwhen the result is confirmed, respond with a `2xx` HTTP status code.\n\nThe following placeholders are available to use in this URI: `{id}` and `{result}`.\nThese placeholders are replaced the with the transaction ID and result accordingly.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 2083,
            "format": "uri"
          },
          "cashierToken": {
            "description": "JSON Web Token (JWT) used to complete the deposit request.\nThis value is `null` if the deposit request is `expired` or `completed`.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "customFields": {
            "description": "Custom fields related to the deposit request.\nCustom field values are copied to created transactions if matching custom fields (name, type) exist.",
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "deposit",
                    "transactions"
                  ],
                  "x-enumDescriptions": {
                    "self": "Link to the deposit request.",
                    "deposit": "Link to the hosted deposit form.",
                    "transactions": "Link to the deposit request transactions collection."
                  }
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "website": {
                "type": "object"
              },
              "transactions": {
                "type": "array",
                "maxItems": 10,
                "description": "Most recent associated transactions."
              }
            }
          }
        }
      },
      "PostDepositRequest": {
        "type": "object",
        "required": [
          "websiteId",
          "customerId",
          "currency"
        ],
        "properties": {
          "websiteId": {
            "description": "ID of the website associated with the deposit.",
            "type": "string",
            "maxLength": 50,
            "example": "web_0YV7DE4Z26DQSA1AC92FBJ7SEG"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "strategyId": {
            "description": "ID of a deposit amount strategy to be applied for this request for `amounts` and `customAmount`.\nIf this field is not specified, a randomly selected deposit amount strategy with a matching `filter` value is applied for empty `amounts` and `customAmount`.\nIf there is no matching deposit amount strategy, the default strategy with the following parameters is applied for empty `amounts` and `customAmount`:\n```yaml\n  amounts:\n    calculator: absolute\n    baseAmount: 10\n    increments: [10, 20]\n    adjustBaseToLastDeposit: true\n  customAmount:\n    minimum: 1\n    multipleOf: 1\n    maximum: 10000\n```\nFor more information, see [Create a deposit amount strategy](https://www.rebilly.com/catalog/all/deposits/postdepositstrategy).",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "dep_str_0YVJ64MAHTDPA97H8S7R5MYR1M"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "amounts": {
            "type": [
              "array",
              "null"
            ],
            "description": "List of available deposit amounts.\n\nIf `amounts` is not specified when a deposit request is created, amounts are determined from the chosen deposit amount strategy.\nFor more information, see the [`strategyId` property](https://www.rebilly.com/catalog/all/deposits/postdepositrequest#deposits/postdepositrequest/t=request&path=strategyid).",
            "items": {
              "type": "number",
              "format": "double",
              "minimum": 0.01
            }
          },
          "amountLimits": {
            "type": [
              "object",
              "null"
            ],
            "description": "Deposit amount limit information. Set optional minimum and maximum deposit amounts. Limits override `amounts` and `customAmount` values.\nIf this value is `null`, deposit amount limits are not set.",
            "minProperties": 1,
            "properties": {
              "minimum": {
                "description": "Minimum deposit amount.",
                "type": [
                  "number",
                  "null"
                ],
                "format": "double",
                "default": 0,
                "minimum": 0
              },
              "maximum": {
                "description": "Maximum deposit amount.",
                "type": [
                  "number",
                  "null"
                ],
                "format": "double",
                "minimum": 0
              }
            }
          },
          "customAmount": {
            "type": [
              "object",
              "null"
            ],
            "description": "Custom amount restrictions.\nIf this value is `null`,  custom amounts are prohibited.\nIf `customAmount` is not specified when a deposit request is created, amount restrictions are determined from the chosen deposit amount strategy.\nFor more information, see the [`strategyId` property](https://www.rebilly.com/catalog/all/deposits/postdepositrequest#deposits/postdepositrequest/t=request&path=strategyid).",
            "required": [
              "minimum",
              "multipleOf",
              "maximum"
            ],
            "properties": {
              "minimum": {
                "description": "Minimum custom amount.",
                "type": "number",
                "format": "double",
                "minimum": 0.01
              },
              "multipleOf": {
                "description": "Multiple by which the custom amount increases.\n\nFor example, if `minimum` is equal to 5.30, and `multipleOf` is 0.50, the valid custom amount is 5.30, 5.80, 6.30, 6.80 and so on until the `maximum` value is reached.\n\nA valid custom amount must be equal to `minimum` + X * `multipleOf`, where X is any non negative integer.",
                "type": "number",
                "format": "double",
                "minimum": 0.01
              },
              "maximum": {
                "description": "Maximum custom amount.\nThis value must be equal to `minimum` + X * `multipleOf`, where X is any positive integer.",
                "type": "number",
                "format": "double",
                "minimum": 0.01
              }
            }
          },
          "redirectUrl": {
            "description": "URL to redirect the customer to when a deposit is completed.\nThe default value is the website URL.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 2083,
            "format": "uri"
          },
          "expirationTime": {
            "description": "Date and time when the deposit request expires.\nThe default expiration time is one hour after the time the request is created.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "customPropertySetId": {
            "description": "ID of a custom property set to apply to the request `propertiesSchema`.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "notificationUrl": {
            "description": "URL where a server-to-server `POST` notification is sent.\nThis notification is sent when the transaction result is finalized after a timeout or an offsite interaction.\n\nDo not interpret this notification as a confirmation,\ncomplete a `GET` request to confirm the result of the transaction.\nTo ensure the request is not reattempted,\nwhen the result is confirmed, respond with a `2xx` HTTP status code.\n\nThe following placeholders are available to use in this URI: `{id}` and `{result}`.\nThese placeholders are replaced the with the transaction ID and result accordingly.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 2083,
            "format": "uri"
          }
        }
      },
      "PostCashier": {
        "type": "object",
        "required": [
          "customerId",
          "websiteId",
          "currency"
        ],
        "properties": {
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "redirectUrl": {
            "description": "URL to redirect the customer to when a deposit or withdrawal is completed.\nThe default value is the website URL.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 2083,
            "format": "uri"
          },
          "balance": {
            "description": "Current cash balance of the customer.",
            "type": "number",
            "format": "double",
            "minimum": 0,
            "example": 1500
          },
          "bonusBalance": {
            "description": "Bonus balance available to the customer.",
            "type": "number",
            "format": "double",
            "minimum": 0,
            "example": 0
          },
          "depositLimits": {
            "type": "object",
            "writeOnly": true,
            "properties": {
              "minimum": {
                "type": "number",
                "format": "double",
                "minimum": 0.01,
                "example": 1000,
                "description": "Minimum deposit limit."
              },
              "maximum": {
                "type": "number",
                "format": "double",
                "example": 10000,
                "description": "Maximum deposit limit."
              }
            },
            "description": "Deposit limits for the customer.\nThis object is used to set the minimum and maximum deposit limits for the customer."
          },
          "notificationUrl": {
            "description": "URL where a server-to-server `POST` notification is sent.\nThis notification is sent when the transaction result is finalized after a timeout or an offsite interaction.\n\nDo not interpret this notification as a confirmation,\ncomplete a `GET` request to confirm the result of the transaction.\nTo ensure the request is not reattempted,\nwhen the result is confirmed, respond with a `2xx` HTTP status code.\n\nThe following placeholders are available to use in this URI: `{id}` and `{result}`.\nThese placeholders are replaced the with the transaction ID and result accordingly.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 2083,
            "format": "uri"
          },
          "pendingPayoutTotal": {
            "type": "number",
            "format": "double",
            "minimum": 0,
            "description": "Sum of all payout requests that are currently in a pending state.\nThis value is also the maximum possible \"reverse withdrawal\" amount.",
            "example": 100
          }
        }
      },
      "Cashier": {
        "type": "object",
        "required": [
          "id",
          "customerId",
          "websiteId",
          "redirectUrl",
          "expirationTime",
          "currency",
          "balance",
          "bonusBalance",
          "pendingPayoutTotal",
          "notificationUrl"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the cashier resource.",
            "readOnly": true,
            "maxLength": 50,
            "example": "cashier_0YV7DE4Z26DQSA1AC92FBJ7SEG"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId"
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "redirectUrl": {
            "description": "URL to redirect the customer to when a deposit or withdrawal is completed.\nThe default value is the website URL.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 2083,
            "format": "uri"
          },
          "balance": {
            "type": "number",
            "format": "double",
            "minimum": 0,
            "description": "Customer's current balance.",
            "example": 1500
          },
          "bonusBalance": {
            "type": "number",
            "format": "double",
            "minimum": 0,
            "description": "Bonus balance available to the customer.",
            "example": 0
          },
          "notificationUrl": {
            "description": "URL where a server-to-server `POST` notification is sent.\nThis notification is sent when the transaction result is finalized after a timeout or an offsite interaction.\n\nDo not interpret this notification as a confirmation,\ncomplete a `GET` request to confirm the result of the transaction.\nTo ensure the request is not reattempted,\nwhen the result is confirmed, respond with a `2xx` HTTP status code.\n\nThe following placeholders are available to use in this URI: `{id}` and `{result}`.\nThese placeholders are replaced the with the transaction ID and result accordingly.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 2083,
            "format": "uri"
          },
          "expirationTime": {
            "description": "Date and time at which the cashier expires.\nThe default expiration time is one hour after the request is created.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "pendingPayoutTotal": {
            "type": "number",
            "format": "double",
            "minimum": 0,
            "description": "Sum of all payout requests that are currently in a pending state.\nThis value is also the maximum possible \"reverse withdrawal\" amount.",
            "example": 100
          },
          "lastDepositRequestId": {
            "type": "string",
            "description": "ID of the last deposit request that is made for this cashier.",
            "example": "dep_req_01K2HMPNTBDS92TA6W4EX3VJPM"
          },
          "cashierToken": {
            "description": "JSON Web Token (JWT) for the cashier.\nThis value is `null` if the associated deposit request is `expired` or `completed`.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "DepositStrategy": {
        "type": "object",
        "required": [
          "name",
          "amounts",
          "customAmount"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the deposit amount strategy.",
            "readOnly": true,
            "maxLength": 50,
            "example": "dep_str_0YVJ64MAHTDPA97H8S7R5MYR1M"
          },
          "name": {
            "type": "string",
            "description": "Name of the deposit amount strategy."
          },
          "filter": {
            "type": "string",
            "description": "Filter that uses deposit request properties to determine if a deposit amount strategy is applicable for the deposit request.\nIf this field is empty, the deposit amount strategy is applicable for any request.",
            "default": "",
            "example": "depositRequest.currency:USD"
          },
          "amounts": {
            "type": "object",
            "description": "Amounts configuration for deposit amount strategy.",
            "required": [
              "calculator",
              "baseAmount",
              "increments",
              "defaultIndex"
            ],
            "properties": {
              "calculator": {
                "type": "string",
                "description": "Deposit amounts calculator.\nThis field specifies if amounts are calculated using an absolute or percentage calculation.\n\nAmounts are specified in `baseAmount`, and increments are specified in `increments`.\n\nExample: `baseAmount: 10` and `increments: [20, 50, 100]`.\n\n- If the calculator is set to `absolute`: the amounts displayed to the customer are `[10, 30, 60, 110]`.\n- If the calculator is set to `percent`: the amounts displayed to the customer are `[10, 12, 15, 20]`.",
                "enum": [
                  "absolute",
                  "percent"
                ]
              },
              "baseAmount": {
                "type": "number",
                "format": "double",
                "minimum": 0.01,
                "description": "First amount that is displayed to customer."
              },
              "increments": {
                "type": "array",
                "description": "List of incremental amounts that are displayed to customer.\n\nFor more information, see the [`calculator` property](https://www.rebilly.com/catalog/all/deposits/postdepositstrategy#deposits/postdepositstrategy/t=request&path=amounts/calculator).",
                "items": {
                  "type": "number",
                  "format": "double",
                  "minimum": 0.01
                }
              },
              "defaultIndex": {
                "type": [
                  "integer",
                  "null"
                ],
                "description": "Index of the default amount in the amounts list that is displayed to the customer.\nUse it to specify which amount from the calculated amounts is preselected when the customer opens the deposit form.\n\nWhen `hideBaseAmount` is `true`, the 0 index refers to the first increment.",
                "minimum": 0,
                "default": 0
              },
              "adjustBaseToLastDeposit": {
                "type": "boolean",
                "default": false,
                "description": "Specifies if the base amount must be adjusted based on the last deposit.\nIf this value is `true`, the `baseAmount` is changed to the last successful deposit amount made using [Create a deposit request](https://www.rebilly.com/catalog/all/deposits/postdepositrequest).\n\nIf the customer has no successful deposits, `baseAmount` is not adjusted."
              },
              "hideBaseAmount": {
                "type": "boolean",
                "default": false,
                "description": "Specifies if the base amount is hidden in the deposit form options.\nIf this value is `true`, the base amount is used to calculate increments but is not shown as a selectable option."
              },
              "minimumBaseAmount": {
                "type": [
                  "number",
                  "null"
                ],
                "format": "double",
                "minimum": 0.01,
                "description": "Minimum value for the base amount.\nIf the base amount of the last deposit is less than this value,\nthis value is used as the base amount."
              }
            }
          },
          "customAmount": {
            "type": [
              "object",
              "null"
            ],
            "description": "Custom amount restrictions.\nIf this value is `null`,  custom amounts are prohibited.\nIf `customAmount` is not specified when a deposit request is created, amount restrictions are determined from the chosen deposit amount strategy.\nFor more information, see the [`strategyId` property](https://www.rebilly.com/catalog/all/deposits/postdepositrequest#deposits/postdepositrequest/t=request&path=strategyid).",
            "required": [
              "minimum",
              "multipleOf",
              "maximum"
            ],
            "properties": {
              "minimum": {
                "description": "Minimum custom amount.",
                "type": "number",
                "format": "double",
                "minimum": 0.01
              },
              "multipleOf": {
                "description": "Multiple by which the custom amount increases.\n\nFor example, if `minimum` is equal to 5.30, and `multipleOf` is 0.50, the valid custom amount is 5.30, 5.80, 6.30, 6.80 and so on until the `maximum` value is reached.\n\nA valid custom amount must be equal to `minimum` + X * `multipleOf`, where X is any non negative integer.",
                "type": "number",
                "format": "double",
                "minimum": 0.01
              },
              "maximum": {
                "description": "Maximum custom amount.\nThis value must be equal to `minimum` + X * `multipleOf`,\nwhere X is any positive integer.",
                "type": "number",
                "format": "double",
                "minimum": 0.01
              }
            }
          },
          "priority": {
            "type": "integer",
            "description": "Non-negative integer value that specifies which deposit amount strategy is applied to the request.\nThe deposit amount strategy with the highest priority value is applied.",
            "default": 0,
            "minimum": 0
          },
          "isActive": {
            "type": "boolean",
            "description": "Specifies if the deposit amount strategy is active.",
            "default": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "DepositCustomPropertySet": {
        "type": "object",
        "required": [
          "name",
          "properties"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the deposit property set.",
            "readOnly": true,
            "maxLength": 50,
            "example": "dep_prop_0YVJ640MB4CXVB8KXBRW3B79R9"
          },
          "name": {
            "type": "string",
            "description": "Name of the custom property set."
          },
          "properties": {
            "description": "Defines properties the user can complete when they use the hosted deposit form.\nThis field accepts [JSON-schema](https://json-schema.org/) drafts 4, 6, and 7.\nAccepted properties types are: `string`, `number`, `integer`, `array`, and `enum`.\nFor more information, see [Configure custom hosted deposit properties](https://www.rebilly.com/docs/dev-docs/configure-custom-hosted-deposit-properties/).",
            "type": "object",
            "example": {
              "type": "object",
              "properties": {
                "email": {
                  "type": "string"
                },
                "max": {
                  "type": "integer",
                  "minimum": 0,
                  "exclusiveMaximum": 100
                }
              },
              "required": [
                "email"
              ]
            }
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "PayoutRequestBlockReason": {
        "type": "string",
        "description": "Reason for blocking the payout request.",
        "enum": [
          "fraud-suspected",
          "kyc-verification-required",
          "aml-review",
          "account-verification",
          "duplicate-request",
          "insufficient-documentation",
          "risk-review",
          "other"
        ]
      },
      "PayoutRequestCancellation": {
        "description": "Reason the payout request is canceled.",
        "type": [
          "object",
          "null"
        ],
        "readOnly": true,
        "properties": {
          "canceledBy": {
            "description": "Specifies who initiated the cancellation.",
            "type": "string",
            "default": "customer",
            "enum": [
              "merchant",
              "customer"
            ]
          },
          "description": {
            "description": "Description of the cancellation reason in free form.",
            "type": "string",
            "maxLength": 255
          }
        }
      },
      "PayoutRequest": {
        "type": "object",
        "required": [
          "websiteId",
          "customerId",
          "currency",
          "amount"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "Unique resource ID.",
            "maxLength": 50,
            "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "customerId": {
            "description": "ID of the customer who is requesting a payout.",
            "$ref": "#/components/schemas/CustomerId"
          },
          "paymentInstrumentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the requested payment instrument to offer for the payout.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "currency": {
            "description": "Currency of the payout.",
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "amount": {
            "description": "Amount of the payout.",
            "type": "number",
            "format": "double",
            "x-type": "Money"
          },
          "availableAmount": {
            "description": "Available payout request amount that has not been allocated.",
            "readOnly": true,
            "type": "number",
            "format": "double",
            "x-type": "Money"
          },
          "description": {
            "description": "Description of payout request.",
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "description": "Status of the request.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "instrument-selected",
              "partially-fulfilled",
              "fulfilled",
              "canceled"
            ],
            "x-enumDescriptions": {
              "pending": "Request is awaiting customer's selection of the payment instrument or fulfillment.",
              "instrument-selected": "Request has a selected payment instrument and is awaiting fulfillment.",
              "partially-fulfilled": "Request is partially paid out when `availableAmount` is less than `amount`.",
              "fulfilled": "Request is fully paid out when `availableAmount` reaches zero.",
              "canceled": "Request is canceled by merchant or customer."
            }
          },
          "blocked": {
            "description": "Specifies whether the payout request is blocked or unblocked.",
            "type": "boolean",
            "readOnly": false,
            "example": false
          },
          "blockReason": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayoutRequestBlockReason"
              },
              {
                "type": "null"
              }
            ]
          },
          "batchId": {
            "description": "ID of the payout request batch that contains this request.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 50,
            "example": "preq_batch_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "selectPaymentInstrumentUrl": {
            "readOnly": true,
            "type": "string",
            "format": "uri",
            "description": "URL for the customer to select a preferred payment instrument."
          },
          "allocations": {
            "type": "array",
            "description": "List of credit transactions that are allocated to reduce the available amount of a payout request.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "transactionId": {
                  "description": "ID of the transaction to which the payout request is allocated.",
                  "$ref": "#/components/schemas/TransactionId"
                },
                "transactionResult": {
                  "description": "Result of a transaction.",
                  "allOf": [
                    {
                      "$ref": "#/components/schemas/TransactionResult"
                    }
                  ],
                  "x-basic": true,
                  "readOnly": true
                },
                "method": {
                  "$ref": "#/components/schemas/PaymentMethod"
                },
                "gatewayName": {
                  "description": "Name of the payment gateway that processed, or is selected to process, the transaction.",
                  "x-label": "Gateway account",
                  "x-basic": true,
                  "$ref": "#/components/schemas/GatewayName"
                },
                "paymentInstrumentId": {
                  "type": "string",
                  "description": "ID of the selected payment instrument for the transaction.",
                  "maxLength": 50,
                  "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
                },
                "amount": {
                  "description": "Payout amount that is allocated from the payout request to the credit transaction.",
                  "type": "number",
                  "format": "double"
                },
                "currency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "createdTime": {
                  "description": "Date and time when a payout request is allocated.",
                  "$ref": "#/components/schemas/CreatedTime"
                },
                "updatedTime": {
                  "$ref": "#/components/schemas/UpdatedTime"
                }
              }
            }
          },
          "selectedPaymentInstrumentRedirectUrl": {
            "description": "URL where the customer is redirected when a payment instrument is selected. The default value is the website URL.\nUse `{{id}}` as a placeholder for the payout request ID.",
            "type": "string",
            "format": "uri",
            "maxLength": 2083,
            "example": "https://example.com/payout-request-success"
          },
          "cancellationReason": {
            "$ref": "#/components/schemas/PayoutRequestCancellation"
          },
          "createdTime": {
            "description": "Date and time when the payout request is created.",
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "description": "Date and time when the payout request is updated.",
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "paymentInstrument"
                  ]
                }
              }
            }
          }
        }
      },
      "PayoutRequestAllocation": {
        "type": "object",
        "required": [
          "payoutRequestId",
          "paymentInstrumentId",
          "gatewayAccountId",
          "amount",
          "currency"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the resource.",
            "maxLength": 50,
            "example": "pra_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "payoutRequestId": {
            "description": "ID of the payout request associated with this allocation.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "batchId": {
            "description": "ID of the payout request batch that contains the payout request for this allocation.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "preq_batch_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "paymentInstrumentId": {
            "type": "string",
            "description": "ID of the payment instrument allocated to the payout request.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "paymentMethod": {
            "description": "Payment method of the allocation.",
            "allOf": [
              {
                "$ref": "#/components/schemas/PaymentMethod"
              }
            ],
            "readOnly": true
          },
          "gatewayAccountId": {
            "type": "string",
            "description": "ID of the gateway account to use for processing this allocation.",
            "maxLength": 50,
            "example": "gateway_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "gatewayName": {
            "type": "string",
            "description": "Name of the gateway account to use for processing this allocation.",
            "maxLength": 50,
            "example": "TestProcessor"
          },
          "amount": {
            "description": "Amount allocated to this payment instrument.",
            "type": "number",
            "format": "double",
            "x-type": "Money"
          },
          "currency": {
            "description": "Currency of the payout request allocation.",
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "status": {
            "description": "Status of this payout request allocation.",
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed",
              "canceled",
              "declined"
            ],
            "x-enumDescriptions": {
              "pending": "Allocation was created and is waiting to be processed.",
              "queued": "Allocation is queued for processing.",
              "processing": "Allocation is being processed and a transaction is being created.",
              "completed": "Allocation was successfully processed and the transaction was approved.",
              "failed": "Allocation was not processed because of an error.",
              "canceled": "Allocation was canceled before processing.",
              "declined": "Allocation was declined by the gateway."
            }
          },
          "transactionId": {
            "description": "ID of the transaction that is created when processing this allocation, if applicable.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 50,
            "example": "txn_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "transactionResult": {
            "description": "Result of the transaction created for this allocation, if applicable.",
            "readOnly": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TransactionResult"
              },
              {
                "type": "null"
              }
            ]
          },
          "transactionStatus": {
            "description": "Status of the transaction created for this allocation, if applicable.",
            "readOnly": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/TransactionStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "createdTime": {
            "description": "Date and time when the allocation for the payout request was created.",
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "transaction",
                    "gatewayAccount",
                    "payoutRequest",
                    "paymentInstrument"
                  ]
                }
              }
            }
          }
        }
      },
      "PayoutRequestV2": {
        "type": "object",
        "required": [
          "websiteId",
          "customerId",
          "currency",
          "amount"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the resource.",
            "maxLength": 50,
            "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "customerId": {
            "description": "ID of the customer who is requesting a payout.",
            "$ref": "#/components/schemas/CustomerId"
          },
          "paymentInstrumentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the requested payment instrument to offer for the payout.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          },
          "splitFromPayoutRequestId": {
            "description": "ID of the payout request from which this request is split,\nor `null` if this request is not created by a split operation.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 50,
            "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "mergedIntoPayoutRequestId": {
            "description": "ID of the payout request that this request is merged into,\nor `null` if it is not merged into another request.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 50,
            "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "currency": {
            "description": "Currency of the payout.",
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "amount": {
            "description": "Amount of the payout.",
            "type": "number",
            "format": "double",
            "x-type": "Money"
          },
          "availableAmount": {
            "description": "Amount of the payout request that is unallocated and available.",
            "readOnly": true,
            "type": "number",
            "format": "double",
            "x-type": "Money"
          },
          "description": {
            "description": "Description of payout request.",
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "description": "Status of the request.",
            "type": "string",
            "enum": [
              "pending",
              "ready",
              "approved",
              "in-progress",
              "instrument-selected",
              "partially-fulfilled",
              "fulfilled",
              "canceled",
              "customer-reversed",
              "system-reversed",
              "admin-reversed",
              "split",
              "merged"
            ],
            "x-enumDescriptions": {
              "pending": "Request was created by the customer.",
              "ready": "Request was assessed, deemed eligible for processing and is ready for approval.",
              "approved": "Request was approved and is ready for processing.",
              "in-progress": "Request has allocations and is being processed.",
              "instrument-selected": "Request has a selected payment instrument.",
              "partially-fulfilled": "Request is partially paid out.",
              "fulfilled": "Request is fully paid out.",
              "canceled": "Request is canceled by merchant or customer.",
              "customer-reversed": "Request was reversed by the customer.",
              "system-reversed": "Request was reversed by the system.",
              "admin-reversed": "Request was reversed by the admin.",
              "split": "Request was split into two or more payout requests.",
              "merged": "Request was merged into another payout request."
            }
          },
          "blocked": {
            "description": "Specifies whether the payout request is blocked or unblocked.",
            "type": "boolean",
            "readOnly": false,
            "example": false
          },
          "blockReason": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayoutRequestBlockReason"
              },
              {
                "type": "null"
              }
            ]
          },
          "batchId": {
            "description": "ID of the payout request batch that contains this request.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "maxLength": 50,
            "example": "preq_batch_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "selectPaymentInstrumentUrl": {
            "readOnly": true,
            "type": "string",
            "format": "uri",
            "description": "URL where the customer can select a preferred payment instrument."
          },
          "allocations": {
            "type": "array",
            "description": "List of payout request allocations for the payout request.",
            "readOnly": true,
            "items": {
              "$ref": "#/components/schemas/PayoutRequestAllocation"
            }
          },
          "selectedPaymentInstrumentRedirectUrl": {
            "description": "URL where the customer is redirected after selecting a payment instrument.\nThe default value is the website URL.\nUse `{{id}}` as a placeholder for the payout request ID.",
            "type": "string",
            "format": "uri",
            "maxLength": 2083,
            "example": "https://example.com/payout-request-success"
          },
          "cancellationReason": {
            "$ref": "#/components/schemas/PayoutRequestCancellation"
          },
          "createdTime": {
            "description": "Date and time when the payout request is created.",
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "description": "Date and time when the payout request is updated.",
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "splitFrom",
                    "mergedInto",
                    "paymentInstrument"
                  ]
                }
              }
            }
          }
        }
      },
      "PayoutRequestSplit": {
        "type": "object",
        "required": [
          "amounts"
        ],
        "properties": {
          "amounts": {
            "description": "Amounts for each new payout request.\nOne request is created per amount.\nProvide at least two amounts.\nEach amount must be greater than zero.\nThe sum must equal the original payout request amount.",
            "type": "array",
            "minItems": 2,
            "maxItems": 100,
            "items": {
              "type": "number",
              "format": "double",
              "x-type": "Money",
              "exclusiveMinimum": 0
            },
            "example": [
              50,
              30,
              20
            ]
          }
        }
      },
      "PayoutRequestTimelineMessage": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the message.",
            "readOnly": true,
            "maxLength": 50,
            "example": "tlm_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "type": {
            "type": "string",
            "description": "Type of timeline event.",
            "readOnly": true,
            "enum": [
              "timeline-comment-created",
              "payout-request-created",
              "payout-request-ready",
              "payout-request-returned-to-pending",
              "payout-request-approved",
              "payout-request-approval-undone",
              "payout-request-allocated",
              "payout-request-processing-started",
              "payout-request-fulfilled",
              "payout-request-canceled",
              "payout-request-reversed",
              "payout-request-blocked",
              "payout-request-unblocked"
            ]
          },
          "occurredTime": {
            "description": "Date and time when the timeline event occurred.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "triggeredBy": {
            "type": "string",
            "description": "Who or what triggered this event.",
            "readOnly": true,
            "enum": [
              "rebilly",
              "app",
              "direct-api"
            ]
          },
          "message": {
            "type": "string",
            "description": "Human-readable message describing the timeline event."
          },
          "extraData": {
            "$ref": "#/components/schemas/TimelineExtraData"
          }
        },
        "required": [
          "id",
          "type",
          "occurredTime",
          "triggeredBy",
          "message",
          "extraData"
        ]
      },
      "PayoutRequestBatch": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the batch.",
            "maxLength": 50,
            "example": "preq_batch_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "userId": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the user who created the batch.",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "status": {
            "description": "Status of the batch.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "processing",
              "completed",
              "failed"
            ],
            "x-enumDescriptions": {
              "pending": "Batch is pending processing.",
              "processing": "Batch is currently being processed.",
              "completed": "Batch processing has completed.",
              "failed": "Batch processing has failed."
            }
          },
          "totalCount": {
            "description": "Total number of payout requests in the batch.",
            "type": "integer",
            "readOnly": true,
            "minimum": 0,
            "example": 10
          },
          "successCount": {
            "description": "Number of payout requests successfully processed.",
            "type": "integer",
            "readOnly": true,
            "minimum": 0,
            "example": 8
          },
          "failureCount": {
            "description": "Number of payout requests that failed to process.",
            "type": "integer",
            "readOnly": true,
            "minimum": 0,
            "example": 2
          },
          "customerCount": {
            "description": "Number of unique customers in the batch.",
            "type": "integer",
            "readOnly": true,
            "minimum": 0,
            "example": 3
          },
          "totalAmountByCurrency": {
            "description": "Total payout amount grouped by currency in the batch.",
            "type": "array",
            "readOnly": true,
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "currency",
                "amount"
              ],
              "properties": {
                "currency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "amount": {
                  "type": "number"
                }
              }
            }
          },
          "description": {
            "description": "Optional description of the batch.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255,
            "example": "Batch processed on 2024-01-15"
          },
          "createdTime": {
            "description": "Date and time when the batch was created.",
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "description": "Date and time when the batch was last updated.",
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "payoutRequests"
                  ]
                }
              }
            }
          }
        }
      },
      "OrderPreview": {
        "type": "object",
        "required": [
          "websiteId",
          "items"
        ],
        "properties": {
          "websiteId": {
            "writeOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/WebsiteId"
              }
            ]
          },
          "items": {
            "description": "Items details.",
            "type": "array",
            "writeOnly": true,
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "planId"
              ],
              "properties": {
                "planId": {
                  "type": "string",
                  "description": "ID of the plan.",
                  "maxLength": 50,
                  "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                },
                "quantity": {
                  "description": "Number of product units in the specified plan.",
                  "type": "integer"
                }
              }
            }
          },
          "billingAddress": {
            "description": "Billing address details.",
            "writeOnly": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "deliveryAddress": {
            "description": "Delivery address details.",
            "writeOnly": true,
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "couponIds": {
            "type": "array",
            "writeOnly": true,
            "description": "List of coupons that are applied to the order.",
            "items": {
              "type": "string"
            }
          },
          "currency": {
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "lineItems": {
            "type": "array",
            "description": "List of purchase items.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "description": "Type of transaction.",
                  "type": "string",
                  "enum": [
                    "debit",
                    "credit"
                  ]
                },
                "description": {
                  "description": "Description of the purchase item.",
                  "type": "string"
                },
                "unitPrice": {
                  "description": "Unit price of the purchase item.",
                  "type": "number",
                  "format": "double",
                  "example": 49.95
                },
                "quantity": {
                  "description": "Total quantity of the purchase item.",
                  "type": "number",
                  "format": "integer"
                },
                "price": {
                  "description": "Total cost of the purchase item.",
                  "type": "number",
                  "format": "double"
                },
                "planId": {
                  "type": "string",
                  "description": "ID of the related plan.",
                  "maxLength": 50,
                  "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                },
                "productId": {
                  "type": "string",
                  "description": "ID of the related product.",
                  "maxLength": 50,
                  "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
                }
              }
            }
          },
          "shippingRates": {
            "type": "array",
            "description": "Available shipping rates.",
            "readOnly": true,
            "items": {
              "$ref": "#/components/schemas/ShippingOption"
            }
          },
          "taxes": {
            "type": "array",
            "description": "Taxes applied to the purchase.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "amount": {
                  "description": "Amount of tax that is due.",
                  "type": "number",
                  "format": "double"
                },
                "description": {
                  "type": "string",
                  "description": "Description of the tax."
                }
              }
            }
          },
          "discounts": {
            "type": "array",
            "description": "Discounts applied to the purchase.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "couponId": {
                  "type": "string",
                  "description": "ID of a coupon that is associated with the purchase.",
                  "maxLength": 50,
                  "example": "cpn_0YVCNKF81GD778N4YNVGDJK558"
                },
                "amount": {
                  "description": "Total amount of discount from the coupon.",
                  "type": "number",
                  "format": "double"
                },
                "description": {
                  "description": "Description of the discount.",
                  "type": "string"
                }
              }
            }
          },
          "subtotalAmount": {
            "description": "Subtotal amount of the purchase.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "taxAmount": {
            "description": "Tax amount of the purchase.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "shippingAmount": {
            "description": "Shipping amount of the purchase.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "discountsAmount": {
            "description": "Total discount amount of the purchase.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "total": {
            "description": "Total amount of the purchase.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "initialAmounts": {
            "type": "object",
            "description": "Total amounts of the initial invoice.\nThis displays the amount the customer pays initially.",
            "readOnly": true,
            "properties": {
              "amount": {
                "description": "Total amount of the initial invoice.",
                "type": "number",
                "x-type": "Money",
                "format": "double"
              },
              "subtotalAmount": {
                "description": "Subtotal amount of the initial invoice.",
                "type": "number",
                "x-type": "Money",
                "format": "double"
              },
              "discountAmount": {
                "description": "Discount amount applied to the initial invoice.",
                "type": "number",
                "x-type": "Money",
                "format": "double"
              },
              "shippingAmount": {
                "description": "Shipping amount applied to the initial invoice.",
                "type": "number",
                "x-type": "Money",
                "format": "double"
              },
              "taxAmount": {
                "description": "Tax amount applied to the initial invoice.",
                "type": "number",
                "x-type": "Money",
                "format": "double"
              }
            }
          },
          "recurringAmounts": {
            "type": [
              "object",
              "null"
            ],
            "description": "Total amounts of the recurring invoice.\nThis includes recurring items only.\nIf the order does not have recurring items, the value of this field is `null`.",
            "readOnly": true,
            "properties": {
              "amount": {
                "description": "Total amount of the recurring invoice.",
                "type": "number",
                "x-type": "Money",
                "format": "double"
              },
              "subtotalAmount": {
                "description": "Subtotal amount of the recurring invoice.",
                "type": "number",
                "x-type": "Money",
                "format": "double"
              },
              "discountAmount": {
                "description": "Discount amount applied to the recurring invoice.",
                "type": "number",
                "x-type": "Money",
                "format": "double"
              },
              "shippingAmount": {
                "description": "Shipping amount applied to the recurring invoice.",
                "type": "number",
                "x-type": "Money",
                "format": "double"
              },
              "taxAmount": {
                "description": "Tax amount applied to the recurring invoice.",
                "type": "number",
                "x-type": "Money",
                "format": "double"
              }
            }
          },
          "shipping": {
            "writeOnly": true,
            "$ref": "#/components/schemas/Shipping"
          }
        }
      },
      "EventType": {
        "type": "string",
        "description": "Type of Rebilly event.",
        "readOnly": true,
        "enum": [
          "account-password-reset-requested",
          "account-verification-requested",
          "aml-list-possibly-matched",
          "application-instance-disabled",
          "application-instance-enabled",
          "balance-transaction-settled",
          "coupon-application-removed",
          "coupon-applied",
          "coupon-expiration-modified",
          "coupon-expired",
          "coupon-issued",
          "coupon-modified",
          "coupon-redeemed",
          "coupon-redemption-canceled",
          "customer-created",
          "customer-one-time-password-requested",
          "customer-updated",
          "dispute-created",
          "dispute-modified",
          "experian-check-performed",
          "gateway-account-downtime-ended",
          "gateway-account-downtime-started",
          "gateway-account-limit-reached",
          "gateway-account-onboarding-completed",
          "gateway-account-onboarding-failed",
          "gateway-account-requested",
          "hard-usage-limit-reached",
          "invoice-abandoned",
          "invoice-issued",
          "invoice-modified",
          "invoice-paid",
          "invoice-partially-paid",
          "invoice-partially-refunded",
          "invoice-past-due",
          "invoice-past-due-reminder",
          "invoice-refunded",
          "invoice-revenue-recognized",
          "invoice-tax-calculation-failed",
          "invoice-voided",
          "kyc-document-accepted",
          "kyc-document-modified",
          "kyc-document-rejected",
          "kyc-request-fulfilled",
          "order-abandon-reminder",
          "order-abandoned",
          "order-completed",
          "payment-card-created",
          "payment-card-expiration-reminder",
          "payment-card-expired",
          "payment-instrument-modified",
          "payout-request-created",
          "payout-request-modified",
          "quote-accepted",
          "quote-canceled",
          "quote-created",
          "quote-expired",
          "quote-issued",
          "quote-recalled",
          "quote-rejected",
          "quote-updated",
          "ready-to-pay-requested",
          "ready-to-payout-requested",
          "renewal-invoice-issued",
          "renewal-invoice-payment-canceled",
          "renewal-invoice-payment-declined",
          "risk-score-changed",
          "soft-usage-limit-reached",
          "subscription-activated",
          "subscription-canceled",
          "subscription-churned",
          "subscription-created",
          "subscription-downgraded",
          "subscription-items-changed",
          "subscription-modified",
          "subscription-pause-created",
          "subscription-pause-modified",
          "subscription-pause-revoked",
          "subscription-paused",
          "subscription-quantity-filled-limit-reached",
          "subscription-reactivated",
          "subscription-renewal-reminder",
          "subscription-renewed",
          "subscription-resumed",
          "subscription-trial-converted",
          "subscription-trial-end-changed",
          "subscription-trial-end-reminder",
          "subscription-trial-ended",
          "subscription-upgraded",
          "transaction-amount-discrepancy-found",
          "transaction-declined",
          "transaction-discrepancy-found",
          "transaction-process-requested",
          "transaction-processed",
          "trial-usage-limit-reached",
          "order-delinquency-reached",
          "autodeposit-lookup-performed"
        ]
      },
      "EddScore": {
        "type": "string",
        "enum": [
          "not-found",
          "unlikely",
          "unclear",
          "probable",
          "confirmed"
        ]
      },
      "EddScoreDetails": {
        "type": "object",
        "properties": {
          "url": {
            "type": "string",
            "format": "uri",
            "description": "URL from which the score is obtained."
          },
          "details": {
            "type": "string",
            "description": "Text from which the score is obtained."
          }
        }
      },
      "Edd": {
        "type": "object",
        "properties": {
          "parsedScore": {
            "type": "object",
            "properties": {
              "occupation": {
                "$ref": "#/components/schemas/EddScore"
              },
              "arrest": {
                "$ref": "#/components/schemas/EddScore"
              },
              "bankruptcy": {
                "$ref": "#/components/schemas/EddScore"
              },
              "fraud": {
                "$ref": "#/components/schemas/EddScore"
              },
              "occupationDetails": {
                "$ref": "#/components/schemas/EddScoreDetails"
              },
              "arrestDetails": {
                "$ref": "#/components/schemas/EddScoreDetails"
              },
              "bankruptcyDetails": {
                "$ref": "#/components/schemas/EddScoreDetails"
              },
              "fraudDetails": {
                "$ref": "#/components/schemas/EddScoreDetails"
              }
            }
          },
          "score": {
            "type": "object",
            "properties": {
              "occupation": {
                "$ref": "#/components/schemas/EddScore"
              },
              "arrest": {
                "$ref": "#/components/schemas/EddScore"
              },
              "bankruptcy": {
                "$ref": "#/components/schemas/EddScore"
              },
              "fraud": {
                "$ref": "#/components/schemas/EddScore"
              }
            }
          },
          "nextUpdateTime": {
            "description": "Date and time in ISO 8601 format when the EDD score is updated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self"
                  ]
                }
              }
            }
          }
        }
      },
      "EddTimeline": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the timeline message.",
            "readOnly": true,
            "maxLength": 50,
            "example": "tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC"
          },
          "type": {
            "description": "Type of timeline message.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "edd-search-performed",
              "edd-score-manually-updated",
              "timeline-comment-created"
            ]
          },
          "triggeredBy": {
            "description": "Specifies who, or what, triggered the timeline event.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "rebilly",
              "app",
              "direct-api"
            ]
          },
          "message": {
            "description": "Detailed message description.",
            "type": "string"
          },
          "extraData": {
            "$ref": "#/components/schemas/TimelineExtraData"
          },
          "occurredTime": {
            "description": "Date and time when the customer timeline custom event occurs.",
            "readOnly": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "EddSearchResult": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the EDD search result.",
            "maxLength": 50,
            "example": "cus_edd_01H057XGZ62JZED3P8DWAXPAE6"
          },
          "type": {
            "type": "string",
            "readOnly": true,
            "enum": [
              "occupation",
              "arrest",
              "fraud",
              "bankruptcy"
            ]
          },
          "searchResultData": {
            "type": "array",
            "readOnly": true,
            "items": {
              "$ref": "#/components/schemas/EddScoreDetails"
            }
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          }
        }
      },
      "RiskScoreBoolean": {
        "type": [
          "object",
          "null"
        ],
        "required": [
          "value"
        ],
        "properties": {
          "value": {
            "type": "integer",
            "description": "Value added to the risk score of the transaction."
          }
        }
      },
      "RiskScoreBracket": {
        "type": [
          "object",
          "null"
        ],
        "required": [
          "brackets"
        ],
        "properties": {
          "brackets": {
            "description": "Risk factor values range with corresponding risk score increment value.\nThe first matched bracket is applied.",
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "value"
              ],
              "properties": {
                "start": {
                  "description": "Minimal risk factor value when condition is applied.",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "minimum": 0
                },
                "end": {
                  "description": "Maximal risk factor value when condition is applied.",
                  "type": [
                    "integer",
                    "null"
                  ],
                  "minimum": 1
                },
                "value": {
                  "type": "integer",
                  "description": "Value added to the risk score of the transaction."
                }
              },
              "anyOf": [
                {
                  "required": [
                    "start"
                  ]
                },
                {
                  "required": [
                    "end"
                  ]
                }
              ]
            }
          }
        }
      },
      "RiskScoreRules": {
        "type": "object",
        "description": "Risk score rules.",
        "required": [
          "isProxy",
          "isVpn",
          "isTor",
          "isHosting",
          "hasMismatchedBillingAddressCountry",
          "hasMismatchedBankCountry",
          "hasMismatchedTimeZone",
          "hasMismatchedHolderName",
          "hasFakeName",
          "isHighRiskCountry",
          "paymentInstrumentVelocity",
          "declinedPaymentInstrumentVelocity",
          "deviceVelocity",
          "ipVelocity",
          "emailVelocity",
          "billingAddressVelocity",
          "isRebill",
          "isRetry",
          "customerLifetimeValue",
          "browserAdBlockEnabled",
          "paymentInstrumentApprovedTransactionCount",
          "customerVelocity"
        ],
        "properties": {
          "isProxy": {
            "description": "Specifies whether the customer's IP address is related to a proxy.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "isVpn": {
            "description": "Specifies whether the customer's IP address is related to a VPN.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "isTor": {
            "description": "Specifies whether the customer's IP address is related to TOR.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "isHosting": {
            "description": "Specifies whether the customer's IP address is related to hosting.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "hasMismatchedBillingAddressCountry": {
            "description": "Specifies whether the customer's billing address country and geo-IP address are not the same.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "hasMismatchedBankCountry": {
            "description": "Specifies whether the customer's bank country and geo-IP address are not the same.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "hasMismatchedTimeZone": {
            "description": "Specifies whether the customer's browser time zone and the IP address associated time zone are not the same.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "hasMismatchedHolderName": {
            "description": "Specifies whether the customer's billing address name and primary address name are not the same.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "hasFakeName": {
            "description": "Specifies whether the holder name seems fake.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "isHighRiskCountry": {
            "description": "Specifies whether the geo-IP country, or the customer's billing country, is considered a high risk country.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "paymentInstrumentVelocity": {
            "description": "Number of transactions for this payment instrument, based on fingerprint, in the last 24 hours.",
            "$ref": "#/components/schemas/RiskScoreBracket"
          },
          "declinedPaymentInstrumentVelocity": {
            "description": "Number of declined transactions for this payment instrument fingerprint in the last 24 hours.",
            "$ref": "#/components/schemas/RiskScoreBracket"
          },
          "deviceVelocity": {
            "description": "Number of transactions for this device, based on fingerprint, in the last 24 hours.",
            "$ref": "#/components/schemas/RiskScoreBracket"
          },
          "ipVelocity": {
            "description": "Number of transactions for this IP address in the last 24 hours.",
            "$ref": "#/components/schemas/RiskScoreBracket"
          },
          "emailVelocity": {
            "description": "Number of transactions for this email address in the last 24 hours.",
            "$ref": "#/components/schemas/RiskScoreBracket"
          },
          "billingAddressVelocity": {
            "description": "Number of transactions for this billing address in the last 24 hours.",
            "$ref": "#/components/schemas/RiskScoreBracket"
          },
          "isRebill": {
            "description": "Specifies whether the transaction is one of a number of recurring payments in a subscription, excluding trials or setup fees.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "isRetry": {
            "description": "Specifies whether the transaction is a retry.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "customerLifetimeValue": {
            "description": "Total revenue from the customer, in USD.",
            "$ref": "#/components/schemas/RiskScoreBracket"
          },
          "browserAdBlockEnabled": {
            "description": "Specifies whether an ad blocker was detected.",
            "$ref": "#/components/schemas/RiskScoreBoolean"
          },
          "paymentInstrumentApprovedTransactionCount": {
            "description": "Number of approved transactions for this payment instrument.",
            "$ref": "#/components/schemas/RiskScoreBracket"
          },
          "customerVelocity": {
            "description": "Number of transactions for this customer in the last 24 hours.",
            "$ref": "#/components/schemas/RiskScoreBracket"
          }
        }
      },
      "RiskScoreBlocklistPermanentRule": {
        "type": "object",
        "description": "Rule that permanently blocklists items when TTL is equal to `0`.",
        "required": [
          "riskScoreThreshold"
        ],
        "properties": {
          "riskScoreThreshold": {
            "type": "integer",
            "description": "Pass and fail threshold for the blocklist.",
            "minimum": 1
          }
        }
      },
      "RiskScoreBlocklistPermanentRules": {
        "type": [
          "object",
          "null"
        ],
        "description": "Items permanently blocklisted when TTL is equal to `0`.",
        "properties": {
          "address": {
            "description": "House number and ZIP code of the customer's address.",
            "$ref": "#/components/schemas/RiskScoreBlocklistPermanentRule"
          },
          "bankAccount": {
            "description": "Bank account for the charge.",
            "$ref": "#/components/schemas/RiskScoreBlocklistPermanentRule"
          },
          "bin": {
            "description": "Bank Identification Number (BIN) of the payment card for the charge.",
            "$ref": "#/components/schemas/RiskScoreBlocklistPermanentRule"
          },
          "country": {
            "description": "Country where the customer is making the purchase, and country of the payment card billing address.",
            "$ref": "#/components/schemas/RiskScoreBlocklistPermanentRule"
          },
          "customerId": {
            "description": "Rebilly `customerId` of the customer making the purchase.",
            "$ref": "#/components/schemas/RiskScoreBlocklistPermanentRule"
          },
          "email": {
            "description": "Email address of the customer making the purchase.",
            "$ref": "#/components/schemas/RiskScoreBlocklistPermanentRule"
          },
          "emailDomain": {
            "description": "Email address domain of the customer making the purchase.",
            "$ref": "#/components/schemas/RiskScoreBlocklistPermanentRule"
          },
          "fingerprint": {
            "description": "Fingerprint of the user's device.\nA device fingerprint is a unique token that is used to identify the user.\nThe device fingerprint is generated based on device attributes,\nsuch as: hardware, software, IP address, language, browser, and more.",
            "$ref": "#/components/schemas/RiskScoreBlocklistPermanentRule"
          },
          "ipAddress": {
            "description": "IP address of the customer making the purchase.",
            "$ref": "#/components/schemas/RiskScoreBlocklistPermanentRule"
          },
          "paymentCard": {
            "description": "Payment card number being charged.",
            "$ref": "#/components/schemas/RiskScoreBlocklistPermanentRule"
          }
        }
      },
      "RiskScoreBlocklistTemporaryRule": {
        "type": "object",
        "description": "Items temporarily blocklisted when TTL is greater than `0`.",
        "required": [
          "riskScoreThreshold",
          "ttl"
        ],
        "properties": {
          "riskScoreThreshold": {
            "type": "integer",
            "description": "Pass and fail threshold for the blocklist.",
            "minimum": 1
          },
          "ttl": {
            "type": "integer",
            "description": "Amount of seconds a blocklist exists before it expires.\nThis value must be greater than 0.",
            "minimum": 1
          }
        }
      },
      "RiskScoreBlocklistTemporaryRules": {
        "type": [
          "object",
          "null"
        ],
        "description": "Items temporarily blocklisted when TTL is greater than `0`.",
        "properties": {
          "address": {
            "description": "House number and ZIP code of the customer's address.",
            "$ref": "#/components/schemas/RiskScoreBlocklistTemporaryRule"
          },
          "bankAccount": {
            "description": "Bank account for the charge.",
            "$ref": "#/components/schemas/RiskScoreBlocklistTemporaryRule"
          },
          "bin": {
            "description": "Bank Identification Number (BIN) of the payment card for the charge.",
            "$ref": "#/components/schemas/RiskScoreBlocklistTemporaryRule"
          },
          "country": {
            "description": "Country where the customer is making the purchase, and country of the payment card billing address.",
            "$ref": "#/components/schemas/RiskScoreBlocklistTemporaryRule"
          },
          "customerId": {
            "description": "Rebilly `customerId` of the customer making the purchase.",
            "$ref": "#/components/schemas/RiskScoreBlocklistTemporaryRule"
          },
          "email": {
            "description": "Email address of the customer making the purchase.",
            "$ref": "#/components/schemas/RiskScoreBlocklistTemporaryRule"
          },
          "emailDomain": {
            "description": "Email address domain of the customer making the purchase.",
            "$ref": "#/components/schemas/RiskScoreBlocklistTemporaryRule"
          },
          "fingerprint": {
            "description": "Fingerprint of the user's device.\nA device fingerprint is a unique token that is used to identify the user.\nThe device fingerprint is generated based on device attributes,\nsuch as: hardware, software, IP address, language, browser, and more.",
            "$ref": "#/components/schemas/RiskScoreBlocklistTemporaryRule"
          },
          "ipAddress": {
            "description": "IP address of the customer making the purchase.",
            "$ref": "#/components/schemas/RiskScoreBlocklistTemporaryRule"
          },
          "paymentCard": {
            "description": "Payment card number for the charge.",
            "$ref": "#/components/schemas/RiskScoreBlocklistTemporaryRule"
          }
        }
      },
      "RiskScoreBlocklist": {
        "type": "object",
        "description": "Risk score blocklist configuration.",
        "properties": {
          "permanentlyBlockList": {
            "description": "Items permanently blocklisted when TTL is equal to `0`.",
            "$ref": "#/components/schemas/RiskScoreBlocklistPermanentRules"
          },
          "temporaryBlockList": {
            "description": "Items temporarily blocklisted when TTL is greater than `0`.",
            "$ref": "#/components/schemas/RiskScoreBlocklistTemporaryRules"
          }
        }
      },
      "Allowlist": {
        "type": "object",
        "description": "Risk score allowlist record.",
        "required": [
          "type",
          "value"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the allowlist record.",
            "readOnly": true,
            "maxLength": 50,
            "example": "rsal_01HXBY67D5CNWM2YK79PFZR4C2"
          },
          "type": {
            "type": "string",
            "description": "Type of data to exclude from risk score checks.\nData types that are added to this field are excluded from risk score checks and are not added to blocklists.",
            "enum": [
              "address",
              "bank-account",
              "bin",
              "country",
              "customer-id",
              "email",
              "email-domain",
              "fingerprint",
              "ip-address",
              "payment-card"
            ]
          },
          "value": {
            "type": "string",
            "description": "Value of the allowlist record."
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "GlobalEventType": {
        "type": "string",
        "description": "Type of event.",
        "enum": [
          "aml-list-possibly-matched",
          "application-instance-disabled",
          "application-instance-enabled",
          "autodeposit-lookup-performed",
          "balance-transaction-settled",
          "coupon-application-removed",
          "coupon-applied",
          "coupon-expiration-modified",
          "coupon-expired",
          "coupon-issued",
          "coupon-modified",
          "coupon-redeemed",
          "coupon-redemption-canceled",
          "credit-memo-applied",
          "credit-memo-created",
          "credit-memo-modified",
          "credit-memo-partially-applied",
          "credit-memo-voided",
          "customer-created",
          "customer-merged",
          "customer-one-time-password-requested",
          "customer-redirected-offsite",
          "customer-returned",
          "customer-tax-number-validated",
          "customer-updated",
          "data-export-completed",
          "dispute-created",
          "dispute-modified",
          "experian-check-performed",
          "gateway-account-downtime-ended",
          "gateway-account-downtime-started",
          "gateway-account-limit-reached",
          "gateway-account-onboarding-completed",
          "gateway-account-onboarding-failed",
          "gateway-account-requested",
          "hard-usage-limit-reached",
          "invoice-abandoned",
          "invoice-created",
          "invoice-issued",
          "invoice-modified",
          "invoice-paid",
          "invoice-partially-paid",
          "invoice-partially-refunded",
          "invoice-past-due",
          "invoice-past-due-reminder",
          "invoice-refunded",
          "invoice-reissued",
          "invoice-tax-calculation-failed",
          "invoice-voided",
          "kyc-document-accepted",
          "kyc-document-archived",
          "kyc-document-created",
          "kyc-document-modified",
          "kyc-document-rejected",
          "kyc-document-reviewed",
          "kyc-request-attempted",
          "kyc-request-failed",
          "kyc-request-fulfilled",
          "kyc-request-partially-fulfilled",
          "lead-source-changed",
          "offsite-payment-completed",
          "order-abandon-reminder",
          "order-abandoned",
          "order-completed",
          "order-delinquency-reached",
          "organization-tax-number-validated",
          "payment-card-created",
          "payment-card-expiration-reminder",
          "payment-card-expired",
          "payment-instrument-modified",
          "payout-request-canceled",
          "payout-request-created",
          "payout-request-fulfilled",
          "payout-request-modified",
          "payout-request-reversed",
          "quote-accepted",
          "quote-canceled",
          "quote-created",
          "quote-expired",
          "quote-issued",
          "quote-recalled",
          "quote-rejected",
          "quote-updated",
          "ready-to-pay-requested",
          "renewal-invoice-issued",
          "renewal-invoice-payment-canceled",
          "renewal-invoice-payment-declined",
          "risk-score-changed",
          "soft-usage-limit-reached",
          "subscription-activated",
          "subscription-canceled",
          "subscription-churned",
          "subscription-created",
          "subscription-downgraded",
          "subscription-items-changed",
          "subscription-modified",
          "subscription-pause-created",
          "subscription-pause-modified",
          "subscription-pause-revoked",
          "subscription-paused",
          "subscription-quantity-filled-limit-reached",
          "subscription-reactivated",
          "subscription-renewal-reminder",
          "subscription-renewed",
          "subscription-resumed",
          "subscription-trial-converted",
          "subscription-trial-end-reminder",
          "subscription-trial-ended",
          "subscription-upgraded",
          "transaction-amount-discrepancy-found",
          "transaction-declined",
          "transaction-discrepancy-found",
          "transaction-process-requested",
          "transaction-processed",
          "transaction-reconciled",
          "transaction-timeout-resolved",
          "trial-usage-limit-reached",
          "waiting-gateway-transaction-completed"
        ]
      },
      "TagUntagRule": {
        "type": "object",
        "description": "Tag or untag rule.",
        "required": [
          "name",
          "eventType",
          "addTags",
          "removeTags"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the rule.",
            "readOnly": true,
            "maxLength": 50,
            "example": "tag_rule_0YVCEE5APAD7V84MK3P9CCJVYY"
          },
          "name": {
            "description": "Name of the rule.",
            "type": "string"
          },
          "eventType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/GlobalEventType"
              },
              {
                "not": {
                  "enum": [
                    "application-instance-disabled",
                    "application-instance-enabled",
                    "balance-transaction-settled",
                    "credit-memo-applied",
                    "credit-memo-created",
                    "credit-memo-modified",
                    "credit-memo-partially-applied",
                    "credit-memo-voided",
                    "customer-redirected-offsite",
                    "customer-returned",
                    "dispute-created",
                    "dispute-modified",
                    "gateway-account-downtime-ended",
                    "gateway-account-downtime-started",
                    "gateway-account-limit-reached",
                    "gateway-account-onboarding-completed",
                    "gateway-account-onboarding-failed",
                    "gateway-account-requested",
                    "invoice-created",
                    "invoice-modified",
                    "invoice-past-due-reminder",
                    "invoice-tax-calculation-failed",
                    "offsite-payment-completed",
                    "order-abandon-reminder",
                    "organization-tax-number-validated",
                    "payment-card-created",
                    "payment-card-expiration-reminder",
                    "payment-instrument-modified",
                    "renewal-invoice-payment-canceled",
                    "risk-score-changed",
                    "subscription-items-changed",
                    "subscription-modified",
                    "subscription-pause-created",
                    "subscription-pause-modified",
                    "subscription-pause-revoked",
                    "subscription-renewal-reminder",
                    "subscription-trial-converted",
                    "subscription-trial-end-changed",
                    "subscription-trial-end-reminder",
                    "subscription-trial-ended",
                    "transaction-process-requested",
                    "transaction-reconciled",
                    "transaction-timeout-resolved",
                    "waiting-gateway-transaction-completed",
                    "data-export-completed",
                    "hard-usage-limit-reached",
                    "soft-usage-limit-reached",
                    "subscription-quantity-filled-limit-reached"
                  ]
                }
              }
            ]
          },
          "filter": {
            "description": "Filter that determines whether to tag or untag.\nThis field requires a special format.\nUse `,` for multiple allowed values.\nUse `;` for multiple fields.\n\nFor more information,\nsee [Using filters](https://api-reference.rebilly.com/#section/Using-filter-with-collections).",
            "type": [
              "string",
              "null"
            ]
          },
          "addTags": {
            "description": "List of tags to add to the customer.",
            "type": "array",
            "minItems": 0,
            "maxItems": 1000,
            "items": {
              "type": "string"
            }
          },
          "removeTags": {
            "description": "List of tags to remove for the customer.",
            "type": "array",
            "minItems": 0,
            "maxItems": 1000,
            "items": {
              "type": "string"
            }
          },
          "status": {
            "description": "Status of the rule.",
            "type": "string",
            "default": "active",
            "enum": [
              "active",
              "inactive"
            ]
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related resource links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self"
                  ]
                }
              }
            }
          }
        }
      },
      "Organization": {
        "type": "object",
        "required": [
          "name",
          "country"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique organization identifier.\nAn organization is an entity that represents a company.\nFor more information, see [Obtain an organization ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).",
            "readOnly": true,
            "maxLength": 50,
            "example": "org_0YVDM8RC7GDADADSBSMW124JA8"
          },
          "name": {
            "description": "Name of the organization.",
            "type": "string",
            "maxLength": 60,
            "x-sortable": true
          },
          "website": {
            "description": "Website URL of the organization.\nThis value must begin with `https://` or `http://`.",
            "type": "string",
            "maxLength": 65,
            "writeOnly": true,
            "format": "uri",
            "example": "https://example.com"
          },
          "address": {
            "description": "Street address of the organization.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 60,
            "x-sortable": true
          },
          "address2": {
            "description": "Second line of the street address.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 60,
            "x-sortable": true
          },
          "city": {
            "description": "City where the organization is located.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 45,
            "x-sortable": true
          },
          "region": {
            "description": "Region or state where the organization is located.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 45,
            "x-sortable": true
          },
          "country": {
            "description": "Country where the organization is located, in [ISO Alpha-2 code format](https://www.iso.org/obp/ui/#search/code/).",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[A-Z]{2}$",
            "x-sortable": true
          },
          "postalCode": {
            "description": "Postal code of the organization.",
            "type": "string",
            "maxLength": 10,
            "x-sortable": true
          },
          "phoneNumbers": {
            "$ref": "#/components/schemas/ContactPhoneNumbers"
          },
          "emails": {
            "$ref": "#/components/schemas/ContactEmails"
          },
          "taxDescriptor": {
            "description": "Tax label of the organization.\nThis information is displayed on the invoice.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "invoiceTimeZone": {
            "description": "Specifies the time zone to display on an invoice.\nUTC is used by default.",
            "type": "string",
            "maxLength": 50,
            "example": "America/New_York"
          },
          "reportCurrency": {
            "description": "Currency to use for conversion in reports.\nThis value cannot be changed.",
            "type": "string",
            "pattern": "^[A-Z]{3}$",
            "example": "USD"
          },
          "questionnaire": {
            "type": [
              "object",
              "null"
            ],
            "description": "Organization questionnaire.",
            "properties": {
              "role": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Role of the owner."
              },
              "monthlyTransactions": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Amount of monthly processed transactions."
              },
              "products": {
                "type": [
                  "array",
                  "null"
                ],
                "description": "List of products the organization is interested in.",
                "items": {
                  "type": "string"
                }
              },
              "integrationType": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Type of integration the organization would like."
              },
              "launchTiming": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "When the organization would like to go live."
              }
            }
          },
          "settings": {
            "type": "object",
            "description": "Organization settings.",
            "properties": {
              "defaultTaxCalculator": {
                "type": "object",
                "description": "Tax calculation settings.",
                "required": [
                  "type"
                ],
                "properties": {
                  "type": {
                    "type": "string",
                    "description": "Type of tax calculator.",
                    "enum": [
                      "taxjar",
                      "avalara",
                      "flat"
                    ]
                  },
                  "rate": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "format": "float",
                    "description": "Rate for flat tax calculation."
                  }
                }
              },
              "billing": {
                "description": "Global organization settings for billing.",
                "type": [
                  "object",
                  "null"
                ],
                "properties": {
                  "pendingOrderTtl": {
                    "description": "Length of time, in ISO-8601 durations format, before which a pending order is automatically abandoned.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "example": "P7D",
                    "default": null
                  },
                  "orderDelinquencyPeriod": {
                    "description": "Length of time, in ISO-8601 durations format,\nwhich is added to the due time of the order when setting the delinquency time for all related invoices.\nWhen the delinquency time of an invoice is reached, the order is automatically canceled.\n\n> **Important:**\nIf the `delinquencyPeriod` value is `null`,\nthe order does not change state and remains active.\nYou must explicitly configure the delinquency period to enable automatic cancellation of unpaid orders.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "example": "P7D",
                    "default": null
                  },
                  "subtractRecurringDiscountsFromMrr": {
                    "description": "Specifies whether recurring discounts with a specified end date or usage limit are subtracted from order MRR in metrics calculations.\nIf this value is `true`, recurring discounts are excluded from order MRR.\n\n> **Note:** Recurring discounts with no specified end date and usage limit are automatically subtracted from order MRR.",
                    "type": "boolean",
                    "default": false,
                    "example": true
                  },
                  "subtractOneTimeDiscountsFromMrr": {
                    "description": "Specifies whether one-time discounts are subtracted from order MRR in metrics calculation.\nIf this value is `true`, one-time discounts are excluded from order MRR.",
                    "type": "boolean",
                    "default": false,
                    "example": true
                  }
                }
              },
              "taxLocations": {
                "type": "array",
                "description": "Additional organization addresses where a merchant may want to collect taxes using the `taxjar` tax calculator.\n\nAvailable only for US-based organizations.",
                "items": {
                  "type": "object",
                  "required": [
                    "country"
                  ],
                  "properties": {
                    "address": {
                      "description": "Street address of the tax location.",
                      "type": [
                        "string",
                        "null"
                      ],
                      "maxLength": 60
                    },
                    "city": {
                      "description": "City of the tax location.",
                      "type": [
                        "string",
                        "null"
                      ],
                      "maxLength": 45
                    },
                    "region": {
                      "description": "Region or state of the tax location.",
                      "type": [
                        "string",
                        "null"
                      ],
                      "maxLength": 45
                    },
                    "country": {
                      "description": "Country of the tax location, in [ISO Alpha-2 code format](https://www.iso.org/obp/ui/#search/code/).",
                      "type": "string",
                      "pattern": "^[A-Z]{2}$"
                    },
                    "postalCode": {
                      "description": "Postal code of the tax location.",
                      "type": [
                        "string",
                        "null"
                      ],
                      "maxLength": 10
                    }
                  }
                }
              },
              "notifications": {
                "description": "Organization access-related notification settings.",
                "type": "object",
                "properties": {
                  "notifyOnUserAccessChanges": {
                    "description": "Specifies whether to send notifications when users are created or updated.",
                    "type": "boolean",
                    "default": false
                  },
                  "notifyOnApiKeyAccessChanges": {
                    "description": "Specifies whether to send notifications when API keys are created or updated.",
                    "type": "boolean",
                    "default": false
                  },
                  "notificationEmailAddresses": {
                    "description": "List of email addresses to send notifications to.",
                    "type": "array",
                    "items": {
                      "type": "string",
                      "format": "email"
                    },
                    "default": []
                  }
                }
              }
            }
          },
          "taxNumbers": {
            "type": [
              "array",
              "null"
            ],
            "description": "Tax numbers of the organization.",
            "items": {
              "$ref": "#/components/schemas/TaxNumber"
            }
          },
          "features": {
            "type": "array",
            "description": "Organization features.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "name": {
                  "description": "Name of the feature.",
                  "type": "string"
                },
                "description": {
                  "description": "Description of the feature.",
                  "type": "string"
                }
              }
            }
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "attachments"
                  ]
                }
              }
            }
          }
        }
      },
      "CheckoutFormId": {
        "type": "string",
        "description": "ID of the checkout form.",
        "readOnly": true,
        "maxLength": 50,
        "example": "chkt_frm_0YV8XZ6174C2MBS5011SAZNMBP"
      },
      "CheckoutFormFixedPlan": {
        "title": "Fixed quantity",
        "type": "object",
        "required": [
          "planId",
          "type",
          "quantity"
        ],
        "properties": {
          "planId": {
            "type": "string",
            "description": "ID of the plan.",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
          },
          "type": {
            "description": "Type of plan. If this value is set to `fixed`,\ncustomers cannot choose the plan quantity.\nIf this value is set to `variable`,\ncustomers can choose the plan quantity.",
            "type": "string",
            "enum": [
              "fixed"
            ]
          },
          "quantity": {
            "description": "Quantity of the plan.",
            "type": "integer",
            "minimum": 1
          }
        }
      },
      "CheckoutFormVariablePlan": {
        "title": "Variable quantity",
        "type": "object",
        "required": [
          "planId",
          "type",
          "quantity"
        ],
        "properties": {
          "planId": {
            "type": "string",
            "description": "ID of the plan.",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
          },
          "type": {
            "description": "Type of plan. If this value is set to `variable`,\ncustomers can choose the plan quantity.\nIf this value is set to `fixed`,\ncustomers cannot choose the plan quantity.",
            "type": "string",
            "enum": [
              "variable"
            ]
          },
          "quantity": {
            "description": "Default plan quantity.",
            "type": "integer"
          },
          "minimum": {
            "description": "Minimum plan quantity.",
            "type": "integer",
            "minimum": 1,
            "default": 1
          },
          "multipleOf": {
            "description": "Multiple by which the plan quantity increases.",
            "type": "integer",
            "minimum": 1,
            "default": 1
          },
          "maximum": {
            "description": "Maximum plan quantity.",
            "type": "integer",
            "minimum": 1,
            "default": 100
          }
        }
      },
      "CheckoutFormPlan": {
        "type": "object",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "fixed": "#/components/schemas/CheckoutFormFixedPlan",
            "variable": "#/components/schemas/CheckoutFormVariablePlan"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/CheckoutFormFixedPlan"
          },
          {
            "$ref": "#/components/schemas/CheckoutFormVariablePlan"
          }
        ]
      },
      "CheckoutForm": {
        "type": "object",
        "required": [
          "name",
          "websiteId",
          "plans"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the checkout form.",
            "readOnly": true,
            "maxLength": 50,
            "example": "chkt_frm_0YV8XZ6174C2MBS5011SAZNMBP"
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "customDomain": {
            "description": "Custom domain for the checkout form.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "plans": {
            "type": "array",
            "description": "List of plans that are applied to a customer order by default.\nPlans describe how the customer must pay for products. For more information, see [Plans](https://www.rebilly.com/docs/dev-docs/api/plans/).",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/CheckoutFormPlan"
            }
          },
          "addonPlans": {
            "type": "array",
            "description": "List of add-on plans that are displayed to the customer on the payment screen.\nAdd-ons are plans that the customer has not already subscribed to.\n\nThe customer selects whether to add an add-on plan to their current order.",
            "default": [],
            "items": {
              "$ref": "#/components/schemas/CheckoutFormPlan"
            }
          },
          "bumpPlans": {
            "type": "array",
            "description": "List of bump plans that are displayed to the customer on the payment screen.\nUse bump plans to offer purchase bonuses, discounts, and deals to the customer.\n\nThe customer selects whether to purchase bump plans,\nor to use the plans that are specified in their current order.",
            "default": [],
            "items": {
              "$ref": "#/components/schemas/CheckoutFormPlan"
            }
          },
          "accountsEnabled": {
            "description": "Specifies if the account is enabled.\nIf this value is `true`, the customer can sign-up and sign-in using the checkout form.",
            "type": "boolean",
            "default": false
          },
          "couponsEnabled": {
            "description": "Specifies if coupons are enabled in the checkout form.\nIf this value is `true`, the customer can use coupons in the checkout form.\nUse coupons to reward customers, generate sales, or to test new pricing strategies.",
            "type": "boolean",
            "default": false
          },
          "purchaseLimit": {
            "description": "Limits the number of purchases that can be made using a specific checkout form.\nIf a purchase limit value is set, each purchase decreases this value.\nWhen the purchases limit value reaches zero, the checkout form becomes inactive.",
            "type": [
              "integer",
              "null"
            ],
            "minimum": 0,
            "default": null
          },
          "paymentMethods": {
            "description": "List of available payment methods.\nPayment methods must have at least one active gateway account.\nIf not specified, all available payment methods are displayed.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentMethod"
            }
          },
          "customization": {
            "description": "Visual customization options for the checkout form.",
            "type": "object",
            "properties": {
              "logoId": {
                "description": "ID of the linked file object.",
                "type": [
                  "string",
                  "null"
                ],
                "maxLength": 50,
                "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
              },
              "summary": {
                "description": "Summary text.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "buttonText": {
                "description": "Button text.\nUse the `{{amount}}` placeholder to display the checkout form total.",
                "type": "string",
                "default": "Pay {{amount}}"
              },
              "colors": {
                "description": "Primary color used in the checkout form and button text.",
                "type": "object",
                "properties": {
                  "primary": {
                    "description": "Primary color for the checkout form in hexadecimal format.",
                    "type": "string",
                    "maxLength": 6,
                    "default": "0044d4"
                  },
                  "buttonText": {
                    "description": "Button text color for the checkout form in hexadecimal format.",
                    "type": "string",
                    "maxLength": 6,
                    "default": "ffffff"
                  }
                }
              },
              "links": {
                "description": "URLs that are displayed on the checkout form.",
                "type": "object",
                "properties": {
                  "refundPolicy": {
                    "description": "Website refund policy URL.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uri"
                  },
                  "privacyPolicy": {
                    "description": "Website privacy policy URL.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uri"
                  },
                  "termsOfService": {
                    "description": "Website terms of service URL.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "uri"
                  }
                }
              },
              "tracking": {
                "description": "Tracking system IDs.",
                "type": "object",
                "properties": {
                  "googleAnalytics": {
                    "description": "Google Analytics tracking ID.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "example": "UA-XXXXX-YY"
                  },
                  "googleTagManager": {
                    "description": "Google Tag Manager tracking ID.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "example": "GTM-XXXXX"
                  },
                  "gtagJs": {
                    "description": "Google Analytics tracking ID.\nThis value is used by Google Global Site Tag (gtag.js) service.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "example": "UA-XXXXX-YY"
                  },
                  "facebookPixel": {
                    "description": "Facebook Pixel tracking ID.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "example": "1234567890"
                  },
                  "segmentAnalytics": {
                    "description": "Segment Analytics tracking ID.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "example": "1234567890"
                  },
                  "heapIo": {
                    "description": "Heap.io tracking ID.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "example": "1234567890"
                  }
                }
              },
              "requiredAdditionalFields": {
                "description": "List of required fields.",
                "type": "array",
                "items": {
                  "type": "string"
                },
                "example": [
                  "information.companyName",
                  "information.phoneNumber"
                ]
              }
            }
          },
          "name": {
            "description": "Name of the checkout form.\nThis name value is for internal display, and is not visible to your customers.\nUse this name to locate and organize your checkout forms.",
            "type": "string"
          },
          "status": {
            "description": "Status of the checkout form. If the `status` value is `inactive`,\nthe checkout form URL produces a 404 error.",
            "type": "string",
            "enum": [
              "active",
              "inactive"
            ],
            "default": "active"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "Link URL.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "preview"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "responses": {
      "Unauthorized": {
        "description": "Unauthorized access.\nInvalid credentials used.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Unauthorized"
            }
          }
        }
      },
      "Forbidden": {
        "description": "Access forbidden.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Forbidden"
            }
          }
        }
      },
      "NotFound": {
        "description": "Resource not found.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/NotFound"
            }
          }
        }
      },
      "ValidationError": {
        "description": "Invalid data sent.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ValidationError"
            }
          }
        }
      },
      "TooManyRequests": {
        "description": "Request rate limit exceeded.",
        "headers": {
          "X-RateLimit-Retry-After": {
            "$ref": "#/components/headers/X-RateLimit-Retry-After"
          }
        },
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/TooManyRequests"
            }
          }
        }
      },
      "Conflict": {
        "description": "Conflict.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Conflict"
            }
          }
        }
      },
      "Customer": {
        "description": "Customer.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Customer"
            }
          }
        }
      },
      "Found": {
        "description": "Resource moved.",
        "headers": {
          "Location": {
            "schema": {
              "type": "string",
              "format": "uri"
            },
            "example": "https://api.rebilly.com/example"
          }
        }
      }
    },
    "requestBodies": {
      "Attachment": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Attachment"
            }
          }
        },
        "description": "Attachment resource.",
        "required": true
      },
      "Blocklist": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Blocklist"
            }
          }
        },
        "description": "Blocklist resource.",
        "required": true
      },
      "Coupon": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Coupon"
            }
          }
        },
        "description": "Coupon resource.",
        "required": true
      },
      "Customer": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Customer"
            }
          }
        },
        "description": "Customer resource.",
        "required": true
      },
      "Dispute": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "currency",
                "amount",
                "transactionId",
                "postedTime",
                "type",
                "status",
                "reasonCode"
              ],
              "properties": {
                "transactionId": {
                  "description": "ID of the disputed transaction.",
                  "$ref": "#/components/schemas/TransactionId"
                },
                "currency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "amount": {
                  "description": "Dispute amount.",
                  "type": "number",
                  "format": "double"
                },
                "acquirerReferenceNumber": {
                  "description": "Acquirer reference number for the dispute.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 255
                },
                "caseId": {
                  "description": "Case ID of the dispute.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 100
                },
                "reasonCode": {
                  "description": "Code used in the chargeback that describes the reason for the dispute.",
                  "type": "string",
                  "maxLength": 255,
                  "enum": [
                    "0",
                    "00",
                    "1",
                    "2",
                    "3",
                    "4",
                    "5",
                    "6",
                    "7",
                    "8",
                    "9",
                    "10.1",
                    "10.2",
                    "10.3",
                    "10.4",
                    "10.5",
                    "11.1",
                    "11.2",
                    "11.3",
                    "12",
                    "12.1",
                    "12.2",
                    "12.3",
                    "12.4",
                    "12.5",
                    "12.6",
                    "12.6.1",
                    "12.6.2",
                    "12.7",
                    "13.1",
                    "13.2",
                    "13.3",
                    "13.4",
                    "13.5",
                    "13.6",
                    "13.7",
                    "13.8",
                    "13.9",
                    "30",
                    "31",
                    "34",
                    "35",
                    "37",
                    "40",
                    "41",
                    "42",
                    "46",
                    "47",
                    "49",
                    "50",
                    "51",
                    "53",
                    "54",
                    "55",
                    "56",
                    "57",
                    "59",
                    "60",
                    "62",
                    "63",
                    "70",
                    "71",
                    "72",
                    "73",
                    "74",
                    "75",
                    "76",
                    "77",
                    "78",
                    "79",
                    "80",
                    "81",
                    "82",
                    "83",
                    "85",
                    "86",
                    "93",
                    "98",
                    "004",
                    "021",
                    "024",
                    "059",
                    "062",
                    "063",
                    "127",
                    "154",
                    "155",
                    "158",
                    "173",
                    "175",
                    "176",
                    "193",
                    "680",
                    "684",
                    "691",
                    "693",
                    "1000",
                    "2001",
                    "2002",
                    "2003",
                    "2004",
                    "2005",
                    "2008",
                    "2011",
                    "2700",
                    "2701",
                    "2702",
                    "2703",
                    "2704",
                    "2705",
                    "2706",
                    "2707",
                    "2708",
                    "2709",
                    "2710",
                    "2713",
                    "2870",
                    "2871",
                    "4807",
                    "4808",
                    "4812",
                    "4831",
                    "4834",
                    "4837",
                    "4840",
                    "4841",
                    "4842",
                    "4846",
                    "4849",
                    "4850",
                    "4853",
                    "4854",
                    "4855",
                    "4859",
                    "4860",
                    "4863",
                    "4870",
                    "4871",
                    "4901",
                    "4902",
                    "4903",
                    "4904",
                    "4905",
                    "4908",
                    "4999",
                    "4534",
                    "4541",
                    "4542",
                    "4550",
                    "4553",
                    "4586",
                    "4752",
                    "4753",
                    "4755",
                    "4865",
                    "4866",
                    "4867",
                    "7010",
                    "7030",
                    "8002",
                    "A",
                    "A01",
                    "A02",
                    "A08",
                    "AL",
                    "AP",
                    "AW",
                    "B",
                    "C",
                    "C02",
                    "C04",
                    "C05",
                    "C08",
                    "C14",
                    "C18",
                    "C28",
                    "C31",
                    "C32",
                    "CA",
                    "CD",
                    "CR",
                    "D",
                    "DA",
                    "DP",
                    "DP1",
                    "EX",
                    "F10",
                    "F14",
                    "F22",
                    "F24",
                    "F29",
                    "F30",
                    "F31",
                    "FR1",
                    "FR2",
                    "FR4",
                    "FR6",
                    "IC",
                    "IN",
                    "IS",
                    "ITA",
                    "LP",
                    "M01",
                    "M10",
                    "M49",
                    "N",
                    "NA",
                    "NC",
                    "P",
                    "P01",
                    "P03",
                    "P04",
                    "P05",
                    "P07",
                    "P08",
                    "P22",
                    "P23",
                    "R03",
                    "R13",
                    "RG",
                    "RM",
                    "RN1",
                    "RN2",
                    "SV",
                    "TF",
                    "TNM",
                    "UA01",
                    "UA02",
                    "UA03",
                    "UA10",
                    "UA11",
                    "UA12",
                    "UA18",
                    "UA20",
                    "UA21",
                    "UA22",
                    "UA23",
                    "UA28",
                    "UA30",
                    "UA31",
                    "UA32",
                    "UA38",
                    "UA99",
                    "bank_cannot_process",
                    "credit_not_processed",
                    "customer_initiated",
                    "debit_not_authorized",
                    "duplicate",
                    "fraudulent",
                    "general",
                    "incorrect_account_details",
                    "insufficient_funds",
                    "merchandise",
                    "non_receipt",
                    "not_as_described",
                    "pre-chargeback-alert",
                    "product_not_received",
                    "product_unacceptable",
                    "special",
                    "subscription_canceled",
                    "unauthorized",
                    "unauthorized_claim",
                    "unrecognized",
                    "MERCHANDISE_OR_SERVICE_NOT_RECEIVED",
                    "MERCHANDISE_OR_SERVICE_NOT_AS_DESCRIBED",
                    "UNAUTHORISED",
                    "CREDIT_NOT_PROCESSED",
                    "DUPLICATE_TRANSACTION",
                    "INCORRECT_AMOUNT",
                    "PAYMENT_BY_OTHER_MEANS",
                    "CANCELED_RECURRING_BILLING",
                    "PROBLEM_WITH_REMITTANCE",
                    "OTHER"
                  ]
                },
                "type": {
                  "description": "Type of dispute.",
                  "type": "string",
                  "enum": [
                    "information-request",
                    "first-chargeback",
                    "second-chargeback",
                    "arbitration",
                    "fraud",
                    "ethoca-alert",
                    "verifi-alert",
                    "bank-return",
                    "paypal-claim",
                    "representment",
                    "inquiry",
                    "forced-refund",
                    "collaboration"
                  ]
                },
                "status": {
                  "description": "Status of the dispute.",
                  "type": "string",
                  "enum": [
                    "response-needed",
                    "under-review",
                    "forfeited",
                    "won",
                    "lost",
                    "unknown"
                  ]
                },
                "postedTime": {
                  "description": "Date and time when the dispute is posted.",
                  "type": "string",
                  "format": "date-time"
                },
                "deadlineTime": {
                  "description": "Latest date and time by when a merchant must submit a representment for a dispute.\nIf the deadline is missed, the merchant loses the dispute.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "date-time"
                }
              }
            }
          }
        },
        "description": "Dispute resource.",
        "required": true
      },
      "Invoice": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Invoice"
            }
          }
        },
        "description": "Invoice resource.",
        "required": true
      },
      "PatchKycRequest": {
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "properties": {
                    "customerId": {
                      "readOnly": true
                    }
                  }
                },
                {
                  "$ref": "#/components/schemas/KycRequest"
                }
              ]
            }
          }
        }
      },
      "PostPaymentInstrument": {
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/PaymentInstrumentCreateToken"
                },
                {
                  "$ref": "#/components/schemas/PaymentCardCreatePlain"
                },
                {
                  "$ref": "#/components/schemas/BankAccountCreatePlain"
                },
                {
                  "$ref": "#/components/schemas/PayPalAccount"
                },
                {
                  "$ref": "#/components/schemas/AlternativeInstrument"
                }
              ]
            }
          }
        },
        "description": "PaymentInstrument resource.",
        "required": true
      },
      "PatchPaymentInstrument": {
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/PaymentInstrumentUpdateToken"
                },
                {
                  "$ref": "#/components/schemas/PaymentCardUpdatePlain"
                },
                {
                  "$ref": "#/components/schemas/BankAccountUpdatePlain"
                }
              ]
            }
          }
        },
        "description": "PaymentInstrument resource.",
        "required": true
      },
      "Product": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Product"
            }
          }
        },
        "description": "Product resource.",
        "required": true
      },
      "Subscription": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
            }
          }
        },
        "description": "Order resource.",
        "required": true
      },
      "SubscriptionCancellation": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/SubscriptionCancellation"
            }
          }
        },
        "description": "Cancellation resource.",
        "required": true
      },
      "Tag": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Tag"
            }
          }
        },
        "description": "Tag resource.",
        "required": true
      },
      "UpdateTag": {
        "content": {
          "application/json": {
            "schema": {
              "required": [
                "name"
              ],
              "properties": {
                "name": {
                  "description": "Unique name for the tag.\nTag names are not case-sensitive.",
                  "type": "string",
                  "maxLength": 255,
                  "pattern": "^[@~\\-\\.\\w\\s]+$",
                  "example": "New"
                }
              }
            }
          }
        },
        "description": "Tag resource.",
        "required": true
      },
      "TransactionRequest": {
        "content": {
          "application/json": {
            "schema": {
              "required": [
                "type",
                "websiteId",
                "customerId",
                "currency",
                "amount"
              ],
              "type": "object",
              "properties": {
                "upsertCustomer": {
                  "type": "boolean",
                  "default": false,
                  "writeOnly": true,
                  "description": "Specifies whether to create or update (upsert) a customer.\nIf this value is `true`, the operation creates or updates (upserts) a customer.\nIf this value is `false`, the `customerId` already exists, and the related customer is not updated."
                },
                "type": {
                  "description": "Type of transaction.\n\nThis field supports a limited subset of transaction types.\nTo refund or void, see [Refund a transaction](https://www.rebilly.com/catalog/all/transactions/posttransactionrefund).\n\nTo `capture`, use the `sale` type.\nIf any existing `authorize` transactions are eligible,\nthey are captured and the `sale` converts to a `capture` type.\n\nThe `setup` type sets up the payment instrument by following the `setupInstruction` in the selected gateway account.\nIf the instruction is to `do-nothing`, a transaction with result `approved` of type `setup` returns.",
                  "type": "string",
                  "enum": [
                    "sale",
                    "authorize",
                    "setup"
                  ]
                },
                "limits": {
                  "$ref": "#/components/schemas/TransactionLimitAmount"
                },
                "websiteId": {
                  "$ref": "#/components/schemas/WebsiteId"
                },
                "customerId": {
                  "$ref": "#/components/schemas/CustomerId"
                },
                "currency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "amount": {
                  "description": "Amount of the transaction.",
                  "type": "number",
                  "format": "double",
                  "example": 97.97
                },
                "invoiceIds": {
                  "description": "Array of invoice IDs.",
                  "type": [
                    "array",
                    "null"
                  ],
                  "items": {
                    "$ref": "#/components/schemas/ResourceId"
                  }
                },
                "paymentInstruction": {
                  "description": "Payment instruction for the purchase.\nIf this value is not supplied,\nthe customer's default payment instrument is used.",
                  "$ref": "#/components/schemas/PaymentInstruction"
                },
                "billingAddress": {
                  "description": "Billing address.\nIf this value is not supplied,\nthe billing address associated with the payment instrument is used.\nIf no billing address is associated with the payment instrument,\nthe customer's billing address is used.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ContactObject"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "requestId": {
                  "description": "Use this field to prevent duplicate transaction requests that may occur within a short period of time.\nIf a duplicate request is sent with the same `requestId`,\nit is ignored to prevent double-billing.\nThis value must be unique within a 24-hour period.\n\n> **Important:** This field is recommended.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 50,
                  "pattern": "^[\\-\\w]+$",
                  "example": "44433322-2c4y-483z-a0a9-158621f77a21"
                },
                "gatewayAccountId": {
                  "description": "ID of the gateway account.\nRebilly selects the payment gateway account for the transaction based on transaction properties and the rules configuration of the `gateway-account-requested` event.\nTo prevent Rebilly from making the gateway account selection,\nsupply a gateway account ID in this field.\nOnly use this field if you intend to override the settings.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 50,
                  "example": "gw_acc_0YVCXMF26DDNKAERE5NW727S34"
                },
                "description": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Payment description.",
                  "maxLength": 255
                },
                "notificationUrl": {
                  "description": "URL where a server-to-server `POST` notification is sent.\nThis notification is sent when the transaction result is finalized after a timeout or an offsite interaction.\n\nDo not interpret this notification as a confirmation,\ncomplete a `GET` request to confirm the result of the transaction.\nTo ensure the request is not reattempted,\nwhen the result is confirmed, respond with a `2xx` HTTP status code.\n\nThe following placeholders are available to use in this URI: `{id}` and `{result}`.\nThese placeholders are replaced the with the transaction ID and result accordingly.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 2083,
                  "format": "uri"
                },
                "redirectUrl": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "URL to redirect the end-user when an offsite transaction is completed.\nDefaults to the configured URL of the website.\nYou may use `{id}` or `{result}` as placeholders in the URL,\nthese are replaced the with the transaction ID and result accordingly.",
                  "maxLength": 2083,
                  "format": "uri"
                },
                "customFields": {
                  "$ref": "#/components/schemas/ResourceCustomFields"
                },
                "riskMetadata": {
                  "$ref": "#/components/schemas/RiskMetadata"
                },
                "isProcessedOutside": {
                  "description": "Specifies when the transaction is processed outside Rebilly.",
                  "type": "boolean",
                  "default": false
                },
                "isMerchantInitiated": {
                  "description": "Specifies when the transaction is initiated by the merchant.",
                  "type": "boolean",
                  "default": false
                },
                "processedTime": {
                  "type": "string",
                  "description": "Time the transaction is processed.\nThis field is only specified if the transaction is processed outside Rebilly.",
                  "format": "date-time"
                }
              }
            }
          }
        },
        "description": "Transaction resource.",
        "required": true
      },
      "PatchTransactionRequest": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "title": "Patch transaction request",
              "properties": {
                "customFields": {
                  "$ref": "#/components/schemas/ResourceCustomFields"
                }
              }
            }
          }
        },
        "description": "Use the patch transaction request to modify custom fields.",
        "required": true
      },
      "CreditTransactionRequest": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "websiteId",
                "customerId",
                "currency",
                "amount"
              ],
              "properties": {
                "websiteId": {
                  "$ref": "#/components/schemas/WebsiteId"
                },
                "customerId": {
                  "$ref": "#/components/schemas/CustomerId"
                },
                "currency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "amount": {
                  "description": "Amount of the transaction.",
                  "type": "number",
                  "format": "double",
                  "example": 97.97
                },
                "invoiceIds": {
                  "description": "Array of invoice IDs.",
                  "type": [
                    "array",
                    "null"
                  ],
                  "items": {
                    "$ref": "#/components/schemas/ResourceId"
                  }
                },
                "paymentInstruction": {
                  "description": "Payment instruction for the purchase.\nIf this value is not supplied,\nthe customer's default payment instrument is used.",
                  "$ref": "#/components/schemas/PaymentInstruction"
                },
                "billingAddress": {
                  "description": "Billing address.\nIf this value is not supplied,\nthe billing address associated with the payment instrument is used.\nIf no billing address is associated with the payment instrument,\nthe customer's billing address is used.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ContactObject"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "requestId": {
                  "description": "Use this field to prevent duplicate transaction requests that may occur within a short period of time.\nIf a duplicate request is sent with the same `requestId`,\nit is ignored to prevent double-billing.\nThis value must be unique within a 24-hour period.\n\n> **Important:** This field is recommended.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 50,
                  "pattern": "^[\\-\\w]+$",
                  "example": "44433322-2c4y-483z-a0a9-158621f77a21"
                },
                "gatewayAccountId": {
                  "description": "ID of the gateway account.\nRebilly selects the payment gateway account for the transaction based on transaction properties and the rules configuration of the `gateway-account-requested` event.\nTo prevent Rebilly from making the gateway account selection,\nsupply a gateway account ID in this field.\nOnly use this field if you intend to override the settings.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 50,
                  "example": "gw_acc_0YVCXMF26DDNKAERE5NW727S34"
                },
                "description": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "Payment description.",
                  "maxLength": 255
                },
                "notificationUrl": {
                  "description": "URL where a server-to-server `POST` notification is sent.\nThis notification is sent when the transaction result is finalized after a timeout or an offsite interaction.\n\nDo not interpret this notification as a confirmation,\ncomplete a `GET` request to confirm the result of the transaction.\nTo ensure the request is not reattempted,\nwhen the result is confirmed, respond with a `2xx` HTTP status code.\n\nThe following placeholders are available to use in this URI: `{id}` and `{result}`.\nThese placeholders are replaced the with the transaction ID and result accordingly.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 2083,
                  "format": "uri"
                },
                "redirectUrl": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "URL to redirect the end-user when an offsite transaction is completed.\nDefaults to the configured URL of the website.\nYou may use `{id}` or `{result}` as placeholders in the URL,\nthese are replaced the with the transaction ID and result accordingly.",
                  "maxLength": 2083,
                  "format": "uri"
                },
                "customFields": {
                  "$ref": "#/components/schemas/ResourceCustomFields"
                },
                "riskMetadata": {
                  "$ref": "#/components/schemas/RiskMetadata"
                },
                "isProcessedOutside": {
                  "description": "Specifies when the transaction is processed outside Rebilly.",
                  "type": "boolean",
                  "default": false
                },
                "isMerchantInitiated": {
                  "description": "Specifies when the transaction is initiated by the merchant.",
                  "type": "boolean",
                  "default": false
                },
                "processedTime": {
                  "type": "string",
                  "description": "Time the transaction is processed.\nThis field is only specified if the transaction is processed outside Rebilly.",
                  "format": "date-time"
                },
                "payoutRequestId": {
                  "description": "ID of the payout request for which the transaction is fully allocated.",
                  "writeOnly": true,
                  "type": "string",
                  "maxLength": 50
                }
              }
            }
          }
        },
        "description": "Transaction resource.",
        "required": true
      },
      "PatchPayoutRequest": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "title": "Patch payout request",
              "properties": {
                "status": {
                  "description": "Status of the request.",
                  "type": "string",
                  "enum": [
                    "pending",
                    "ready",
                    "approved",
                    "canceled",
                    "customer-reversed",
                    "system-reversed",
                    "admin-reversed"
                  ],
                  "x-enumDescriptions": {
                    "pending": "Request was created by the customer.",
                    "ready": "Request was assessed, deemed eligible for processing and is ready for approval.",
                    "approved": "Request was approved and is ready for processing.",
                    "canceled": "Request is canceled by merchant or customer.",
                    "customer-reversed": "Request was reversed by the customer.",
                    "system-reversed": "Request was reversed by the system.",
                    "admin-reversed": "Request was manually reversed."
                  }
                },
                "description": {
                  "description": "Description of the payout request.",
                  "type": [
                    "string",
                    "null"
                  ]
                },
                "blocked": {
                  "description": "Specifies whether the payout request is blocked or unblocked.\nThis field can only be applied to payout requests in the following statuses:\n`pending`, `ready`, `approved`, or `in-progress`.\n\nWhen a payout request is blocked, it cannot:\n- Move to the next status in the workflow.\n  For example: `pending` → `ready` → `approved` → `in-progress`.\n- Have allocations created.\n- Have allocations processed.",
                  "type": "boolean",
                  "example": false
                },
                "blockReason": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/PayoutRequestBlockReason"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "blockDescription": {
                  "description": "Additional description for blocking the payout request.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 255
                }
              }
            }
          }
        },
        "description": "Fields for updating the payout request status, description, and blocked state."
      },
      "CustomerWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "customerId": {
                  "$ref": "#/components/schemas/CustomerId"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "aml-list-possibly-matched",
                    "customer-created",
                    "customer-merged",
                    "customer-one-time-password-requested",
                    "customer-redirected-offsite",
                    "customer-returned",
                    "customer-updated"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the customer event.",
                  "properties": {
                    "customer": {
                      "$ref": "#/components/schemas/Customer"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "customer"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of customer-related webhook event."
      },
      "CouponRedemptionWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "couponId": {
                  "description": "ID of the coupon.",
                  "type": "string"
                },
                "redemptionId": {
                  "description": "ID of the redemption.",
                  "type": "string"
                },
                "customerId": {
                  "description": "ID of the customer.",
                  "type": "string"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "coupon-application-removed",
                    "coupon-applied",
                    "coupon-redeemed",
                    "coupon-redemption-canceled"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the coupon redemption event.",
                  "properties": {
                    "coupon": {
                      "$ref": "#/components/schemas/Coupon"
                    },
                    "redemption": {
                      "$ref": "#/components/schemas/CouponRedemption"
                    },
                    "customer": {
                      "$ref": "#/components/schemas/Customer"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "coupon",
                          "redemption",
                          "customer"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of coupon redemption-related webhook event."
      },
      "CouponWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "couponId": {
                  "description": "ID of the coupon.",
                  "type": "string"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "coupon-expiration-modified",
                    "coupon-expired",
                    "coupon-issued",
                    "coupon-modified"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the coupon event.",
                  "properties": {
                    "coupon": {
                      "$ref": "#/components/schemas/Coupon"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "coupon"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of coupon-related webhook event."
      },
      "CreditMemoWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "creditMemoId": {
                  "type": "string",
                  "description": "ID of the credit memo.",
                  "maxLength": 50,
                  "example": "crmm_0YVCNN22TWC3G8H82QNPNVZCHG"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "credit-memo-applied",
                    "credit-memo-created",
                    "credit-memo-modified",
                    "credit-memo-partially-applied",
                    "credit-memo-voided"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the credit memo event.",
                  "properties": {
                    "creditMemo": {
                      "$ref": "#/components/schemas/CreditMemo"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "creditMemo"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of credit memo-related webhook event."
      },
      "MergedCustomer": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "targetCustomerId": {
                  "description": "ID of the customer that contains the merged data.",
                  "type": "string",
                  "maxLength": 50,
                  "example": "cus_0YV7DDSDD1C8DA64KHH2W33CPF"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "customer-merged"
                  ]
                },
                "duplicatedCustomer": {
                  "$ref": "#/components/schemas/Customer"
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the customer merge event.",
                  "properties": {
                    "targetCustomer": {
                      "$ref": "#/components/schemas/Customer"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "customer"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of customer merge-related webhook event."
      },
      "CustomerRedirect": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "transactionId": {
                  "$ref": "#/components/schemas/TransactionId"
                },
                "redirectUrl": {
                  "description": "URL customer redirected to.",
                  "type": "string",
                  "format": "uri"
                },
                "ipAddress": {
                  "description": "Customer's IP address.",
                  "type": "string"
                },
                "httpHeaders": {
                  "description": "Customer's browser HTTP headers.",
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "example": {
                    "Content-Type": "application/json",
                    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
                  }
                },
                "eventType": {
                  "description": "Type of event that triggered the webhook.",
                  "type": "string",
                  "enum": [
                    "customer-redirected-offsite",
                    "customer-returned"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the customer redirect event.",
                  "properties": {
                    "transaction": {
                      "$ref": "#/components/schemas/Transaction"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "transaction"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of customer redirect-related webhook event."
      },
      "CustomerTaxNumberValidated": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "customerId": {
                  "$ref": "#/components/schemas/CustomerId"
                },
                "taxIdNumber": {
                  "type": "string",
                  "description": "Value of the tax number.",
                  "example": "GB980780684"
                },
                "taxIdType": {
                  "type": "string",
                  "description": "Type of the tax ID number.",
                  "enum": [
                    "eu-vat",
                    "other"
                  ]
                },
                "isValid": {
                  "type": "boolean",
                  "description": "Determines if the tax number passed the EU official [VIES validation](https://ec.europa.eu/taxation_customs/vies/#/vat-validation)."
                },
                "eventType": {
                  "description": "Type of event that triggered the webhook.",
                  "type": "string",
                  "enum": [
                    "customer-tax-number-validated"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the customer tax number validation event.",
                  "properties": {
                    "customer": {
                      "$ref": "#/components/schemas/Customer"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "customer"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of customer tax number validation-related webhook event."
      },
      "DisputeWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "disputeId": {
                  "type": "string",
                  "description": "ID of the dispute.",
                  "maxLength": 50,
                  "example": "dp_0YVCE8J5F2DE58FV0S8YASW4HK"
                },
                "transactionId": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "ID of the transaction.",
                  "maxLength": 50,
                  "example": "txn_0YVDTQJ8YWDGQACV2N2N5SPWQ0"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "dispute-created",
                    "dispute-modified"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the dispute event.",
                  "properties": {
                    "dispute": {
                      "$ref": "#/components/schemas/Dispute"
                    },
                    "transaction": {
                      "oneOf": [
                        {
                          "$ref": "#/components/schemas/Transaction"
                        },
                        {
                          "type": "null"
                        }
                      ]
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "dispute",
                          "transaction"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of dispute-related webhook event."
      },
      "ExperianCheckPerformed": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "customerId": {
                  "$ref": "#/components/schemas/CustomerId"
                },
                "outcome": {
                  "description": "Check decision where `1` - record matches, `0` - no matches found, `-1` - record mismatches.",
                  "type": "integer",
                  "enum": [
                    -1,
                    0,
                    1
                  ],
                  "example": 1
                },
                "reason": {
                  "description": "Text representation of the outcome.",
                  "type": "string",
                  "example": "Individual has a 90 percent or greater match to forename surname premise postcode with ID verified and DOB"
                },
                "errorCode": {
                  "description": "Error code produced by the Experian system.",
                  "type": "string",
                  "example": "001"
                },
                "errorMessage": {
                  "description": "Error message produced by the Experian system.",
                  "type": "string",
                  "example": "Authentication Error: Bad Username or Password"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "experian-check-performed"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the Experian check event.",
                  "properties": {
                    "customer": {
                      "$ref": "#/components/schemas/Customer"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "customer"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of Experian check-related webhook event."
      },
      "UsageLimitWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "subscriptionId": {
                  "type": "string",
                  "description": "ID of the order.",
                  "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
                },
                "subscriptionItemId": {
                  "type": "string",
                  "description": "ID of the subscription item.",
                  "example": "sub_01HW2V1Y3A6QPM1NX4WCYHFSRS"
                },
                "planId": {
                  "type": "string",
                  "description": "ID of the plan.",
                  "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                },
                "usageQuantity": {
                  "type": "integer",
                  "description": "Reported usage quantity."
                },
                "usageAmount": {
                  "type": "number",
                  "format": "double",
                  "description": "Reported usage amount."
                },
                "currency": {
                  "type": "string",
                  "description": "Currency of the reported usage amount."
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "soft-usage-limit-reached",
                    "hard-usage-limit-reached",
                    "trial-usage-limit-reached"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the usage limit event.",
                  "properties": {
                    "subscription": {
                      "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "subscription"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of usage limit-related webhook event."
      },
      "InvoiceTaxCalculationFailed": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "invoiceId": {
                  "type": "string",
                  "description": "ID of the invoice.",
                  "maxLength": 50,
                  "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
                },
                "reason": {
                  "description": "Error message explaining tax calculation failure.",
                  "type": "string"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "invoice-tax-calculation-failed"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the invoice tax calculation event.",
                  "properties": {
                    "invoice": {
                      "$ref": "#/components/schemas/Invoice"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "invoice"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of invoice tax calculation-related webhook event."
      },
      "TransactionWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "transactionId": {
                  "$ref": "#/components/schemas/TransactionId"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "gateway-account-requested",
                    "offsite-payment-completed",
                    "risk-score-changed",
                    "transaction-amount-discrepancy-found",
                    "transaction-declined",
                    "transaction-discrepancy-found",
                    "transaction-process-requested",
                    "transaction-processed",
                    "transaction-timeout-resolved",
                    "waiting-gateway-transaction-completed",
                    "autodeposit-lookup-performed"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the transaction event.",
                  "properties": {
                    "transaction": {
                      "$ref": "#/components/schemas/Transaction"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "transaction"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of transaction-related webhook event."
      },
      "InvoiceWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "invoiceId": {
                  "type": "string",
                  "description": "ID of the invoice.",
                  "maxLength": 50,
                  "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "invoice-abandoned",
                    "invoice-created",
                    "invoice-issued",
                    "invoice-modified",
                    "invoice-paid",
                    "invoice-partially-paid",
                    "invoice-partially-refunded",
                    "invoice-past-due",
                    "invoice-past-due-reminder",
                    "invoice-refunded",
                    "invoice-reissued",
                    "invoice-tax-calculation-failed",
                    "invoice-voided"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Available embedded objects that are requested by the expand query parameter.",
                  "properties": {
                    "invoice": {
                      "$ref": "#/components/schemas/Invoice"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "invoice"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of invoice-related webhook event."
      },
      "KycDocumentWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "customerId": {
                  "$ref": "#/components/schemas/CustomerId"
                },
                "kycDocumentId": {
                  "type": "string",
                  "description": "ID of the KYC document.",
                  "maxLength": 50,
                  "example": "kyc_doc_0YV7JHY705C6DA487BFTAA33V8"
                },
                "fileId": {
                  "type": "string",
                  "description": "ID of the file.",
                  "maxLength": 50,
                  "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "kyc-document-accepted",
                    "kyc-document-created",
                    "kyc-document-modified",
                    "kyc-document-rejected",
                    "kyc-document-reviewed",
                    "kyc-document-archived"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the KYC document event.",
                  "properties": {
                    "customer": {
                      "$ref": "#/components/schemas/Customer"
                    },
                    "kycDocument": {
                      "$ref": "#/components/schemas/KycDocument"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "customer",
                          "file",
                          "kycDocument"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of KYC document-related webhook event."
      },
      "KycRequestWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "customerId": {
                  "$ref": "#/components/schemas/CustomerId"
                },
                "kycRequestId": {
                  "type": "string",
                  "description": "ID of the KYC request.",
                  "maxLength": 50,
                  "example": "kyc_req_0YV7JMJ3DBCGRBR7K9D4HVGPP5"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "kyc-request-attempted",
                    "kyc-request-failed",
                    "kyc-request-fulfilled",
                    "kyc-request-partially-fulfilled"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the KYC request event.",
                  "properties": {
                    "customer": {
                      "$ref": "#/components/schemas/Customer"
                    },
                    "kycRequest": {
                      "$ref": "#/components/schemas/KycRequest"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "customer",
                          "kycRequest"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of KYC request-related webhook event."
      },
      "OrderAbandonReminderSent": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "subscriptionId": {
                  "type": "string",
                  "description": "ID of the order.",
                  "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
                },
                "scheduleNumber": {
                  "type": "integer",
                  "description": "Number of triggered abandon reminder events."
                },
                "eventType": {
                  "description": "Type of event that triggered the webhook.",
                  "type": "string",
                  "enum": [
                    "order-abandon-reminder"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the order abandon reminder event.",
                  "properties": {
                    "subscription": {
                      "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "subscription"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of order abandon reminder-related webhook event."
      },
      "SubscriptionWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "subscriptionId": {
                  "type": "string",
                  "description": "ID of the order.",
                  "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "order-completed",
                    "order-abandoned",
                    "subscription-activated",
                    "subscription-canceled",
                    "subscription-churned",
                    "subscription-downgraded",
                    "subscription-modified",
                    "subscription-reactivated",
                    "subscription-renewal-reminder",
                    "subscription-renewed",
                    "subscription-trial-converted",
                    "subscription-trial-end-changed",
                    "subscription-trial-end-reminder",
                    "subscription-trial-ended",
                    "subscription-upgraded",
                    "order-delinquency-reached",
                    "subscription-items-changed"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the order event.",
                  "properties": {
                    "subscription": {
                      "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "subscription"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of order-related webhook event."
      },
      "OrganizationTaxNumberValidated": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "organizationId": {
                  "$ref": "#/components/schemas/OrganizationId"
                },
                "taxIdNumber": {
                  "type": "string",
                  "description": "Value of the tax number.",
                  "example": "GB980780684"
                },
                "taxIdType": {
                  "type": "string",
                  "description": "Type of the tax ID number.",
                  "enum": [
                    "eu-vat",
                    "other"
                  ]
                },
                "isValid": {
                  "type": "boolean",
                  "description": "Determines if the tax number passed the EU official [VIES validation](https://ec.europa.eu/taxation_customs/vies/#/vat-validation)."
                },
                "eventType": {
                  "description": "Type of event that triggered the webhook.",
                  "type": "string",
                  "enum": [
                    "organization-tax-number-validated"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the organization tax number validation event.",
                  "properties": {
                    "organization": {
                      "$ref": "#/components/schemas/Organization"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "organization"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of organization tax number validation-related webhook event."
      },
      "PaymentCardWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "paymentCardId": {
                  "description": "ID of the payment instrument.",
                  "type": "string"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "payment-card-created",
                    "payment-card-expiration-reminder",
                    "payment-card-expired"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the payment card event.",
                  "properties": {
                    "paymentCard": {
                      "$ref": "#/components/schemas/PaymentCard"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "paymentCard"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of payment card-related webhook event."
      },
      "PaymentInstrumentWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "paymentInstrumentId": {
                  "type": "string",
                  "description": "ID of the payment instrument.",
                  "maxLength": 50,
                  "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "payment-instrument-modified"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the payment instrument event.",
                  "properties": {
                    "paymentInstrument": {
                      "$ref": "#/components/schemas/PaymentInstrument"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "readOnly": true,
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "paymentInstrument"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of payment instrument-related webhook event."
      },
      "PayoutRequestWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "payoutRequestId": {
                  "description": "ID of the payout request.",
                  "type": "string"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "payout-request-created",
                    "payout-request-modified",
                    "payout-request-canceled",
                    "payout-request-reversed",
                    "payout-request-fulfilled"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the payout request event.",
                  "properties": {
                    "payoutRequest": {
                      "$ref": "#/components/schemas/PayoutRequest"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "payoutRequest"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of payout request-related webhook event."
      },
      "QuoteWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "quoteId": {
                  "type": "string",
                  "description": "ID of the quote.",
                  "example": "qt_01HXBZMEGPETPHJZH6V4RHBMA8"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "quote-accepted",
                    "quote-canceled",
                    "quote-created",
                    "quote-expired",
                    "quote-issued",
                    "quote-recalled",
                    "quote-rejected",
                    "quote-updated"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the quote event.",
                  "properties": {
                    "quote": {
                      "$ref": "#/components/schemas/Quote"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "quote"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of quote-related webhook event."
      },
      "ReadyToPayRequested": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "ready-to-pay-requested"
                  ]
                },
                "websiteId": {
                  "$ref": "#/components/schemas/WebsiteId"
                },
                "currency": {
                  "type": "string",
                  "description": "Currency of the ready to pay request."
                },
                "amount": {
                  "type": "number",
                  "format": "double",
                  "description": "Amount of the ready to pay request."
                },
                "items": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "planId",
                      "quantity"
                    ],
                    "properties": {
                      "planId": {
                        "type": "string",
                        "description": "ID of the plan.",
                        "maxLength": 50,
                        "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                      },
                      "quantity": {
                        "description": "Number of product units in the specified plan.",
                        "type": "integer"
                      }
                    }
                  }
                },
                "billingAddress": {
                  "description": "Customer's billing address.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ContactObject"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "riskMetadata": {
                  "$ref": "#/components/schemas/RiskMetadata"
                },
                "customerId": {
                  "$ref": "#/components/schemas/CustomerId"
                },
                "transactionId": {
                  "$ref": "#/components/schemas/TransactionId"
                },
                "checkoutFormId": {
                  "$ref": "#/components/schemas/CheckoutFormId"
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the ready to pay event.",
                  "properties": {
                    "checkoutForm": {
                      "$ref": "#/components/schemas/CheckoutForm"
                    },
                    "customer": {
                      "$ref": "#/components/schemas/Customer"
                    },
                    "transaction": {
                      "$ref": "#/components/schemas/Transaction"
                    },
                    "website": {
                      "$ref": "#/components/schemas/Website"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "checkoutForm",
                          "customer",
                          "transaction",
                          "website"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of ready to pay-related webhook event."
      },
      "RenewalInvoiceIssued": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "subscriptionId": {
                  "type": "string",
                  "description": "ID of the order.",
                  "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
                },
                "invoiceId": {
                  "type": "string",
                  "description": "ID of the invoice.",
                  "maxLength": 50,
                  "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "renewal-invoice-issued"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the renewal invoice event.",
                  "properties": {
                    "subscription": {
                      "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                    },
                    "invoice": {
                      "$ref": "#/components/schemas/Invoice"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "subscription",
                          "invoice"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of renewal invoice-related webhook event."
      },
      "InvoiceAndTransaction": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "transactionId": {
                  "$ref": "#/components/schemas/TransactionId"
                },
                "invoiceId": {
                  "type": "string",
                  "description": "ID of the invoice.",
                  "maxLength": 50,
                  "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "renewal-invoice-payment-canceled",
                    "renewal-invoice-payment-declined"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the invoice and transaction event.",
                  "properties": {
                    "transaction": {
                      "$ref": "#/components/schemas/Transaction"
                    },
                    "invoice": {
                      "$ref": "#/components/schemas/Invoice"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "transaction",
                          "invoice"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of invoice and transaction-related webhook event."
      },
      "SubscriptionQuantityFilledLimitReached": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "subscriptionId": {
                  "type": "string",
                  "description": "ID of the order.",
                  "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
                },
                "subscriptionItemId": {
                  "type": "string",
                  "description": "ID of the subscription item.",
                  "example": "sub_01HW2V1Y3A6QPM1NX4WCYHFSRS"
                },
                "quantity": {
                  "type": "integer",
                  "description": "Quantity of the subscription item."
                },
                "quantityFilled": {
                  "type": "number",
                  "format": "double",
                  "example": 5.125,
                  "description": "Reported quantity."
                },
                "previousQuantityFilled": {
                  "type": "number",
                  "format": "double",
                  "example": 4.037,
                  "description": "Reported quantity before the subscription item updates."
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "subscription-quantity-filled-limit-reached"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the subscription quantity limit event.",
                  "properties": {
                    "subscription": {
                      "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "subscription"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of subscription quantity limit-related webhook event."
      },
      "SubscriptionAndSubscriptionPause": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "subscriptionId": {
                  "type": "string",
                  "description": "ID of the order.",
                  "example": "sub_01HRF27SATGE4Z6PBJE6PD8328"
                },
                "subscriptionPauseId": {
                  "type": "string",
                  "description": "ID of the subscription pause.",
                  "example": "sub_pau_01H085J3ZR1WKD120D73D7N4C9"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "subscription-pause-created",
                    "subscription-pause-modified",
                    "subscription-pause-revoked",
                    "subscription-paused",
                    "subscription-resumed"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the subscription pause event.",
                  "properties": {
                    "subscription": {
                      "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                    },
                    "pause": {
                      "$ref": "#/components/schemas/SubscriptionPause"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "subscription",
                          "pause"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of subscription pause-related webhook event."
      },
      "AutodepositLookupPerformed": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "customerId": {
                  "$ref": "#/components/schemas/CustomerId"
                },
                "transactionId": {
                  "$ref": "#/components/schemas/TransactionId"
                },
                "autodepositLookupResponse": {
                  "description": "Autodeposit lookup response.",
                  "type": "object",
                  "properties": {
                    "enrolled": {
                      "type": "boolean",
                      "default": false,
                      "description": "Specifies whether the autodeposit lookup is enrolled or not."
                    },
                    "firstName": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "First name from the autodeposit lookup response."
                    },
                    "lastName": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Last name from the autodeposit lookup response."
                    },
                    "middleName": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Middle name from the autodeposit lookup response."
                    },
                    "companyName": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Company name from the autodeposit lookup response."
                    },
                    "tradeName": {
                      "type": [
                        "string",
                        "null"
                      ],
                      "description": "Trade name from the autodeposit lookup response."
                    }
                  }
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "autodeposit-lookup-performed"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the autodeposit lookup event.",
                  "properties": {
                    "customer": {
                      "$ref": "#/components/schemas/Customer"
                    },
                    "transaction": {
                      "$ref": "#/components/schemas/Transaction"
                    }
                  }
                },
                "_links": {
                  "type": "array",
                  "description": "Links to related resources.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "href": {
                        "description": "URL of the link.",
                        "type": "string"
                      },
                      "rel": {
                        "description": "Relationship type of the link.",
                        "type": "string",
                        "enum": [
                          "customer",
                          "transaction"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of autodeposit lookup-related webhook event."
      }
    },
    "examples": {
      "stripe-trx-request": {
        "summary": "Stripe transaction fees",
        "description": "Transaction fees for Stripe.\nDiscount rate fees are a separate record.",
        "value": {
          "type": "buy",
          "name": "Stripe transaction fees",
          "filter": "type:sale,capture;result:approved;gatewayAccountId:stripe",
          "formula": {
            "type": "fixed-fee",
            "currency": "USD",
            "amount": 0.3
          }
        }
      },
      "stripe-us-request": {
        "summary": "Stripe US fees",
        "description": "Fees for Stripe in the US.\nFees for outside of the US are a different fee record.",
        "value": {
          "type": "buy",
          "name": "Stripe US fees",
          "filter": "type:sale,capture;result:approved;billingAddress.country:US;gatewayAccountId:stripe",
          "formula": {
            "type": "percentage",
            "currency": "USD",
            "bips": 290
          }
        }
      },
      "stripe-intl-request": {
        "summary": "Stripe international fees",
        "description": "Fees for Stripe outside of the US.",
        "value": {
          "type": "buy",
          "name": "Stripe international fees",
          "filter": "type:sale,capture;result:approved;billingAddress.country:!US;gatewayAccountId:stripe",
          "formula": {
            "type": "percentage",
            "currency": "USD",
            "bips": 390
          }
        }
      },
      "stripe-trx-response": {
        "summary": "Stripe transaction fees",
        "description": "Stripe transaction fees.\nDiscount rate fees are a separate record.",
        "value": {
          "id": "fee_01GQT145JX3XBRJ8K812Y3GRE9",
          "type": "buy",
          "name": "Stripe transaction fees",
          "filter": "type:sale,capture;result:approved;gatewayAccountId:stripe",
          "formula": {
            "type": "fixed-fee",
            "currency": "USD",
            "amount": 0.3
          },
          "createdTime": "2021-12-15T14:15:22Z",
          "updatedTime": "2021-12-15T14:15:22Z",
          "_links": [
            {
              "rel": "self",
              "href": "https://api-sandbox.rebilly.com/fees/fee_01GQT145JX3XBRJ8K812Y3GRE9"
            }
          ]
        }
      },
      "stripe-us-response": {
        "summary": "Stripe US fees",
        "description": "Stripe transaction fees for the US.\nFees for outside of the US are a different fee record.",
        "value": {
          "id": "fee_01GQT145JX3XBRJ8K812Y3GRE9",
          "type": "buy",
          "name": "Stripe US fees",
          "filter": "type:sale,capture;result:approved;billingAddress.country:US;gatewayAccountId:stripe",
          "formula": {
            "type": "percentage",
            "currency": "USD",
            "bips": 290
          },
          "createdTime": "2021-12-15T14:15:22Z",
          "updatedTime": "2021-12-15T14:15:22Z",
          "_links": [
            {
              "rel": "self",
              "href": "https://api-sandbox.rebilly.com/fees/fee_01GQT145JX3XBRJ8K812Y3GRE9"
            }
          ]
        }
      },
      "stripe-intl-response": {
        "summary": "Stripe international fees",
        "description": "Stripe transaction fees for outside of the US.",
        "value": {
          "id": "fee_01GQT145JX3XBRJ8K812Y3GRE9",
          "type": "buy",
          "name": "Stripe international fees",
          "filter": "type:sale,capture;result:approved;billingAddress.country:!US;gatewayAccountId:stripe",
          "formula": {
            "type": "percentage",
            "currency": "USD",
            "bips": 390
          },
          "createdTime": "2021-12-15T14:15:22Z",
          "updatedTime": "2021-12-15T14:15:22Z",
          "_links": [
            {
              "rel": "self",
              "href": "https://api-sandbox.rebilly.com/fees/fee_01GQT145JX3XBRJ8K812Y3GRE9"
            }
          ]
        }
      }
    }
  },
  "tags": [
    {
      "name": "Allowlists",
      "description": "Use allowlists to exclude specific customer attribute data from risk score checks.\n\nAllowlists are lists of data that are excluded from risk score checks. Allowlists prevent specific data from being added to a [blocklist record](https://www.rebilly.com/docs/automations/blocklists/) when a [risk score](https://www.rebilly.com/docs/automations/risk-scoring/) threshold reached."
    },
    {
      "name": "AML",
      "description": "Use Anti-Money Laundering (AML) operations to screen customers and help prevent your business from becoming directly or indirectly involved in criminal activity.\n\nUse AML operations during customer creation, and some transaction processing,\nto help determine if a potential customer (lead), or customer, has political or economic sanctions against them.\n\nAML operations search the following for screening purposes:\nPolitically Exposed Persons (PEPs) lists, sanction lists,\nand adverse media lists."
    },
    {
      "name": "API keys",
      "description": "Use API keys to identify and authenticate applications and users.\nAlways keep your API keys private.\nWhen creating API keys, you can restrict them to a given set of permissions.\nFor information on how to create and manage API keys, see [API keys](https://www.rebilly.com/docs/dev-docs/api-keys/)."
    },
    {
      "name": "Application owners",
      "description": "Use application owner operations to register applications to the Rebilly App Store,\nand manage application instances.\nAn application owner is a person or organization that submits an app to the Rebilly App Store.\nFor more information on submitting apps, see [Submit an app](https://www.rebilly.com/docs/dev-docs/submit-a-rebilly-app/)."
    },
    {
      "name": "Application users",
      "description": "Use application user operations to browse available apps in the Rebilly App Store,\nand to manage installed application instances in your organization.\nAn application user is a person or organization that uses an app that is installed from the Rebilly App Store.\nFor more information, see [Install or uninstall an app](https://www.rebilly.com/docs/dev-docs/install-an-app/)."
    },
    {
      "name": "Balance transactions",
      "description": "Use these operations to view and manage balance transactions.\n\n> **Important:** These operations are experimental and may change."
    },
    {
      "name": "Billing portals",
      "description": "Use these operations to create and manage billing portals.\nRebilly hosted billing portals provide secure, Rebilly hosted pages, where customers can:\nview invoices, cancel subscriptions, update payment instruments, and update their address."
    },
    {
      "name": "Blocklists",
      "description": "Use blocklists to prevent fraud and criminal activity.\n\nBlocklists are lists of customer attribute values that are blocked from buying from you.\nFor example, if a customer attempts to make a purchase from you with a credit card that is in a blocklist, the transaction is blocked and is not processed.\n\nBefore a new transaction is processed in Rebilly, blocklists are examined to check for attributes related to the entity.\nIf a match is detected, the operation is aborted.\nA blocklist that expires after a period of time is called a greylist."
    },
    {
      "name": "Broadcast messages",
      "description": "Use broadcast messages to notify customers and leads about upcoming promotions, service updates, and events.\nBroadcast messages are emails that are sent to a specific group of customers, or all customers.\nFor more information, see [Create a broadcast message](https://www.rebilly.com/docs/automations/email-notifications/#create-broadcast-messages)."
    },
    {
      "name": "Cashiers",
      "description": "Use these operations to create and manage cashiers.\n\n> **Important:** These operations are experimental and may change.\n\nCashiers are customer-scoped configuration resources that define the deposit and payout (withdrawal) settings for a specific customer, website, and currency."
    },
    {
      "name": "Checkout forms",
      "description": "Use these operations to create and manage checkout forms.\nRebilly hosted checkout forms provide secure and compliant checkouts.\nCheckout forms are customizable, and use fully responsive design,\nbuilt-in error messaging, validation, and expedited checkout for returning customers."
    },
    {
      "name": "Coupons",
      "description": "Use coupons to reward customers, generate sales, or to test new pricing strategies.\nCoupons enable you to apply different types of discounts to invoices, subscriptions, and pricing plans.\n\nRedeemed coupons are attached to a customer's account.\nDepending on the coupon restrictions, the redeemed coupons are then applied from the customer's account to subsequent invoices or subscriptions.\nRedeemed coupons can only be applied to invoices of the same currency.\n\nOnce a coupon is redeemed it cannot be modified.\nYou may deactivate a coupon or create a new coupon, but you cannot reuse the same coupon code.\nIf you have a use case where you must reuse the same code, [contact Rebilly](https://www.rebilly.com/contact/).\n\n### Coupon restriction types\n\nThe following coupon description types are available:\n\n- `restrict-to-countries`: Restricts a coupon for use in specific countries.\n- `discounts-per-redemption`: Restricts the number of times that the coupon can be applied by one redemption.\n  For example, use this restriction to configure a coupon that can only be applied to the first subscription renewal of a particular product.\n- `minimum-order-amount`: Sets a minimum order amount for a coupon application.\n  For example, if the restriction amount is $20, the coupon is only applied to invoices with a total amount of $20 or more.\n- `restrict-to-invoices`: Restricts a coupon to specific invoices.\n- `restrict-to-plans`: Restricts a coupon to specific pricing plans.\n- `restrict-to-subscriptions`: Restricts a coupon to specific order subscriptions.\n- `restrict-to-customer-tags`: Restricts a coupon to customers with specific tags.\n- `restrict-to-customers`: Restricts a coupon to specific customers.\n- `restrict-to-exclusive-application`: Restricts a coupon so that it cannot be used in combination with other coupons. If more than one coupon is active, a coupon with this restriction is only applied if it provides a larger discount than the other coupons combined. If a coupon with this restriction is applied, all other coupons are removed.\n- `restrict-to-products`: Restricts a coupon to specific products.\n- `paid-by-time`: Specifies a date and time at which a coupon redemption expires if not paid.\n- `redemptions-per-customer`: Restricts the number of times that a coupon can be redeemed by one customer.\n  For example, use this restriction to limit the number of redemptions to one per customer.\n- `total-redemptions`: Restricts the number of times a coupon can be redeemed by different customers.\n- `restrict-to-bxgy`: Provides \"buy X get Y\" promotions.\n  These promotions incentivize new customers to buy and also reward existing customers.\n  This restriction type enables you to add discounted plans to an invoice when a certain quantity of other plans are purchased.\n  For example, if a customer buys two or more books, they get one free bookmark."
    },
    {
      "name": "Credit memos",
      "description": "Use credit memos to provide a customer with store credit.\nA common use case for using a credit memo is to provide a customer with store credit,\nrather than a refund, if the customer pays more than they owe or returns a product.\nFor information on the credit memo resource, see [Resources](https://www.rebilly.com/docs/dev-docs/concepts/#resources)."
    },
    {
      "name": "Credit memos timeline",
      "description": "Use credit memo timelines to maintain an audit trail of changes and activity for each credit memo.\nCredit memos are a means of providing a customer with store credit."
    },
    {
      "name": "Custom domains",
      "description": "Use custom domains to configure and use your own domain for forms and billing portals,\ninstead of the default Rebilly domain: `portal.secure-payments.app`.\nFor more information, see [Configure a custom domain](https://www.rebilly.com/docs/settings/organizations-and-websites#configure-a-custom-domain)."
    },
    {
      "name": "Custom fields",
      "description": "Use custom fields to extend a resource scheme to include custom data that is not provided as a common field.\nDepending on the resource on which the custom field is added, it may be available in the Rebilly UI.\n\nExample: A custom field called `preferredCommunicationChannel` is added to the customer resource.\nIt has two allowed values, which are 'email' and 'phone'.\n\n```js\n{\n  \"customFields\": {\n      \"preferredCommunicationChannel\": \"email\"\n  }\n}\n```\n\nFor detailed information on Rebilly resources, see [Resources](https://www.rebilly.com/docs/dev-docs/concepts/#resources)."
    },
    {
      "name": "Customer authentication",
      "description": "Use these operations to validate the identity of users and manage authentication credentials."
    },
    {
      "name": "Customers",
      "description": "Use these operations to manage customers.\nA customer is an entity that purchases goods or services from you (a merchant),\nand is the payee in any transaction that is credited to you.\nCustomers are associated with payment instruments,\nsubscriptions, invoices, and other related resources.\n\nIn other systems, customers may be referred to as accounts,\nclients, members, patrons, or players.\nFor information on the customer resource, see [Resources](https://www.rebilly.com/docs/dev-docs/concepts/#resources)."
    },
    {
      "name": "Customers timeline",
      "description": "Use customer timelines to maintain an audit trail of changes and activity for each customer."
    },
    {
      "name": "Data exports",
      "description": "Use data export operations to manage the export of resource data, such as:\ntransactions, customers, subscriptions, invoices, or invoice item data.\nCommon data export use cases are:\naccounting, data analysis, reporting, or importing into other databases.\n\nFor detailed information on Rebilly resources,\nsee [Resources](https://www.rebilly.com/docs/dev-docs/concepts/#resources).\n\nFor information on how manage reconciliation, see [Transaction reconciliation](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation)."
    },
    {
      "name": "Deposits",
      "description": "Create and manage deposit requests and manage strategies that determine the deposit amounts to display on the page.\nRebilly hosted deposit form provides a secure and compliant way to deposit funds.\nDeposit forms are customizable, and use fully responsive design, built-in error messaging and validation.\n\n> **Important:** These operations are experimental and may change."
    },
    {
      "name": "Disputes",
      "description": "Use these operations to manage disputes.\nA dispute occurs when a customer contests a charge to their account.\nThe dispute and related information is made available to the merchant by the bank or credit card company.\nThe merchant then has the option to represent the charge and win the case.\nThis process is called dispute resolution.\nIf the merchant is unable to represent the charge, the card issuer typically reverses the sale and adds fees on top of the charge.\nThis process is called a chargeback."
    },
    {
      "name": "Email delivery settings",
      "description": "Use email delivery settings to configure from which email address notifications and broadcast message are sent.\nIn Rebilly, this email address is referred to as a \"From address\".\nSupported email service providers are:\nSMTP, Mailgun, SendGrid, AWS SES, Postmark, and Rebilly."
    },
    {
      "name": "Email messages",
      "description": "Use email messages to email customers directly."
    },
    {
      "name": "Email notifications",
      "description": "Use email notifications to keep customers informed on events,\nand to inform them of events that may require action on their end.\nEmail notifications are targeted email messages that can be plain text or HTML.\n\nEmail notifications can also be used to notify teammates about new customers, blocklist matches, risk score changes, and more.\nFor more information, see [Email notifications](https://www.rebilly.com/docs/automations/email-notifications/)."
    },
    {
      "name": "External identifiers",
      "description": "Use external identifier operations to associate entities such as customers,\ninvoices, transactions, journal accounts, journal entries,\nand more with external services.\n\nTo use external identifiers, you must use an active service credential."
    },
    {
      "name": "Fees",
      "description": "Use fees to reconcile transactions with applicable fees and discount rates.\nFees are not applied directly to transaction amounts, they do not modify the transaction amount.\nFees help to describe each part of the transaction amount.\n\n> **Important:** These operations are experimental and may change."
    },
    {
      "name": "Files",
      "description": "Use the file entity to store files and related metadata.\nFiles can be sorted by size, MIME-type, user-defined tags, and description.\n\nThe following methods are available to upload files:\nmultipart/form-data encoded form, RAW POST &mdash;\nby sending the file contents as the POST body, and fetching from URL &mdash;\nby providing the file URL using the 'url' parameter.\n\nUse the attachments entity to link a file to one or multiple objects, such as:\ncustomer, dispute, transaction, order, plan, product, invoice, or timeline comment.\nAttachments enable you to quickly find and use files related to specific entities."
    },
    {
      "name": "Gateway accounts",
      "description": "Use these operations to manage payment gateway accounts.\nA payment gateway is a service which enables merchants to receive payments from their customers to their merchant account.\nA merchant account is a bank account that enables businesses to receive payments.\nUse payment gateway accounts to connect payment requests to third party networks and platforms."
    },
    {
      "name": "Gateway accounts timeline",
      "description": "Use gateway account timelines to maintain an audit trail of changes and activity for each gateway account."
    },
    {
      "name": "Histograms",
      "description": "Use histogram operations to generate transaction histogram reports with cohorts and periods.\nFor information on the invoice resource, see [Resources](https://www.rebilly.com/docs/dev-docs/concepts/#resources)."
    },
    {
      "name": "Integrations",
      "description": "Use these operations to manage third-party apps that are integrated to your Rebilly account.\nFor more information on third-party apps, and how to integrate them,\nsee [App store](https://www.rebilly.com/docs/app-store/app-store/)."
    },
    {
      "name": "Invoices",
      "description": "Use invoices to bill for the goods or services that you provide.\nIf your invoice includes subscription items, it also includes the corresponding service periods and prices."
    },
    {
      "name": "Invoices timeline",
      "description": "Use invoice timelines to maintain an audit trail of changes and activity for each invoice."
    },
    {
      "name": "Journal",
      "description": "Use journal accounts, entries and records to track and recognize revenue."
    },
    {
      "name": "KYC documents",
      "description": "Use Know Your Customer (KYC) documents to verify your customers identity.\nThe KYC document operations generate a signed link to the Rebilly [KYC document gatherer](https://www.rebilly.com/docs/kyc-and-aml/kyc-document-gatherer/).\n\nDocument types:\n  - `identity-proof`: Validates a customer's identity.\n  - `address-proof`: Validates a customer's address.\n  - `purchase-proof`: Validates a customer's purchase.\n  - `funds-proof`: Validates that a customer has funds.\n  - `credit-file-proof`: Verifies that there is an existing credit file with two sources that match the customer's name, DOB, and address.\n\nRebilly parses and analyzes the documents and accepts or rejects them according to a configurable scoring algorithm.\nWhen all document types in a KYC request are accepted, the status is fulfilled, and the [KYC request fulfilled webhook](https://www.rebilly.com/docs/dev-docs/api/kyc-documents/kyc-request-fulfilled/) is sent.\n\n### Credit file proof\n\nThe `credit-file-proof` KYC document request type is only available in the API,\nthis option is not available in the [KYC document gatherer](https://www.rebilly.com/docs/kyc-and-aml/kyc-document-gatherer/).\nThis request verifies that there is an existing credit file with two sources that match the person's name, date of birth, and address.\n\nIn Canada, to meet FINTRAC requirements, the `credit-file-proof` KYC document request verifies the customer's name, address, and date of birth with a credit agency.\n\nIf `credit-file-proof` is requested in combination with `identity-proof` and `address-proof`,\n`credit-file-proof` is attempted first.\nIf `credit-file-proof` validates the identity and address,\nthe KYC request is considered fulfilled.\nIf the request is not fulfilled,\nredirect your customer to the KYC document gatherer to collect their KYC documents."
    },
    {
      "name": "Lists",
      "description": "Use lists to create and maintain sets of values that may be referenced in rule conditions.\nCommonly used lists contain values related to conditions that target specific properties such as: customers, transactions, or BINs.\n\nYou may grant list edit permissions to members of your team without enabling them to edit rules.\nThis may be useful if your workflow involves frequent updates to value sets that are used in rule or bind conditions.\nList order may not be maintained and duplicates may be removed.\n\nFor more information, see [Value lists](https://www.rebilly.com/docs/automations/create-a-value-list/#value-lists)."
    },
    {
      "name": "Memberships",
      "description": "Use these operations to manage user membership within your organizations.\nMembership describes the relationship between organizations and users.\nFor example, one user could be a member of more than one organization."
    },
    {
      "name": "Metadata",
      "description": "Use these operations to retrieve and manage metadata.\nMetadata is structured information on other data."
    },
    {
      "name": "Orders",
      "description": "Use these operations to manage customer orders.\nAn order is a customer's request to purchase items.\nIt can contain subscription and one-time sale items.\nWhen an order contains one or more subscription items, it is a subscription order.\n\nAn order generates an invoice.\nA subscription order generates an invoice for each service period.\nFor more information, see [Orders](https://www.rebilly.com/docs/dev-docs/concepts/#orders)."
    },
    {
      "name": "Orders experimental",
      "description": "Use these operations to manage orders that include items with mixed recurring subscription plans."
    },
    {
      "name": "Orders timeline",
      "description": "Use order timelines to maintain an audit trail of changes and activity for each order."
    },
    {
      "name": "Organization data exports",
      "description": "Use organization data exports to export your organization data which you may want to do as a business continuity practice.\nThese may also be used to to export data if you decide to migrate to a different payments solution."
    },
    {
      "name": "Organizations",
      "description": "Use these operations to manage your organizations in Rebilly.\nAn organization is an entity that represents you, or your company, as a merchant.\nYou can have multiple organizations.\nFor more information, see [My organizations and websites](https://www.rebilly.com/docs/settings/organizations-and-websites/).\n\nNote: No data, including organizations, is shared between the live and sandbox environments."
    },
    {
      "name": "Payment instruments",
      "description": "Use these operations to manage payment instruments.\nPayment instrument is a term which describes any means of making a digital payment, such as:\ncredit cards, debit cards, direct debits, payment service providers, and digital wallets.\n\nFor more information on payment instruments, see [Payment instruments](https://www.rebilly.com/docs/dev-docs/concepts/#payment-instruments)."
    },
    {
      "name": "Payment tokens",
      "description": "Use payment tokens to reduce the scope of [PCI DSS compliance](https://www.rebilly.com/docs/pci-compliance/).\n\nA payment token can be made using a different authentication scheme (public key authentication), which enables you to create a payment token directly from the browser.\nThis bypasses the need to send sensitive cardholder info to your servers.\nWe recommend using this with the FramePay library, which helps you integrate a form into this API resource and create payment tokens."
    },
    {
      "name": "Plans",
      "description": "Use pricing plans to describe how the customer must pay for [products](https://www.rebilly.com/docs/dev-docs/api/products/).\n\nRebilly provides the following plan types:\n\n- Trial only: Use this plan to create and offer a free or discounted trial period for your product.\n  For example, a free 2 week trial of an internet service.\n  After the trial, the customer can choose to sign up for a paid subscription, or stop using the service.\n- Recurring: Use this plan to create and offer a subscription for your product.\n  For example, a monthly subscription to an internet service that is charged at 20 USD per month.\n- One time sale: Use this plan to create and offer a one-off sale for your products.\n  For example, a one time purchase of two bags of coffee.\n\nFor information on the plans resource, see [Plans](https://www.rebilly.com/docs/dev-docs/concepts/#plans).\n\nFor information on plan pricing, see [Pricing formulas](https://www.rebilly.com/docs/settings/pricing-formulas/)."
    },
    {
      "name": "Products",
      "description": "Use products to describe the goods and services that your business sells.\nA product also describes sales items on invoices and receipts.\nProduct pricing is defined in [plans](https://www.rebilly.com/docs/dev-docs/api/plans/).\nA product may have one or many plans.\n\nFor information on the product resource, see [Product](https://www.rebilly.com/docs/dev-docs/concepts/#products)."
    },
    {
      "name": "Profile",
      "description": "Use these operations to manage user profiles.\nA profile represents the person that is signed in to Rebilly."
    },
    {
      "name": "Quotes",
      "description": "Use quote operations to create and manage quotations.\nQuotations describe the cost of goods or services to potential customers before they commit to a purchase.\nA quote contains an initial invoice preview that can be accepted to become an order.\n\nA quote can contain subscription and one-time sale items.\nWhen a quote contains one or more subscription items, it is a subscription order quote."
    },
    {
      "name": "Quotes timeline",
      "description": "Use quote timelines to maintain an audit trail of changes and activity for each quote."
    },
    {
      "name": "Reports",
      "description": "Use reports operations to retrieve summary information about your customers, subscriptions, transactions, and more."
    },
    {
      "name": "Reset password",
      "description": "Use these operations to manage password resets.\nWhen a password reset is requested, an email with a token is sent.\nIn the email the user must press a reset link, and then create a new password."
    },
    {
      "name": "Risk score",
      "description": "Use risk score operations to configure blocklists based on transaction risk factors."
    },
    {
      "name": "Roles",
      "description": "Use these operations to manage user roles within your team or organization.\nRoles are an implementation of the general hierarchical (Role Based Access Control) RBAC.\nA senior role inherits all of its juniors' Access Control Lists (ACLs) and its own ACL.\nJunior roles are not influenced by the senior role."
    },
    {
      "name": "Rules",
      "description": "Use rules to automate.\nIn the Rebilly rules engine, an action is an operation that executes when an event occurs.\nAction and event conditions are defined in rules.\nRulesets are collections of rules that are associated with an event.\nThe order in which the rules are placed within a ruleset specifies the execution order.\n\nFor a list of events and related actions, see [Events](https://www.rebilly.com/docs/automations/event-types/)."
    },
    {
      "name": "Rules timeline",
      "description": "Use rule timelines to maintain an audit trail of changes and activity for each rule."
    },
    {
      "name": "Search",
      "description": "Use search operations to search data on customers, invoices, orders, transactions and more."
    },
    {
      "name": "Segments",
      "description": "Use these operations to manage UI segments.\nA segment is a filtered view of a data set that can be shared with other users.\nFor example, you may create a transactions segment that displays specific columns that are filtered and sorted based on certain criteria,\nand share it with others in your organization."
    },
    {
      "name": "Service credentials",
      "description": "Use these operations to get, create, and manage credentials for third-party services."
    },
    {
      "name": "Shipping rates",
      "description": "Use these operations to manage shipping rates.\nA shipping rate contains a filter and a pricing for a specific shipping destination."
    },
    {
      "name": "Status",
      "description": "Use this operation to check the status of the Rebilly API.\nNo authentication is required."
    },
    {
      "name": "Storefront account",
      "description": "Use these operations to manage Storefront accounts.\nA Storefront account is an account that the customer is subscribed to in order to use the Rebilly product.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations,\nthe customer must be issued a JWT with limited permissions.\nFor more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\n\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront billing portals",
      "description": "Use these operations to access Storefront billing portals.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations,\nthe customer must be issued a JWT with limited permissions.\nFor more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront cashiers",
      "description": "Use these operations to access Storefront cashiers.\n\nCashiers are customer-scoped configuration resources that define the deposit and payout (withdrawal) settings for a specific customer, website, and currency.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations,\nthe customer must be issued a JWT with limited permissions.\nFor more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser.\n\n> **Important:** These operations are experimental and may change."
    },
    {
      "name": "Storefront checkout forms",
      "description": "Use these operations to access Storefront checkout forms.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations,\nthe customer must be issued a JWT with limited permissions.\nFor more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront custom fields",
      "description": "Use these operations to access Storefront custom fields.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations,\nthe customer must be issued a JWT with limited permissions.\nFor more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront deposits",
      "description": "Use these operations to access Storefront deposits.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations, the customer must be issued a JWT with limited permissions. For more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront invoices",
      "description": "Use these operations to access Storefront invoices.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations, the customer must be issued a JWT with limited permissions. For more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront KYC documents",
      "description": "Use these operations to access Storefront KYC documents.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations, the customer must be issued a JWT with limited permissions. For more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront orders",
      "description": "Use these operations to access Storefront orders.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations, the customer must be issued a JWT with limited permissions. For more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront payment instruments",
      "description": "Use these operations to access Storefront payment instruments.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations, the customer must be issued a JWT with limited permissions. For more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront plans",
      "description": "Use these operations to access Storefront plans.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations,\nthe customer must be issued a JWT with limited permissions.\nFor more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront products",
      "description": "Use these operations to access Storefront products.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations,\nthe customer must be issued a JWT with limited permissions.\nFor more information,\nsee [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront purchases",
      "description": "Use these operations to manage Storefront purchases.\nPurchases are transactions that have been executed related to the purchase of goods or services.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations,\nthe customer must be issued a JWT with limited permissions.\nFor more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront quotes",
      "description": "Use these operations to access Storefront quotes.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations, the customer must be issued a JWT with limited permissions. For more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront transactions",
      "description": "Use these operations to access Storefront transactions.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations,\nthe customer must be issued a JWT with limited permissions.\nFor more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Storefront websites",
      "description": "Use these operations to access Storefront websites.\n\nStorefront operations interact directly with the customer,\nand provide the customer with access to their own data.\n\nTo use Storefront operations,\nthe customer must be issued a JWT with limited permissions.\nFor more information, see [Create a session with username and password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin) and [Exchange an authentication token](https://www.rebilly.com/catalog/all/customer-authentication/postauthenticationtokenexchange).\nStorefront operations are intended to be used directly from an untrusted browser."
    },
    {
      "name": "Tags",
      "description": "Use tags to organize and categorize customers or KYC documents based on keywords."
    },
    {
      "name": "Tracking",
      "description": "Use tracking when debugging and auditing issues.\nTracking is a layer for accessing all activity such as:\nAPI requests, subscriptions, webhooks, events, and more."
    },
    {
      "name": "Transactions",
      "description": "Use these operations to:\n  - set up payment instruments for payments\n  - authorize and hold funds\n  - capture funds\n  - make payments\n  - make payouts\n  - refund transactions."
    },
    {
      "name": "Transactions timeline",
      "description": "Use transaction timelines to maintain an audit trail of changes and activity for each transaction."
    },
    {
      "name": "Usage",
      "description": "Use these operations to manage the product usage of a subscription item for metered billing purposes.\n\nUse metered billing when product quantity is unknown to the customer at the moment of creating a subscription.\nMetered billing is based on reported usage records.\nEvery reported usage updates the quantity of an upcoming invoice item for a specified subscription and a plan.\nTo create a metered billing plan, see [Plans](../Plans)."
    },
    {
      "name": "Users",
      "description": "Use these operations to manage users.\nA user is a person who can login to Rebilly, and take actions based on their granted permissions."
    },
    {
      "name": "Webhooks",
      "description": "Use these operations to manage webhooks.\nWebhooks notify your systems in real-time when certain events occur.\nFor example, when a new transaction occurs or a new subscription is created.\nWebhooks enable you to collect information about events.\nRebilly can send this information by HTTP POST request to a defined URL of your choice."
    },
    {
      "name": "Websites",
      "description": "Use these operations to manage websites.\nA website is where your organization obtains a customer.\nIt is also the processor account and billing descriptor used for payment transactions.\nYou can create multiple websites.\n\nWebsites are related to each invoice and each payment gateway account.\nThis enables you to associate gateway accounts with multiple websites,\nor make them exclusive to particular websites.\nFor more information, see [My organizations and websites](https://www.rebilly.com/docs/settings/organizations-and-websites/)."
    }
  ],
  "x-tagGroups": [
    {
      "name": "Customers",
      "tags": [
        "Customers",
        "Customer authentication",
        "Tags",
        "Customers timeline"
      ]
    },
    {
      "name": "Payment Instruments",
      "tags": [
        "Payment instruments",
        "Payment tokens"
      ]
    },
    {
      "name": "Payments",
      "tags": [
        "Transactions",
        "Disputes",
        "Fees",
        "Transactions timeline"
      ]
    },
    {
      "name": "Orders & Invoices",
      "tags": [
        "Orders",
        "Invoices",
        "Usage",
        "Credit memos",
        "Plans",
        "Products",
        "Coupons",
        "Quotes",
        "Quotes timeline",
        "Shipping rates",
        "Orders timeline",
        "Invoices timeline",
        "Credit memos timeline"
      ]
    },
    {
      "name": "Risk",
      "tags": [
        "Blocklists",
        "Allowlists",
        "KYC documents",
        "AML",
        "Risk score"
      ]
    },
    {
      "name": "Misc",
      "tags": [
        "Custom fields",
        "Files",
        "Search"
      ]
    }
  ],
  "paths": {
    "/aml-checks": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "AML"
        ],
        "summary": "Retrieve AML checks",
        "operationId": "GetAmlCheckCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of AML checks.\nThese checks are records of customer data and potentially matching data in AML lists.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of AML checks retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AmlCheck"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/aml-checks/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "AML"
        ],
        "summary": "Retrieve an AML check",
        "operationId": "GetAmlCheck",
        "x-sdk-operation-name": "get",
        "description": "Retrieves the results of a customer's AML check.\nCustomer metadata and an array of matching AML hits is returned.",
        "responses": {
          "200": {
            "description": "AML check retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AmlCheck"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/aml-checks/{id}/start-review": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "AML"
        ],
        "summary": "Start review of an AML check",
        "operationId": "PostAmlCheckStartReview",
        "x-sdk-operation-name": "startReview",
        "description": "Starts the manual review process for an AML check with a specified ID.\n\nThis operation also sets the AML check `reviewStartTime` to the current date-time,\nand updates the review information.",
        "responses": {
          "201": {
            "description": "AML check review started.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AmlCheck"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/aml-checks/{id}/stop-review": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "AML"
        ],
        "summary": "Stop review of an AML check",
        "operationId": "PostAmlCheckStopReview",
        "x-sdk-operation-name": "stopReview",
        "description": "Stops the manual review process for an AML check with a specified ID.\n\nThis operation also sets the AML check `reviewStartTime` and the reviewer information to null.\nUse this operation when the reviewer must stop the review.\nFor example, if the reviewer must take a break, or ends a shift.",
        "responses": {
          "201": {
            "description": "AML document review stopped.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AmlCheck"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/aml-checks/{id}/review": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "AML"
        ],
        "summary": "Review an AML check",
        "operationId": "PostAmlCheckReview",
        "x-sdk-operation-name": "review",
        "description": "Reviews an AML check.\nThe AML check can be either confirmed or marked as a false positive.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AmlCheckReview"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "AML check reviewed.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AmlCheck"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/aml-settings": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "AML"
        ],
        "summary": "Retrieve AML settings",
        "operationId": "GetAmlSettings",
        "x-sdk-operation-name": "getAmlSettings",
        "description": "Retrieves AML settings.",
        "responses": {
          "200": {
            "description": "AML settings retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AmlSettings"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "AML"
        ],
        "summary": "Update AML settings",
        "operationId": "PutAmlSettings",
        "x-sdk-operation-name": "putAmlSettings",
        "description": "Updates AML settings.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AmlSettings"
              }
            }
          },
          "description": "Settings for AML searches.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "AML settings updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AmlSettings"
                }
              }
            }
          },
          "201": {
            "description": "AML settings created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AmlSettings"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/attachments": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Files"
        ],
        "summary": "Retrieve attachments",
        "operationId": "GetAttachmentCollection",
        "x-sdk-operation-name": "getAllAttachments",
        "x-sdk-resource": "Files",
        "description": "Retrieves a list of attachments. You may sort attachments by: `id`,\n`name`, `relatedId`, `relatedType`, `fileId`, `createdTime`,\nand `updatedTime`.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          },
          {
            "$ref": "#/components/parameters/collectionFields"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of attachments retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Attachment"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$attachments = $client->attachments()->search([\n    'filter' => 'relatedType:customer',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.files.getAllAttachments();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.files.getAllAttachments(params);\n\n// access the collection items, each item is an Attachment\nsecondCollection.items.forEach(attachment => console.log(attachment.fields.relatedType));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$attachmentsPaginator = $service->files()->getAllAttachmentsPaginator(limit: 5, filter: 'relatedType:customer');\nforeach ($attachmentsPaginator as $attachmentPage) {\n    printf(\"Attachments page %d/%d\\n\", $attachmentsPaginator->key() + 1, $attachmentsPaginator->count());\n    foreach ($attachmentPage as $attachment) {\n        printf(\"Attachment #%s (%s): %s\\n\", $attachment->getId(), $attachment->getRelatedType(), $attachment->getName());\n    }\n}\n\n// OR\n\n$attachments = $service->files()->getAllAttachments(filter: 'relatedType:customer');\nforeach ($attachments as $attachment) {\n    printf(\"Attachment #%s (%s): %s\\n\", $attachment->getId(), $attachment->getRelatedType(), $attachment->getName());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Files"
        ],
        "summary": "Create an attachment",
        "operationId": "PostAttachment",
        "x-sdk-operation-name": "attach",
        "x-sdk-resource": "Files",
        "description": "Attaches a file to one or multiple objects, such as: customer,\ndispute, transaction, order, plan, product, invoice, or timeline\ncomment. Attachments enable you to quickly find and use files\nrelated to specific entities.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Attachment"
        },
        "responses": {
          "201": {
            "description": "Attachment created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Attachment"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$attachmentForm = new Rebilly\\Entities\\Attachment();\n$attachmentForm->setFileId('fileId');\n$attachmentForm->setRelatedType($attachmentForm::TYPE_CUSTOMER);\n$attachmentForm->setRelatedId('customerId');\n\ntry {\n    $attachment = $client->attachments()->create($attachmentForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// Define the attachment\nconst data = {\n    // Previously uploaded file ID\n    fileId: 'my-file-id',\n    relatedType: 'customer',\n    relatedId: 'my-customer-id',\n    name: 'an attachment',\n    description: `the customer's file`\n};\n\nconst attachment = await api.files.attach({data});\nconsole.log(attachment.fields.id);\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$attachmentForm = new \\Rebilly\\Sdk\\Model\\Attachment();\n$attachmentForm->setFileId('fileId');\n$attachmentForm->setRelatedType($attachmentForm::RELATED_TYPE_CUSTOMER);\n$attachmentForm->setRelatedId('customerId');\n\ntry {\n    $attachment = $service->files()->attach($attachmentForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/attachments/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Files"
        ],
        "summary": "Retrieve an attachment",
        "operationId": "GetAttachment",
        "x-sdk-operation-name": "getAttachment",
        "x-sdk-resource": "Files",
        "description": "Retrieves an attachment with a specified ID.",
        "responses": {
          "200": {
            "description": "Attachment retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Attachment"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$attachment = $client->attachments()->load('attachmentId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const attachment = await api.files.getAttachment({id: 'foobar-001'});\nconsole.log(attachment.fields.relatedType);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$attachment = $service->files()->getAttachment('attachmentId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Files"
        ],
        "summary": "Update an attachment",
        "operationId": "PutAttachment",
        "x-sdk-operation-name": "updateAttachment",
        "x-sdk-resource": "Files",
        "description": "Updates an attachment with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Attachment"
        },
        "responses": {
          "200": {
            "description": "Attachment updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Attachment"
                }
              }
            }
          },
          "201": {
            "description": "Attachment created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Attachment"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$attachmentForm = new Rebilly\\Entities\\Attachment();\n$attachmentForm->setFileId('fileId');\n$attachmentForm->setRelatedType($attachmentForm::TYPE_CUSTOMER);\n$attachmentForm->setRelatedId('customerId');\n\ntry {\n    $attachment = $client->attachments()->update('attachmentId', $attachmentForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// define the values to update\nconst data = {\n    relatedType: 'customer',\n    relatedId: 'my-customer-id',\n    name: 'an attachment',\n    description: `the customer's file`\n};\n\nconst attachment = await api.files.updateAttachment({id: 'foobar-001', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$attachmentForm = new \\Rebilly\\Sdk\\Model\\Attachment();\n$attachmentForm->setFileId('fileId');\n$attachmentForm->setRelatedType($attachmentForm::RELATED_TYPE_CUSTOMER);\n$attachmentForm->setRelatedId('customerId');\n\ntry {\n    $attachment = $service->files()->updateAttachment('attachmentId', $attachmentForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Files"
        ],
        "summary": "Delete an attachment",
        "operationId": "DeleteAttachment",
        "x-sdk-operation-name": "detach",
        "x-sdk-resource": "Files",
        "description": "Deletes an attachment with a specified ID.",
        "responses": {
          "204": {
            "description": "Attachment deleted."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$client->attachments()->delete('attachmentId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const request = await api.files.detach({id: 'my-attachment-id'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->files()->detach('attachmentId');"
          }
        ]
      }
    },
    "/authentication-options": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Retrieve authentication options",
        "operationId": "GetAuthenticationOption",
        "x-sdk-operation-name": "getAuthOptions",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Retrieves customer authentication options.",
        "responses": {
          "200": {
            "description": "Authentication options retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationOptions"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$authenticationOptions = $client->authenticationOptions()->load();\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$authenticationOptions = $service->customerAuthentication()->getAuthOptions();"
          },
          {
            "lang": "JavaScript",
            "source": "const options = await api.customerAuthentication.getAuthOptions();\nconsole.log(options.fields.credentialTtl);"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Change authentication options",
        "operationId": "PutAuthenticationOption",
        "x-sdk-operation-name": "updateAuthOptions",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Changes customer authentication options.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthenticationOptions"
              }
            }
          },
          "description": "Authentication options resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Authentication options updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationOptions"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$authenticationOptionsForm = new Rebilly\\Entities\\AuthenticationOptions();\n// Regular expression below matches any password with 6+ length that contains alphabet symbols and/or numbers.\n$authenticationOptionsForm->setPasswordPattern('/^[a-zA-Z0-9]{6,}$/');\n\ntry {\n    $authenticationOptions = $client->authenticationOptions()->update($authenticationOptionsForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the authentication options\nconst data = {\n    passwordPattern: null,\n    credentialTtl: 10,\n    authTokenTtl: 20,\n    resetTokenTtl: 30\n};\n\nconst options = await api.customerAuthentication.updateAuthOptions({data});\nconsole.log(options.fields.credentialTtl);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$authenticationOptionsForm = new \\Rebilly\\Sdk\\Model\\AuthenticationOptions();\n// Regular expression below matches any password with 6+ length that contains alphabet symbols and/or numbers.\n$authenticationOptionsForm->setPasswordPattern('/^[a-zA-Z0-9]{6,}$/');\n\ntry {\n    $authenticationOptions = $service->customerAuthentication()->updateAuthOptions($authenticationOptionsForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/authentication-tokens": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Retrieve authentication tokens",
        "operationId": "GetAuthenticationTokenCollection",
        "x-sdk-operation-name": "getAllAuthTokens",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Retrieves a list of customer authentication tokens.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "List of auth tokens retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/AuthenticationTokenResponse"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$authenticationTokens = $client->authenticationTokens()->search([\n    'filter' => 'customerId:testCustomer',\n]);\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$listOfTokens = $service->customerAuthentication()->getAllAuthTokens();\n\n// alternatively you can specify one or more of them\n$listOfTokens = $coreService->customerAuthentication()->getAllAuthTokens(limit: 5, offset: 2);"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.customerAuthentication.getAllAuthTokens();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100};\nconst secondCollection = await api.customerAuthentication.getAllAuthTokens(params);\n\n// access the collection items, each item is an AuthenticationToken\nsecondCollection.items.forEach(token => console.log(token.fields.username));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Login a customer",
        "operationId": "PostAuthenticationToken",
        "x-sdk-operation-name": "login",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Logs in a customer.",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "PublishableApiKey": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthenticationToken"
              }
            }
          },
          "description": "AuthenticationToken resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Login successful.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationTokenResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$authenticationForm = new Rebilly\\Entities\\AuthenticationToken();\n$authenticationForm->setUsername('username');\n$authenticationForm->setPassword('test123');\n\ntry {\n    $authenticationToken = $client->authenticationTokens()->login($authenticationForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "const data = {\n    username: 'foobar',\n    password: 'fuubar'\n\n    // optionally you can define an `expiredTime` to \n    // limit the duration of the session token\n\n    //expiredTime: '2017-09-18T19:17:39Z'\n};\nconst session = await api.customerAuthentication.login({data});\nconsole.log(session.fields.token);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$authenticationForm = \\Rebilly\\Sdk\\Model\\AuthenticationTokenPasswordMode::from();\n$authenticationForm->setUsername('username');\n$authenticationForm->setPassword('test123');\n\ntry {\n    $authenticationToken = $service->customerAuthentication()->login($authenticationForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/authentication-tokens/{token}": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "description": "ID of the authentication token.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Verify an authentication token",
        "operationId": "GetAuthenticationTokenVerification",
        "x-sdk-operation-name": "verify",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Verifies a customer's authentication token.",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "PublishableApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Authentication token verified.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthenticationTokenResponse"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$isVerified = $client->authenticationTokens()->verify('token');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const token = 'dcf6e32f2daee457a1db8ce5fdfbe200';\nconst verification = await api.customerAuthentication.verify({token});\n// if the token is valid then no error will be thrown\nconsole.log(verification.reponse.status) // 200\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$isVerified = $service->customerAuthentication()->verify('token');"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Logout a customer",
        "operationId": "DeleteAuthenticationToken",
        "x-sdk-operation-name": "logout",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Logs out a customer.",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "PublishableApiKey": []
          }
        ],
        "responses": {
          "204": {
            "description": "Customer logged out.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$client->authenticationTokens()->logout('token');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const token = 'dcf6e32f2daee457a1db8ce5fdfbe200';\nconst request = await api.customerAuthentication.logout({token});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$service->customerAuthentication()->logout('token');"
          }
        ]
      }
    },
    "/authentication-tokens/{token}/exchange": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "description": "ID of the authentication token.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Exchange an authentication token",
        "operationId": "PostAuthenticationTokenExchange",
        "x-sdk-operation-name": "exchangeToken",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Exchanges an authentication token for a JWT.\n\n\nBy default, this operation invalidates the exchanged authentication token.",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "PublishableApiKey": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerJWT"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Authentication token exchanged for a JWT.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerJWT"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/blocklists": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Blocklists"
        ],
        "summary": "Retrieve blocklists",
        "operationId": "GetBlocklistCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of all blocklists.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of blocklists retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Blocklist"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$blocklists = $client->blocklists()->search([\n    'filter' => 'value:testValue',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.blocklists.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.blocklists.getAll(params);\n\n// access the collection items, each item is a Blocklist\nsecondCollection.items.forEach(blocklistItem => console.log(blocklistItem.fields.status));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$blocklistsPaginator = $service->blocklists()->getAllPaginator(limit: 5, filter: 'value:testValue');\nforeach ($blocklistsPaginator as $blocklistPage) {\n    printf(\"Blocklists page %d/%d\\n\", $blocklistsPaginator->key() + 1, $blocklistsPaginator->count());\n    foreach ($blocklistPage as $blocklist) {\n        printf(\"Blocklist #%s (%s): %s\\n\", $blocklist->getId(), $blocklist->getType(), $blocklist->getValue());\n    }\n}\n\n// OR\n\n$blocklists = $service->blocklists()->getAll(filter: 'value:testValue');\nforeach ($blocklists as $blocklist) {\n    printf(\"Blocklist #%s (%s): %s\\n\", $blocklist->getId(), $blocklist->getType(), $blocklist->getValue());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Blocklists"
        ],
        "summary": "Create a blocklist",
        "operationId": "PostBlocklist",
        "x-sdk-operation-name": "create",
        "description": "Creates a blocklist.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Blocklist"
        },
        "responses": {
          "201": {
            "description": "Blocklist created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Blocklist"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$blocklistForm = new Rebilly\\Entities\\Blocklist();\n$blocklistForm->setType($blocklistForm::TYPE_EMAIL);\n$blocklistForm->setValue('test@test.com');\n$blocklistForm->setExpiredTime('2025-01-01 05:00:00');\n\ntry {\n    $blocklist = $client->blocklists()->create($blocklistForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the required properties for the new blocklist item\nconst data = {\n    type: 'ip-address',\n    value: '63.118.98.100'\n\n    // optionally provide an `expirationTime` to make\n    // the item expire and function like a `greylist`\n\n    // expirationTime: '2017-09-18T21:50:44Z'\n};\n\n// the ID is optional\nconst firstKey = await api.blocklists.create({data});\n\n// or you can provide one\nconst secondKey = await api.blocklists.create({id: 'my-second-id', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$blocklistForm = new \\Rebilly\\Sdk\\Model\\Blocklist();\n$blocklistForm->setType($blocklistForm::TYPE_EMAIL);\n$blocklistForm->setValue('test@test.com');\n$blocklistForm->setExpirationTime('2025-01-01 05:00:00');\n\ntry {\n    $blocklist = $service->blocklists()->create($blocklistForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/blocklists/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Blocklists"
        ],
        "summary": "Retrieve a blocklist",
        "operationId": "GetBlocklist",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a blocklist with a specified ID.",
        "responses": {
          "200": {
            "description": "Blocklist retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Blocklist"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$blocklist = $client->blocklists()->load('blocklistId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const blocklistItem = await api.blocklists.get({id: 'foobar-001'});\nconsole.log(blocklistItem.fields.status);\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$blocklist = $service->blocklists()->get('blocklistId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Blocklists"
        ],
        "summary": "Create a blocklist with specified ID",
        "operationId": "PutBlocklist",
        "x-sdk-operation-name": "update",
        "description": "Creates a blocklist with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Blocklist"
        },
        "responses": {
          "200": {
            "description": "Blocklist updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Blocklist"
                }
              }
            }
          },
          "201": {
            "description": "Blocklist created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Blocklist"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$blocklistForm = new Rebilly\\Entities\\Blocklist();\n$blocklistForm->setType($blocklistForm::TYPE_EMAIL);\n$blocklistForm->setValue('test@test.com');\n$blocklistForm->setExpiredTime('2025-01-01 05:00:00');\n\ntry {\n    $blocklist = $client->blocklists()->create($blocklistForm, 'blocklistId');\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the required properties for the new blocklist item\nconst data = {\n    type: 'ip-address',\n    value: '63.118.98.100'\n\n    // optionally provide an `expirationTime` to make\n    // the item expire and function like a `greylist`\n\n    // expirationTime: '2017-09-18T21:50:44Z'\n};\n\n// the ID is optional\nconst firstKey = await api.blocklists.create({data});\n\n// or you can provide one\nconst secondKey = await api.blocklists.create({id: 'my-second-id', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$blocklistForm = new \\Rebilly\\Sdk\\Model\\Blocklist();\n$blocklistForm->setType($blocklistForm::TYPE_EMAIL);\n$blocklistForm->setValue('test@test.com');\n$blocklistForm->setExpirationTime('2025-01-01 05:00:00');\n\ntry {\n    $blocklist = $service->blocklists()->update('blocklistId', $blocklistForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Blocklists"
        ],
        "summary": "Delete a blocklist",
        "operationId": "DeleteBlocklist",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a blocklist with a specified ID.",
        "responses": {
          "204": {
            "description": "Blocklist deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$client->blocklists()->delete('blocklistId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const request = await api.blocklists.delete({id: 'my-second-key'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->blocklists()->delete('blocklistId');"
          }
        ]
      }
    },
    "/coupons-redemptions": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "summary": "Retrieve coupon redemptions",
        "operationId": "GetCouponRedemptionCollection",
        "x-sdk-operation-name": "getAllRedemptions",
        "x-sdk-resource": "Coupons",
        "description": "Retrieves a list of coupon redemptions.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of coupon redemptions retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CouponRedemption"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$couponRedemptions = $client->couponsRedemptions()->search([\n    'filter' => 'customerId:testCustomer',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.coupons.getAllRedemptions();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.coupons.getAllRedemptions(params);\n\n// access the collection items, each item is a CouponRedemption\nsecondCollection.items.forEach(redemption => console.log(redemption.fields.status));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$couponRedemptionsPaginator = $service->coupons()->getAllRedemptionsPaginator(limit: 5, filter: 'customerId:testCustomer');\nforeach ($couponRedemptionsPaginator as $couponRedemptionsPage) {\n    printf(\"Coupon redemptions page %d/%d\\n\", $couponRedemptionsPaginator->key() + 1, $couponRedemptionsPaginator->count());\n    foreach ($couponRedemptionsPage as $couponRedemption) {\n        printf(\"Coupon redemption #%s\\n\", $couponRedemption->getId());\n    }\n}\n\n// OR\n\n$couponRedemptions = $service->coupons()->getAllRedemptions(filter: 'customerId:testCustomer');\nforeach ($couponRedemptions as $couponRedemption) {\n    printf(\"Coupon redemption #%s\\n\", $couponRedemption->getId());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "summary": "Redeem a coupon",
        "operationId": "PostCouponRedemption",
        "x-sdk-operation-name": "redeem",
        "x-sdk-resource": "Coupons",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Redeems a coupon.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponRedemption"
              }
            }
          },
          "description": "Coupon resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Coupon redeemed.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponRedemption"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$redemptionForm = new Rebilly\\Entities\\Coupons\\Redemption();\n$redemptionForm->setCustomerId('customerId');\n$redemptionForm->setCouponId('couponId');\n\n$restrictionData = [\n    'type' => Rebilly\\Entities\\Coupons\\Restriction::TYPE_DISCOUNTS_PER_REDEMPTION,\n    'quantity' => 2,\n];\n\n$restrictionForm = Rebilly\\Entities\\Coupons\\Restriction::createFromData($restrictionData);\n\n$redemptionForm->setAdditionalRestrictions([$restrictionForm]);\n\ntry {\n    $couponRedemption = $client->couponsRedemptions()->redeem($redemptionForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// build the redemption data\nconst data = {\n  couponId: 'my-best-coupon',\n  customerId: 'foobar-001'\n};\n\nconst redemption = await api.coupons.redeem({data});\nconsole.log(redemption.fields.id);\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$redemptionForm = new \\Rebilly\\Sdk\\Model\\CouponRedemption();\n$redemptionForm->setCustomerId('customerId');\n$redemptionForm->setCouponId('couponId');\n\n$restrictionForm = new \\Rebilly\\Sdk\\Model\\CouponRestrictionDiscountPerRedemption();\n$restrictionForm->setQuantity(2);\n\n$redemptionForm->setAdditionalRestrictions([$restrictionForm]);\n\ntry {\n    $couponRedemption = $service->coupons()->redeem($redemptionForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/coupons-redemptions/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "summary": "Retrieve a coupon redemption",
        "operationId": "GetCouponRedemption",
        "x-sdk-operation-name": "getRedemption",
        "x-sdk-resource": "Coupons",
        "description": "Retrieves a coupon redemption with a specified ID.",
        "responses": {
          "200": {
            "description": "Coupon redemption retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CouponRedemption"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$couponRedemption = $client->couponsRedemptions()->load('redemptionId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const redemption = await api.coupons.getRedemption({id: 'foobar-001'});\nconsole.log(redemption.fields.id);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$couponRedemption = $service->coupons()->getRedemption('redemptionId');"
          }
        ]
      }
    },
    "/coupons-redemptions/{id}/cancel": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "summary": "Cancel a coupon redemption",
        "operationId": "PostCouponRedemptionCancellation",
        "x-sdk-operation-name": "cancelRedemption",
        "x-sdk-resource": "Coupons",
        "description": "Cancels a coupon redemption with a specified ID.",
        "responses": {
          "201": {
            "description": "Coupon redemption cancelled.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$client->couponsRedemptions()->cancel('id');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const cancellation = await api.coupons.cancelRedemption({id: 'foobar-001'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(cancellation.response.status); // 201"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->coupons()->cancelRedemption('id');"
          }
        ]
      }
    },
    "/coupons": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "summary": "Retrieve coupons",
        "operationId": "GetCouponCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of coupons.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of coupons retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Coupon"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$coupons = $client->coupons()->search([\n    'filter' => 'status:issued',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.coupons.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.coupons.getAll(params);\n\n// access the collection items, each item is a Coupon\nsecondCollection.items.forEach(coupon => console.log(coupon.fields.status));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$couponsPaginator = $service->coupons()->getAllPaginator(limit: 5, filter: 'status:issued');\nforeach ($couponsPaginator as $couponsPage) {\n    printf(\"Coupons page %d/%d\\n\", $couponsPaginator->key() + 1, $couponsPaginator->count());\n    foreach ($couponsPage as $coupon) {\n        printf(\"Coupon #%s (%s): %s\\n\", $coupon->getId(), $coupon->getStatus(), $coupon->getDescription());\n    }\n}\n\n// OR\n\n$coupons = $service->coupons()->getAll(filter: 'status:issued');\nforeach ($coupons as $coupon) {\n    printf(\"Coupon #%s (%s): %s\\n\", $coupon->getId(), $coupon->getStatus(), $coupon->getDescription());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "summary": "Create a coupon",
        "operationId": "PostCoupon",
        "x-sdk-operation-name": "create",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Creates a coupon.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Coupon"
        },
        "responses": {
          "201": {
            "description": "Coupon created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Coupon"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$couponForm = new Rebilly\\Entities\\Coupons\\Coupon();\n\n$discountArray = [\n    'currency' => 'USD',\n    'amount' => 1.99,\n];\n\n$discountForm = new \\Rebilly\\Entities\\Coupons\\Discounts\\Fixed($discountArray);\n$couponForm->setDiscount($discountForm);\n// Coupon can be used right now\n$couponForm->setIssuedTime(date('c'));\n\n$restrictionArray = [\n    'quantity' => 2,\n];\n\n$restrictionForm = new Rebilly\\Entities\\Coupons\\Restrictions\\DiscountsPerRedemption($restrictionArray);\n\n$couponForm->setRestrictions([$restrictionForm]);\n\ntry {\n    $coupon = $client->coupons()->create($couponForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the required properties for the new coupon\nconst data = {\n    description: 'a new coupon',\n    issuedTime: '2017-09-19T20:46:44Z',\n    discount: {\n        type: 'percent',\n        value: 12\n    },\n    restrictions: [{\n        type: 'discounts-per-redemption',\n        quantity: 12\n    }]\n};\n\n// the ID is optional\nconst firstKey = await api.coupons.create({data});\n\n// or you can provide one\nconst secondKey = await api.coupons.create({id: 'my-second-id', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$couponForm = new \\Rebilly\\Sdk\\Model\\Coupon();\n\n$discountForm = new \\Rebilly\\Sdk\\Model\\DiscountFixed();\n$discountForm->setCurrency('USD');\n$discountForm->setAmount(1.99);\n\n$couponForm->setDiscount($discountForm);\n// Coupon can be used right now\n$couponForm->setIssuedTime(date('c'));\n\n$restrictionArray = [\n    'quantity' => 2,\n];\n\n$restrictionForm = new \\Rebilly\\Sdk\\Model\\CouponRestrictionDiscountPerRedemption($restrictionArray);\n\n$couponForm->setRestrictions([$restrictionForm]);\n\ntry {\n    $coupon = $service->coupons()->create($couponForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/coupons/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "summary": "Retrieve a coupon",
        "operationId": "GetCoupon",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a coupon with a specified ID.",
        "responses": {
          "200": {
            "description": "Coupon retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Coupon"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$coupon = $client->coupons()->load('couponId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const coupon = await api.coupons.get({couponId: 'foobar-001'});\nconsole.log(coupon.fields.status);\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$coupon = $service->coupons()->get('couponId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "summary": "Upsert a coupon",
        "operationId": "PutCoupon",
        "x-sdk-operation-name": "update",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Creates or updates (upserts) a coupon with a specified coupon ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Coupon"
        },
        "responses": {
          "200": {
            "description": "Coupon updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Coupon"
                }
              }
            }
          },
          "201": {
            "description": "Coupon created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Coupon"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$couponForm = new Rebilly\\Entities\\Coupons\\Coupon([\n    'issuedTime' => '2022-01-01T00:00:00-04:00',\n]);\n\n$discountArray = [\n    'type' => Rebilly\\Entities\\Coupons\\Discount::TYPE_FIXED,\n    'currency' => 'USD',\n    'amount' => 1.99,\n];\n\n$discountForm = Rebilly\\Entities\\Coupons\\Discount::createFromData($discountArray);\n$couponForm->setDiscount($discountForm);\n\n$restrictionArray = [\n    'type' => Rebilly\\Entities\\Coupons\\Restriction::TYPE_DISCOUNTS_PER_REDEMPTION,\n    'quantity' => 2,\n];\n\n$restrictionForm = Rebilly\\Entities\\Coupons\\Restriction::createFromData($restrictionArray);\n\n$couponForm->setRestrictions([$restrictionForm]);\n\ntry {\n    $coupon = $client->coupons()->create($couponForm, 'couponId');\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// creating a coupon\nconst data = {\n    description: 'a new coupon',\n    issuedTime: '2017-09-19T20:46:44Z',\n    discount: {\n        type: 'percent',\n        value: 12\n    },\n    restrictions: [{\n        type: 'discounts-per-redemption',\n        quantity: 12\n    }]\n};\n\n// the ID is optional\nconst firstKey = await api.coupons.create({data});\n\n// or you can provide one\nconst secondKey = await api.coupons.create({id: 'my-second-id', data});\n\n\n// updating a coupon\nconst data = {\n    description: 'a small update'\n};\n\nconst coupon = await api.coupons.update({id: 'my-second-id', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$couponForm = new \\Rebilly\\Sdk\\Model\\Coupon();\n$couponForm->setIssuedTime('2022-01-01T00:00:00-04:00');\n\n$discountForm = new \\Rebilly\\Sdk\\Model\\DiscountFixed();\n$discountForm->setCurrency('USD');\n$discountForm->setAmount(1.99);\n\n$couponForm->setDiscount($discountForm);\n\n$restrictionForm = new \\Rebilly\\Sdk\\Model\\CouponRestrictionDiscountPerRedemption();\n$restrictionForm->setQuantity(2);\n\n$couponForm->setRestrictions([$restrictionForm]);\n\ntry {\n    $coupon = $service->coupons()->update('couponId', $couponForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/coupons/{id}/expiration": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "summary": "Specify a coupon expiration time",
        "operationId": "PostCouponExpiration",
        "x-sdk-operation-name": "setExpiration",
        "x-sdk-resource": "Coupons",
        "description": "Specifies the expiration time of a coupon with a specified ID.\nThe `expiredTime` of a coupon must be greater than its `issuedTime`.\n\n> **Note:** This operation cannot be performed on expired coupons.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CouponExpiration"
              }
            }
          },
          "description": "Coupon resource."
        },
        "responses": {
          "201": {
            "description": "Coupon expiration set.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Coupon"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "description": "Coupon is expired and has been redeemed.\nUnable to reschedule the expiration.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const data = {\n    expiredTime: \"2020-05-25T18:51:14Z\"\n}\n\nconst coupon = await api.coupons.setExpiration({id: 'my-second-id', data});\n"
          }
        ]
      }
    },
    "/credentials": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Retrieve credentials",
        "operationId": "GetCredentialCollection",
        "x-sdk-operation-name": "getAllCredentials",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Retrieves a list of authentication credentials.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "List of authentication credentials retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerCredential"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customerCredentials = $client->customerCredentials()->search([\n    'filter' => 'customerId:testCustomer',\n]);\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$customerCredentials = $service->customerAuthentication()->getAllCredentials(limit: 10);"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.customerAuthentication.getAllCredentials();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100};\nconst secondCollection = await api.customerAuthentication.getAllCredentials(params);\n\n// access the collection items, each item is a CustomerCredential\nsecondCollection.items.forEach(credential => console.log(credential.fields.customerId));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Create a credential",
        "operationId": "PostCredential",
        "x-sdk-operation-name": "createCredential",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Creates an authentication credential.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerCredential"
              }
            }
          },
          "description": "Credential resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Credential created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCredential"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customerCredentialForm = new Rebilly\\Entities\\CustomerCredential();\n$customerCredentialForm->setCustomerId('customerId');\n$customerCredentialForm->setUsername('test');\n$customerCredentialForm->setPassword('1234');\n\ntry {\n    $customerCredential = $client->customerCredentials()->create($customerCredentialForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the required properties for the new credential\nconst data = {\n    username: 'foobar',\n    password: 'fuubar',\n    customerId: 'foobar-0001'\n\n    // optionally you can define an `expiredTime` to \n    // limit the duration of the credential\n\n    //expiredTime: '2017-09-18T19:17:39Z'\n};\n\n// the ID is optional\nconst firstCredential = await api.customerAuthentication.createCredential({data});\n\n// or you can provide one\nconst secondCredential = await api.customerAuthentication.createCredential({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$customerCredentialForm = \\Rebilly\\Sdk\\Model\\CustomerCredential::from([])\n    ->setCustomerId('customerId')\n    ->setUsername('test')\n    ->setPassword('1234');\n\ntry {\n    $customerCredential = $service->customerAuthentication()->createCredential($customerCredentialForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/credentials/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Retrieve a credential",
        "operationId": "GetCredential",
        "x-sdk-operation-name": "getCredential",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Retrieves a credential with a specified ID.",
        "responses": {
          "200": {
            "description": "Credential retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCredential"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customerCredential = $client->customerCredentials()->load('credentialId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const credential = await api.customerAuthentication.getCredential({id: 'my-first-id'});\nconsole.log(credential.fields.customerId);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$customerCredential = $service->customerAuthentication()->getCredential('credentialId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Upsert a credential",
        "operationId": "PutCredential",
        "x-sdk-operation-name": "updateCredential",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Creates or updates (upserts) an authentication credential with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerCredential"
              }
            }
          },
          "description": "Credential resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Credential updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCredential"
                }
              }
            }
          },
          "201": {
            "description": "Credential created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCredential"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customerCredentialForm = new Rebilly\\Entities\\CustomerCredential();\n$customerCredentialForm->setCustomerId('customerId');\n$customerCredentialForm->setUsername('test');\n$customerCredentialForm->setPassword('1234');\n\ntry {\n    $customerCredential = $client->customerCredentials()->update('credentialId', $customerCredentialForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// creating a new credential\nconst data = {\n    username: 'foobar',\n    password: 'fuubar',\n    customerId: 'foobar-0001'\n\n    // optionally you can define an `expiredTime` to \n    // limit the duration of the credential\n\n    //expiredTime: '2017-09-18T19:17:39Z'\n};\n\n// the ID is optional\nconst firstCredential = await api.customerAuthentication.createCredential({data});\n\n// or you can provide one\nconst secondCredential = await api.customerAuthentication.createCredential({id: 'my-second-id', data});\n\n\n\n\n// updating a credential\nconst data = {\n    username: 'foobar',\n    password: 'hell0'\n};\n\nconst secondCredential = await api.customerAuthentication.updateCredential({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$customerCredentialForm = \\Rebilly\\Sdk\\Model\\CustomerCredential::from([])\n    ->setCustomerId('customerId')\n    ->setUsername('test')\n    ->setPassword('1234');\n\ntry {\n    $customerCredential = $service->customerAuthentication()->updateCredential('credentialId', $customerCredentialForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Delete a credential",
        "operationId": "DeleteCredential",
        "x-sdk-operation-name": "deleteCredential",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Deletes an authentication credential with a specified ID.",
        "responses": {
          "204": {
            "description": "Credential deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$client->customerCredentials()->delete('credentialId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const request = await api.customerAuthentication.deleteCredential({id: 'my-second-key'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$service->customerAuthentication()->deleteCredential('credentialId');"
          }
        ]
      }
    },
    "/custom-fields/{resource}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/customFieldResource"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Custom fields"
        ],
        "summary": "Retrieve custom fields",
        "operationId": "GetCustomFieldCollection",
        "x-sdk-operation-name": "getAll",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "description": "Retrieves the custom fields schema for a specified resource.",
        "responses": {
          "200": {
            "description": "Schema of custom fields retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "description": "List of custom fields.",
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomField"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customFields = $client->customFields()->search('customers', [\n    'filter' => 'type:boolean',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters except `resource` are optional\nconst firstCollection = await api.customFields.getAll({resource: 'customers'});\n\n// alternatively you can specify one or more of them\nconst params = {resource: 'customers', limit: 20, offset: 100};\nconst secondCollection = await api.customFields.getAll(params);\n\n// access the collection items, each item is a CustomField\nsecondCollection.items.forEach(customField => console.log(customField.fields.description));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$customFieldsPaginator = $service->customFields()->getAllPaginator(resource: 'customers', limit: 5);\nforeach ($customFieldsPaginator as $customFieldPage) {\n    printf(\"Custom fields page %d/%d\\n\", $customFieldsPaginator->key() + 1, $customFieldsPaginator->count());\n    foreach ($customFieldPage as $customField) {\n        printf(\"Custom field #%s: %s\\n\", $customField->getName(), $customField->getDescription());\n    }\n}\n\n// OR\n\n$customFields = $service->customFields()->getAll('customers');\nforeach ($customFields as $customField) {\n    printf(\"Custom field #%s: %s\\n\", $customField->getName(), $customField->getDescription());\n}"
          }
        ]
      }
    },
    "/custom-fields/{resource}/{name}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/customFieldResource"
        },
        {
          "name": "name",
          "in": "path",
          "description": "ID of the custom field.",
          "required": true,
          "schema": {
            "type": "string",
            "maxLength": 60,
            "pattern": "^[\\w-]+$"
          }
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Custom fields"
        ],
        "summary": "Retrieve a custom field",
        "operationId": "GetCustomField",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a specified custom field schema for a specified resource.",
        "responses": {
          "200": {
            "description": "Custom field schema retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomField"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customField = $client->customFields()->load('customers', 'testFieldName');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const customField = await api.customFields.get({resource: 'customers', name: 'dob'});\nconsole.log(customField.fields.description);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$customField = $service->customFields()->get('customers', 'testFieldName');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Custom fields"
        ],
        "summary": "Create or alter a custom field",
        "operationId": "PutCustomField",
        "x-sdk-operation-name": "create",
        "description": "Creates or alters a specified custom field schema for a specified resource.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomField"
              }
            }
          },
          "description": "Custom fields schema of the specified resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Custom field updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomField"
                }
              }
            }
          },
          "201": {
            "description": "Custom field created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomField"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "409": {
            "description": "Schema in use. To remove or alter the schema, remove all\nassociated data.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customFieldForm = new Rebilly\\Entities\\CustomField();\n$customFieldForm->setType($customFieldForm::TYPE_BOOLEAN);\n\ntry {\n    $customField = $client->customFields()->update('customers', 'testFieldName', $customFieldForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// creating a custom field\nconst data = {\n    name: 'Date of Birth',\n    type: 'date',\n    description: `The customer's date of birth`\n};\n\n// define the entire payload\nconst params = {resource: 'customers', name: 'dob', data};\n\n// create the custom field\nconst customField = await api.customFields.create(params);\n\n// or update the custom field\nconst customField = await api.customFields.update(params);\nconsole.log(customField.fields.name);\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$customFieldForm = new \\Rebilly\\Sdk\\Model\\BooleanCustomField();\n$customFieldForm->setDescription('testFieldDescription');\n\ntry {\n    $customField = $service->customFields()->create('customers', 'testFieldName', $customFieldForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/customers": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Retrieve customers",
        "operationId": "GetCustomerCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a list of customers.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          },
          {
            "$ref": "#/components/parameters/collectionFields"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of customers retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Customer"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customers = $client->customers()->search([\n    'filter' => 'firstName:John',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.customers.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.customers.getAll(params);\n\n// access the collection items, each item is a Customer\nsecondCollection.items.forEach(customer => console.log(customer.fields.primaryAddress.firstName));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$customersPaginator = $service->customers()->getAllPaginator(limit: 5);\nforeach ($customersPaginator as $customerPage) {\n    printf(\"Customers page %d/%d\\n\", $customersPaginator->key() + 1, $customersPaginator->count());\n    foreach ($customerPage as $customer) {\n        printf(\"Customer #%s: %s\\n\", $customer->getId(), $customer->getFirstName());\n    }\n}\n\n// OR\n\n$customers = $service->customers()->getAll(filter: 'firstName:John');\nforeach ($customers as $customer) {\n    printf(\"Customer #%s: %s\\n\", $customer->getId(), $customer->getFirstName());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Create a customer",
        "operationId": "PostCustomer",
        "x-sdk-operation-name": "create",
        "description": "Creates a new customer and customer ID.\n\nThe customer's primary address is used as the default address for payment instruments,\nsubscriptions, and invoices if none are provided.\n\nIf the customer already has an identifier within your system,\nand you want to create customer with a predefined ID &mdash;\nto prevent duplicate customers, use the _Upsert a customer with predefined ID_ operation.\nFor more information, see [Prevent duplicate customers](/docs/dev-docs/customers#prevent-duplicate-customers).",
        "requestBody": {
          "$ref": "#/components/requestBodies/Customer"
        },
        "responses": {
          "201": {
            "description": "Customer created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Customer"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customerForm = new Rebilly\\Entities\\Customer();\n$customerForm->setPrimaryAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n]);\n\ntry {\n    $customer = $client->customers()->create($customerForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new customer\nconst data = {\n    primaryAddress: {\n        firstName: 'John',\n        lastName: 'Doe',\n        emails: [{\n            label: 'main',\n            value: 'john.doe+test@grr.la',\n            primary: true\n        }],\n    }\n};\n\n// the ID is optional\nconst firstCustomer = await api.customers.create({data});\n\n// or you can provide one\nconst secondCustomer = await api.customers.create({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$customerForm = \\Rebilly\\Sdk\\Model\\Customer::from([])\n    ->setWebsiteId('websiteId')\n    ->setPrimaryAddress(\n        \\Rebilly\\Sdk\\Model\\ContactObject::from([])\n            ->setFirstName('John')\n            ->setLastName('Doe')\n            ->setAddress('Test street 5')\n            ->setEmails([\n                \\Rebilly\\Sdk\\Model\\ContactEmails::from([])\n                    ->setLabel('main')\n                    ->setValue('johndoe@email.com')\n                    ->setPrimary(true),\n            ]),\n    );\n\ntry {\n    $customer = $service->customers()->create($customerForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/customers/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Retrieve a customer",
        "operationId": "GetCustomer",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a customer with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          },
          {
            "$ref": "#/components/parameters/collectionFields"
          }
        ],
        "responses": {
          "200": {
            "description": "Customer retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Customer"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customers = $client->customers()->load('myCustomerId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const customer = await api.customers.get({id: 'foobar-001'});\nconsole.log(customer.fields.primaryAddress.firstName);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$customer = $service->customers()->get('customerId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Upsert a customer",
        "operationId": "PutCustomer",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a customer with a specified ID.\n\nIf the customer already has an identifier within your system,\nand you want to create a customer with a specified ID &mdash; use this operation to prevent duplicate customers.\nFor more information, see [Prevent duplicate customers](https://www.rebilly.com/docs/dev-docs/customers#prevent-duplicate-customers).",
        "requestBody": {
          "$ref": "#/components/requestBodies/Customer"
        },
        "responses": {
          "200": {
            "$ref": "#/components/responses/Customer"
          },
          "201": {
            "description": "Customer with a specified ID created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Customer"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customerForm = new Rebilly\\Entities\\Customer();\n$customerForm->setPrimaryAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n]);\n\ntry {\n    $customer = $client->customers()->update('myCustomerId', $customerForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// creating a customer\nconst data = {\n    primaryAddress: {\n        firstName: 'John',\n        lastName: 'Doe',\n        emails: [{\n            label: 'main',\n            value: 'john.doe+test@grr.la',\n            primary: true\n        }],\n    }\n};\n\n// the ID is optional\nconst firstCustomer = await api.customers.create({data});\n\n// or you can provide one\nconst secondCustomer = await api.customers.create({id: 'my-second-id', data});\n\n\n\n// updating a customer\nconst data = {\n    primaryAddress: {\n        firstName: 'Johnny',\n        lastName: 'Doe',\n        emails: [{\n            label: 'main',\n            value: 'johnny.doe+test@grr.la',\n            primary: true\n        }],\n    }\n};\n\nconst customer = await api.customers.update({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$customerForm = \\Rebilly\\Sdk\\Model\\Customer::from([])\n    ->setWebsiteId('websiteId')\n    ->setPrimaryAddress(\n        \\Rebilly\\Sdk\\Model\\ContactObject::from([])\n            ->setFirstName('John')\n            ->setLastName('Doe')\n            ->setAddress('Test street 5')\n            ->setEmails([\n                \\Rebilly\\Sdk\\Model\\ContactEmails::from([])\n                    ->setLabel('main')\n                    ->setValue('johndoe@email.com')\n                    ->setPrimary(true),\n            ]),\n    );\n\ntry {\n    $customer = $service->customers()->update('myCustomerId', $customerForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "parameters": [
          {
            "in": "query",
            "name": "targetCustomerId",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "ID of the customer that you want to delete. This field is used\nto obtain the customer's data."
          }
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Merge and delete a customer",
        "operationId": "DeleteCustomer",
        "x-sdk-operation-name": "merge",
        "description": "Merges one duplicate customer to another target customer and deletes the former.",
        "responses": {
          "204": {
            "description": "Customer is merged and deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->customers()->merge('customerId', 'targetCustomerId');"
          }
        ]
      }
    },
    "/customer-timeline-custom-events": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers timeline"
        ],
        "summary": "Retrieve customer timeline custom event types",
        "operationId": "GetCustomerTimelineCustomEventTypeCollection",
        "x-sdk-operation-name": "getAll",
        "x-sdk-skip": true,
        "description": "Retrieves a list of customer timeline custom event types.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "List of customer timeline custom event types retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerTimelineCustomEvent"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers timeline"
        ],
        "summary": "Create customer timeline custom event type",
        "operationId": "PostCustomerTimelineCustomEventType",
        "x-sdk-operation-name": "create",
        "x-sdk-skip": true,
        "description": "Creates a customer timeline custom event type.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerTimelineCustomEvent"
              }
            }
          },
          "description": "Customer timeline custom event type resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Customer timeline custom event type created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerTimelineCustomEvent"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/customer-timeline-custom-events/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers timeline"
        ],
        "summary": "Retrieve customer timeline custom event type",
        "operationId": "GetCustomerTimelineCustomEventType",
        "x-sdk-operation-name": "get",
        "x-sdk-skip": true,
        "description": "Retrieves a customer timeline custom event type with a specified ID.",
        "responses": {
          "200": {
            "description": "Customer timeline custom event type retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerTimelineCustomEvent"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/customers/{id}/lead-source": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Retrieve a customer's lead source",
        "operationId": "GetCustomerLeadSource",
        "x-sdk-operation-name": "getLeadSource",
        "description": "Retrieves lead source data for a customer with a specified ID.\n\nA lead source is the marketing campaign that generates customer interaction, a sale, or a trial.\nFor more information, see [Lead source attribution](https://www.rebilly.com/docs/dev-docs/customers/#lead-source-attribution).",
        "responses": {
          "200": {
            "description": "Lead source retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadSource"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$customer = $client->customers()->load('myCustomerId');\n$leadSource = $customer->getLeadSource();\n"
          },
          {
            "lang": "JavaScript",
            "source": "const lead = await api.customers.getLeadSource({id: 'my-second-id'});\nconsole.log(lead.fields.affiliate);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$customerLeadSource = $service->customers()->getLeadSource('customerId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Create a customer's lead source",
        "operationId": "PutCustomerLeadSource",
        "x-sdk-operation-name": "createLeadSource",
        "description": "Creates a lead source for a customer with a specified ID.\n\nA lead source is the marketing campaign that\ngenerates customer interaction, a sale, or a trial.\nFor more information, see [Lead source attribution](/docs/dev-docs/lead-source-attribution).",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/LeadSource"
              }
            }
          },
          "description": "Lead Source resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Lead source created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LeadSource"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$leadSourceForm = new Rebilly\\Entities\\LeadSource();\n$leadSourceForm->setSource('TestSource');\n$leadSourceForm->setCampaign('TestCampaign');\n\ntry {\n    $customer = $client->customers()->updateLeadSource('myCustomerId', $leadSourceForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new lead source\nconst data = {\n    medium: 'foobar',\n    source: 'www.google.com',\n    campaign: 'my-first-campaign',\n    term: 'subscriptions',\n    content: 'subscription business',\n    affiliate: 'Acme',\n    subAffiliate: null,\n    salesAgent: null,\n    clickId: null,\n    path: null,\n    ipAddress: '12.34.56.78',\n    currency: 'USD',\n    amount: 0\n};\n\nconst lead = await api.customers.createLeadSource({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$leadSourceForm = \\Rebilly\\Sdk\\Model\\LeadSource::from([])\n    ->setSource('TestSource')\n    ->setCampaign('TestCampaign');\n\ntry {\n    $customer = $service->customers()->createLeadSource('myCustomerId', $leadSourceForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Delete a customer's lead source",
        "operationId": "DeleteCustomerLeadSource",
        "x-sdk-operation-name": "deleteLeadSource",
        "description": "Deletes lead source data for a customer with a specified ID.",
        "responses": {
          "204": {
            "description": "Lead source deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$client->customers()->deleteLeadSource('myCustomerId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const request = await api.customers.deleteLeadSource({id: 'my-second-id'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->customers()->deleteLeadSource('customerId');"
          }
        ]
      }
    },
    "/customers/{id}/timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers timeline"
        ],
        "summary": "Retrieve customer timeline messages",
        "operationId": "GetCustomerTimelineCollection",
        "x-sdk-operation-name": "getAllTimelineMessages",
        "description": "Retrieves customer timeline messages.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of customer timeline messages retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CustomerTimeline"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional except for the `id`\nconst firstCollection = await api.customers\n    .getAllTimelineMessages({id: 'my-customer'});\n\n// alternatively you can specify one or more of them\nconst params = {id: 'my-customer', limit: 20, offset: 100};\nconst secondCollection = await api.customers.getAllTimelineMessages(params);\n\n// access the collection items, each item is a CustomerTimeline\nsecondCollection.items\n    .forEach(message => console.log(message.fields.eventType));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers timeline"
        ],
        "summary": "Create a customer timeline comment",
        "operationId": "PostCustomerTimeline",
        "x-sdk-operation-name": "createTimelineComment",
        "description": "Creates a customer timeline comment or custom defined event.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CustomerTimeline"
              }
            }
          },
          "description": "Customer timeline resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Customer timeline comment or custom defined event created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// Create a comment\nconst firstComment = await api\n    .customers.createTimelineComment({id: 'my-customer-id', data: {message: 'Your comment here'}});\n\n// Using params object, mentions and references\nconst message = `Example of mentions @user@mydomain.com and references #customers-customer-id`;\nconst params = {\n    id: 'my-customer-id',\n    data: {\n        message,\n    },\n};\nconst secondComment = await api.customers.createTimelineComment(params);"
          }
        ]
      }
    },
    "/customers/{id}/timeline/{messageId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "messageId",
          "in": "path",
          "description": "ID of the customer timeline message.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers timeline"
        ],
        "summary": "Retrieve a customer timeline message",
        "operationId": "GetCustomerTimeline",
        "x-sdk-operation-name": "getTimelineMessage",
        "description": "Retrieves a customer message with a specified ID.",
        "responses": {
          "200": {
            "description": "Customer message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const message = await api.customers\n    .getTimelineMessage({id: 'foobar-001', messageId: 'message-202'});\nconsole.log(message.fields.eventType);"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers timeline"
        ],
        "summary": "Delete a customer timeline message",
        "operationId": "DeleteCustomerTimeline",
        "x-sdk-operation-name": "deleteTimelineMessage",
        "description": "Deletes a customer timeline message with a specified ID.",
        "responses": {
          "204": {
            "description": "Customer timeline message deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const request = await api.customers\n    .deleteTimelineMessage({id: 'foobar-001', messageId: 'message-202'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          }
        ]
      }
    },
    "/disputes": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Disputes"
        ],
        "summary": "Retrieve disputes",
        "operationId": "GetDisputeCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of all disputes.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of disputes successfully retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Dispute"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$disputes = $client->disputes()->search([\n    'filter' => 'transactionId:testId',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.disputes.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.disputes.getAll(params);\n\n// access the collection items, each item is a Dispute\nsecondCollection.items.forEach(dispute => console.log(dispute.fields.transactionId));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$disputesPaginator = $service->disputes()->getAllPaginator(filter: 'transactionId:testId', limit: 5);\nforeach ($disputesPaginator as $disputesPage) {\n    printf(\"Disputes page %d/%d\\n\", $disputesPaginator->key() + 1, $disputesPaginator->count());\n    foreach ($disputesPage as $dispute) {\n        printf(\"Dispute #%s (%s)\\n\", $dispute->getId(), $dispute->getStatus());\n    }\n}\n\n// OR\n\n$disputes = $service->disputes()->getAll(filter: 'transactionId:testId');\nforeach ($disputes as $dispute) {\n    printf(\"Dispute #%s (%s)\\n\", $dispute->getId(), $dispute->getStatus());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Disputes"
        ],
        "summary": "Create a dispute",
        "operationId": "PostDispute",
        "x-sdk-operation-name": "create",
        "description": "Creates a new dispute.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Dispute"
        },
        "responses": {
          "201": {
            "description": "Dispute created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispute"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$disputeForm = new Rebilly\\Entities\\Dispute();\n$disputeForm->setTransactionId('transactionId');\n$disputeForm->setCurrency('USD');\n$disputeForm->setAmount(10);\n$disputeForm->setReasonCode(1000);\n$disputeForm->setType($disputeForm::TYPE_1CB);\n$disputeForm->setStatus($disputeForm::STATUS_RESPONSE_NEEDED);\n$disputeForm->setPostedTime('2025-01-01 05:00:00');\n\ntry {\n    $dispute = $client->disputes()->create($disputeForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new dispute\nconst data = {\n    transactionId: 'my-transaction-id',\n    currency: 'USD',\n    amount: 5,\n    reasonCode: '1000',\n    type: 'first-chargeback',\n    status: 'response-needed',\n    acquirerReferenceNumber: '143543',\n    postedTime: '2017-09-19T20:46:48Z',\n    deadlineTime: '2017-09-19T20:46:48Z'\n};\n\n// the ID is optional\nconst firstdispute = await api.disputes.create({data});\n\n// or you can provide one\nconst secondDispute = await api.disputes.create({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$disputeForm = new \\Rebilly\\Sdk\\Model\\PostDisputeRequest();\n$disputeForm->setTransactionId('transactionId');\n$disputeForm->setCurrency('USD');\n$disputeForm->setAmount(10);\n$disputeForm->setReasonCode('1000');\n$disputeForm->setType($disputeForm::TYPE_INFORMATION_REQUEST);\n$disputeForm->setStatus($disputeForm::STATUS_RESPONSE_NEEDED);\n$disputeForm->setPostedTime('2025-01-01 05:00:00');\n\ntry {\n    $dispute = $service->disputes()->create($disputeForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/disputes/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Disputes"
        ],
        "summary": "Retrieve a dispute",
        "operationId": "GetDispute",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a dispute with a specified ID.",
        "responses": {
          "200": {
            "description": "Dispute retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispute"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$dispute = $client->disputes()->load('disputeId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const dispute = await api.disputes.get({id: 'foobar-001'});\nconsole.log(dispute.fields.firstName);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$dispute = $service->disputes()->get('disputeId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Disputes"
        ],
        "summary": "Upsert a dispute",
        "operationId": "PutDispute",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a dispute with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Dispute"
        },
        "responses": {
          "200": {
            "description": "Dispute updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispute"
                }
              }
            }
          },
          "201": {
            "description": "Dispute created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Dispute"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$disputeForm = new Rebilly\\Entities\\Dispute();\n$disputeForm->setTransactionId('transactionId');\n$disputeForm->setCurrency('USD');\n$disputeForm->setAmount(10);\n$disputeForm->setReasonCode(1000);\n$disputeForm->setType($disputeForm::TYPE_1CB);\n$disputeForm->setStatus($disputeForm::STATUS_RESPONSE_NEEDED);\n$disputeForm->setPostedTime('2025-01-01 05:00:00');\n\ntry {\n    $dispute = $client->disputes()->update('disputeId', $dispute);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// creating a dispute\nconst data = {\n    transactionId: 'my-transaction-id',\n    currency: 'USD',\n    amount: 5,\n    reasonCode: '1000',\n    type: 'first-chargeback',\n    status: 'response-needed',\n    acquirerReferenceNumber: '143543',\n    postedTime: '2017-09-19T20:46:48Z',\n    deadlineTime: '2017-09-19T20:46:48Z'\n};\n\n// the ID is optional\nconst firstdispute = await api.disputes.create({data});\n\n// or you can provide one\nconst secondDispute = await api.disputes.create({id: 'my-second-id', data});\n\n\n\n// updating a dispute\nconst data = {\n    transactionId: 'my-other-transaction-id',\n    currency: 'USD',\n    amount: 5,\n    reasonCode: '1000',\n    type: 'first-chargeback',\n    status: 'response-needed',\n    acquirerReferenceNumber: '143543',\n    postedTime: '2017-09-19T20:46:48Z',\n    deadlineTime: '2017-09-19T20:46:48Z'\n};\n\nconst dispute = await api.disputes.update({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$disputeForm = new \\Rebilly\\Sdk\\Model\\PostDisputeRequest();\n$disputeForm->setTransactionId('transactionId');\n$disputeForm->setCurrency('USD');\n$disputeForm->setAmount(10);\n$disputeForm->setReasonCode('1000');\n$disputeForm->setType($disputeForm::TYPE_INFORMATION_REQUEST);\n$disputeForm->setStatus($disputeForm::STATUS_RESPONSE_NEEDED);\n$disputeForm->setPostedTime('2025-01-01 05:00:00');\n\ntry {\n    $dispute = $service->disputes()->update('disputeId', $disputeForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/{resource}/{resourceId}/external-identifiers/{service}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/externalIdentifierResource"
        },
        {
          "$ref": "#/components/parameters/externalIdentifierResourceId"
        },
        {
          "$ref": "#/components/parameters/externalIdentifierService"
        }
      ]
    },
    "/files": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Files"
        ],
        "summary": "Retrieve files",
        "operationId": "GetFileCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of files.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionFields"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of files retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/File"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$files = $client->files()->search([\n    'filter' => 'name:TestFile',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.files.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.files.getAll(params);\n\n// access the collection items, each item is a File\nsecondCollection.items.forEach(file => console.log(file.fields.name));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$filesPaginator = $service->files()->getAllPaginator(limit: 5, filter: 'name:TestFile');\nforeach ($filesPaginator as $filesPage) {\n    printf(\"Files page %d/%d\\n\", $filesPaginator->key() + 1, $filesPaginator->count());\n    foreach ($filesPage as $file) {\n        printf(\"File #%s: %s\\n\", $file->getId(), $file->getName());\n    }\n}\n\n// OR\n\n$files = $service->files()->getAll(filter: 'name:TestFile');\nforeach ($files as $file) {\n    printf(\"File #%s: %s\\n\", $file->getId(), $file->getName());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Files"
        ],
        "summary": "Create a file",
        "operationId": "PostFile",
        "x-sdk-operation-name": "upload",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "PublishableApiKey": []
          }
        ],
        "description": "Creates a file.\n\nAdditionally, a file can be sent by:\n\n - Multipart/form-data POST request: In this request,\n the file is uploaded and all property names are the same as the JSON names.\n - File body request: In this request,\n the file body is sent as the request body, with the appropriate `Content-Type`.\n No additional properties can be set with the request data.\n\nPermitted file types: `.jpg`, `.png`, `.gif`, and `.pdf`.\n\nWhen using a publishable API key, only private files can be created.\nThe files can be modified at a later point or time,\nor can be accessed using a secret API key.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/FileCreateFromInline"
                  },
                  {
                    "$ref": "#/components/schemas/FileCreateFromUrl"
                  }
                ]
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "File created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/File"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$fileForm = new Rebilly\\Entities\\File();\n$fileForm->setUrl('http://test.com/somefile.jpg');\n\ntry {\n    $file = $client->files()->create($fileForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// using a FileList to fetch a file\nconst fileObject = fileList[0];\n\nconst addedFile = await api.files.upload({fileObject});\n\n\n\n\n// or, upload and update a file at the same time\n\n// using a FileList to fetch a file\nconst fileObject = fileList[0];\n\n// define file data\nconst data = {\n    description: 'my new file',\n    tags: ['original']\n};\n\nconst addedFile = await api.files.uploadAndUpdate({fileObject, data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$fileForm = new \\Rebilly\\Sdk\\Model\\FileCreateFromUrl();\n$fileForm->setUrl('http://test.com/somefile.jpg');\n\ntry {\n    $file = $service->files()->upload($fileForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/files/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Files"
        ],
        "summary": "Retrieve a file record",
        "operationId": "GetFile",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a file with a specified ID.",
        "responses": {
          "200": {
            "description": "File retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/File"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$file = $client->files()->load('fileId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const file = await api.files.get({id: 'foobar-001'});\nconsole.log(file.fields.name);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$file = $service->files()->get('fileId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Files"
        ],
        "summary": "Update a file",
        "operationId": "PutFile",
        "x-sdk-operation-name": "update",
        "description": "Updates a file with a specified ID.\n\n> **Note:** Files can only be uploaded by POST request.\nFor more information, see the Create a file operation.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/File"
              }
            }
          },
          "description": "File resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "File updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/File"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$fileForm = new Rebilly\\Entities\\File();\n$fileForm->setDescription('This is a test file');\n\ntry {\n    $file = $client->files()->update('fileId', $fileForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// define the values to update\nconst data = {\n    name: 'new file name',\n    description: 'a fitting description',\n    tags: ['original']\n};\n\nconst file = await api.files.update({id: 'my-file-id', data});\n\n\n\n\n// or, upload and update a file at the same time\n\n// using a FileList to fetch a file\nconst fileObject = fileList[0];\n\n// define file data\nconst data = {\n    description: 'my new file',\n    tags: ['original']\n};\n\nconst addedFile = await api.files.uploadAndUpdate({fileObject, data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$fileForm = new \\Rebilly\\Sdk\\Model\\File();\n$fileForm->setDescription('This is a test file');\n\ntry {\n    $file = $service->files()->update('fileId', $fileForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Files"
        ],
        "summary": "Delete a file",
        "operationId": "DeleteFile",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a file with a specified ID.",
        "responses": {
          "204": {
            "description": "File deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$client->files()->delete('fileId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "// simply delete a file\nconst request = await api.files.delete({id: 'my-file-id'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204\n\n\n\n\n// or, delete a file and its related resource attachments\n// use this method to remove the file completely from all resources at once.\n\nconst request = await api.files.detachAndDelete({id: 'my-file-id'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->files()->delete('fileId');"
          }
        ]
      }
    },
    "/files/{id}/download": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "$ref": "#/components/parameters/imageSize"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Files"
        ],
        "summary": "Download a file",
        "operationId": "GetFileDownload",
        "x-sdk-operation-name": "download",
        "description": "Downloads a file with a specified ID.",
        "responses": {
          "200": {
            "description": "File retrieved.",
            "headers": {
              "Content-Length": {
                "description": "Number of bytes in the file.",
                "schema": {
                  "type": "integer"
                },
                "example": 48
              },
              "Content-Type": {
                "description": "MIME type of the file.",
                "schema": {
                  "type": "string"
                },
                "example": "image/png"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "string",
                  "readOnly": true,
                  "format": "binary"
                }
              },
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "readOnly": true,
                  "format": "binary"
                }
              },
              "application/zip": {
                "schema": {
                  "type": "string",
                  "readOnly": true,
                  "format": "binary"
                }
              },
              "image/jpg": {
                "schema": {
                  "type": "string",
                  "readOnly": true,
                  "format": "binary"
                }
              },
              "image/png": {
                "schema": {
                  "type": "string",
                  "readOnly": true,
                  "format": "binary"
                }
              },
              "image/gif": {
                "schema": {
                  "type": "string",
                  "readOnly": true,
                  "format": "binary"
                }
              },
              "text/csv": {
                "schema": {
                  "type": "string",
                  "readOnly": true,
                  "format": "binary"
                }
              }
            }
          },
          "302": {
            "$ref": "#/components/responses/Found"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const file = await api.files.download({id: 'my-file-id'});\n\n// access the file ArrayBuffer to view the content \nconsole.log(file.data);"
          }
        ]
      }
    },
    "/application-instances/{applicationId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/applicationId"
        }
      ]
    },
    "/application-instances/{applicationId}/configuration": {
      "parameters": [
        {
          "$ref": "#/components/parameters/applicationId"
        }
      ]
    },
    "/applications/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/applications/{id}/instances": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/applications/{id}/instances/{organizationId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "$ref": "#/components/parameters/organizationId"
        }
      ]
    },
    "/invoices": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Retrieve invoices",
        "operationId": "GetInvoiceCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a list of invoices.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of invoices retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Invoice"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$invoices = $client->invoices()->search([\n    'filter' => 'customerId:testCustomerId',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.invoices.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.invoices.getAll(params);\n\n// access the collection items, each item is an Invoice\nsecondCollection.items.forEach(invoice => console.log(invoice.fields.firstName));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$invoicesPaginator = $service->invoices()->getAllPaginator(filter: 'customerId:testCustomerId', limit: 5);\nforeach ($invoicesPaginator as $invoicePage) {\n    printf(\"Invoices page %d/%d\\n\", $invoicesPaginator->key() + 1, $invoicesPaginator->count());\n    foreach ($invoicePage as $invoice) {\n        printf(\"Invoice #%s (%s): %.2f\\n\", $invoice->getId(), $invoice->getStatus(), $invoice->getAmount());\n    }\n}\n\n// OR\n\n$invoices = $service->invoices()->getAll(filter: 'customerId:testCustomerId', limit: 100);\nforeach ($invoices as $invoice) {\n    printf(\"Invoice #%s (%s): %.2f\\n\", $invoice->getId(), $invoice->getStatus(), $invoice->getAmount());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Create an invoice",
        "operationId": "PostInvoice",
        "x-sdk-operation-name": "create",
        "description": "Creates an invoice.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Invoice"
        },
        "responses": {
          "201": {
            "description": "Invoice created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$invoiceForm = new Rebilly\\Entities\\Invoice();\n$invoiceForm->setCustomerId('customerId');\n$invoiceForm->setWebsiteId('websiteId');\n$invoiceForm->setCurrency('USD');\n$invoiceForm->setBillingAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n]);\n\ntry {\n    $invoice = $client->invoices()->create($invoiceForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new invoice\nconst data = {\n    customerId: 'foobar-0001',\n    websiteId: 'my-main-website',\n    currency: 'USD',\n    billingAddress: {\n        firstName: 'Johnny',\n        lastName: 'Brown',\n        emails: [{\n            label: 'main',\n            value: 'johnny+test@grr.la',\n            primary: true\n        }],\n    },\n    deliveryAddress: {\n        firstName: 'Johnny',\n        lastName: 'Brown',\n        emails: [{\n            label: 'main',\n            value: 'johnny+test@grr.la',\n            primary: true\n        }],\n    },\n    notes: `customer's first invoice`,\n};\n\n// the ID is optional\nconst firstInvoice = await api.invoices.create({data});\n\n// or you can provide one\nconst secondInvoice = await api.invoices.create({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$invoice = \\Rebilly\\Sdk\\Model\\Invoice::from()\n    ->setCustomerId('customerId')\n    ->setWebsiteId('websiteId')\n    ->setCurrency('USD')\n    ->setBillingAddress([\n        'firstName' => 'John',\n        'lastName' => 'Doe',\n        'organization' => 'Test LTD',\n        'address' => 'Test street 5',\n        'address2' => 'Test house 5',\n        'city' => 'New York',\n        'region' => 'Long Island',\n        'country' => 'US',\n        'postalCode' => '123456',\n        'emails' => [\n            [\n                'label' => 'main',\n                'value' => 'johndoe@testemail.com',\n                'primary' => true,\n            ],\n            [\n                'label' => 'secondary',\n                'value' => 'otheremail@testemail.com',\n            ],\n        ],\n        'phoneNumbers' => [\n            [\n                'label' => 'work',\n                'value' => '+123456789',\n                'primary' => true,\n            ],\n            [\n                'label' => 'home',\n                'value' => '+9874654321',\n            ],\n        ],\n    ]);\n\ntry {\n    $invoice = $service->invoices()->create($invoice);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/invoices/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Retrieve an invoice",
        "operationId": "GetInvoice",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves an invoice with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/mediaTypeJsonPdf"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Invoice retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              },
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$invoice = $client->invoices()->load('invoiceId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const invoice = await api.invoices.get({id: 'foobar-001'});\nconsole.log(invoice.fields.primaryAddress.firstName);\n\n\n// alternatively, download as a PDF file\nconst pdf = await api.invoices.downloadPDF({id: 'foobar-001'});\n// the invoice's data in arraybuffer format\nconsole.log(pdf.data);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$invoice = $service->invoices()->get('invoiceId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Upsert an invoice",
        "operationId": "PutInvoice",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) an invoice with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Invoice"
        },
        "responses": {
          "200": {
            "description": "Invoice updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              }
            }
          },
          "201": {
            "description": "Invoice created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$invoiceForm = new Rebilly\\Entities\\Invoice();\n$invoiceForm->setCustomerId('customerId');\n$invoiceForm->setWebsiteId('websiteId');\n$invoiceForm->setCurrency('USD');\n$invoiceForm->setBillingAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n]);\n\ntry {\n    $invoice = $client->invoices()->update('invoiceId', $invoiceForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// creating an invoice\nconst data = {\n    customerId: 'foobar-0001',\n    websiteId: 'my-main-website',\n    currency: 'USD',\n    billingAddress: {\n        firstName: 'Johnny',\n        lastName: 'Brown',\n        emails: [{\n            label: 'main',\n            value: 'johnny+test@grr.la',\n            primary: true\n        }],\n    },\n    deliveryAddress: {\n        firstName: 'Johnny',\n        lastName: 'Brown',\n        emails: [{\n            label: 'main',\n            value: 'johnny+test@grr.la',\n            primary: true\n        }],\n    },\n    notes: `customer's first invoice`,\n};\n\n// the ID is optional\nconst firstInvoice = await api.invoices.create({data});\n\n// or you can provide one\nconst secondInvoice = await api.invoices.create({id: 'my-second-id', data});\n\n\n\n// updating an invoice\nconst data = {\n    customerId: 'foobar-0001',\n    websiteId: 'my-main-website',\n    currency: 'USD',\n    billingAddress: {\n        firstName: 'Johnny',\n        lastName: 'Brown',\n        emails: [{\n            label: 'main',\n            value: 'johnny+test@grr.la',\n            primary: true\n        }],\n    },\n    deliveryAddress: {\n        firstName: 'Johnny',\n        lastName: 'Brown',\n        emails: [{\n            label: 'main',\n            value: 'johnny+test@grr.la',\n            primary: true\n        }],\n    },\n    notes: `customer's first invoice`,\n};\n\nconst invoice = await api.invoices.update({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$invoice = \\Rebilly\\Sdk\\Model\\Invoice::from()\n    ->setCustomerId('customerId')\n    ->setWebsiteId('websiteId')\n    ->setCurrency('USD')\n    ->setBillingAddress([\n        'firstName' => 'John',\n        'lastName' => 'Doe',\n        'organization' => 'Test LTD',\n        'address' => 'Test street 5',\n        'address2' => 'Test house 5',\n        'city' => 'New York',\n        'region' => 'Long Island',\n        'country' => 'US',\n        'postalCode' => '123456',\n        'emails' => [\n            [\n                'label' => 'main',\n                'value' => 'johndoe@testemail.com',\n                'primary' => true,\n            ],\n            [\n                'label' => 'secondary',\n                'value' => 'otheremail@testemail.com',\n            ],\n        ],\n        'phoneNumbers' => [\n            [\n                'label' => 'work',\n                'value' => '+123456789',\n                'primary' => true,\n            ],\n            [\n                'label' => 'home',\n                'value' => '+9874654321',\n            ],\n        ],\n    ]);\n\ntry {\n    $invoice = $service->invoices()->update('invoiceId', $invoice);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/invoices/{id}/items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Retrieve invoice items",
        "operationId": "GetInvoiceItemCollection",
        "x-sdk-operation-name": "getAllInvoiceItems",
        "description": "Retrieves invoice items with a specified invoice ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Invoice items retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceItem"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$invoiceItems = $client->invoiceItems()->search('invoiceId', [\n    'filter' => 'quantity:5',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// get the top 20 invoice items for this ID\nconst invoiceItems = await api.invoices.getAllInvoiceItems({id: 'my-invoice-id', limit: 20});\ninvoiceItems.items.forEach(item => console.log(item.fields.description));"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$invoiceItems = $service->invoices()->getAllInvoiceItems('invoiceId');"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Create an invoice item",
        "operationId": "PostInvoiceItem",
        "x-sdk-operation-name": "createInvoiceItem",
        "description": "Creates an invoice item.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceItem"
              }
            }
          },
          "description": "InvoiceItem resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Invoice item created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceItem"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$invoiceItemForm = new Rebilly\\Entities\\InvoiceItem();\n$invoiceItemForm->setType($invoiceItemForm::TYPE_DEBIT);\n$invoiceItemForm->setUnitPrice(0.99);\n$invoiceItemForm->setQuantity(5);\n\ntry {\n    $invoiceItem = $client->invoiceItems()->create($invoiceItemForm, 'invoiceId');\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new invoice item\nconst data = {\n    type: 'debit', \n    unitPrice: 5\n};\n\nconst invoiceItem = await api.invoices.createInvoiceItem({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$invoiceItem = new \\Rebilly\\Sdk\\Model\\InvoiceItem();\n$invoiceItemForm->setType(\\Rebilly\\Sdk\\Model\\InvoiceItem::TYPE_DEBIT);\n$invoiceItemForm->setUnitPrice(0.99);\n$invoiceItemForm->setQuantity(5);\n\ntry {\n    $invoiceItem = $service->invoices()->createInvoiceItem('invoiceId', $invoiceItem);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/invoices/{id}/items/{itemId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "itemId",
          "in": "path",
          "description": "ID of the invoice item.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Retrieve an invoice item",
        "operationId": "GetInvoiceItem",
        "x-sdk-operation-name": "getInvoiceItem",
        "description": "Retrieves an invoice item.",
        "responses": {
          "200": {
            "description": "Invoice item retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceItem"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$invoiceItems = $client->invoiceItems()->load('invoiceId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const invoiceItem = await api.invoices.getInvoiceItem({id: 'foobar-001'});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$invoiceItem = $service->invoices()->getInvoiceItem('invoiceId', 'invoiceItemId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Update an invoice item",
        "operationId": "PutInvoiceItem",
        "x-sdk-operation-name": "updateInvoiceItem",
        "description": "Updates an invoice item.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceItem"
              }
            }
          },
          "description": "Invoice item resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Invoice item updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceItem"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$invoiceItemForm = new Rebilly\\Entities\\InvoiceItem();\n$invoiceItemForm->setType($invoiceItemForm::TYPE_DEBIT);\n$invoiceItemForm->setUnitPrice(0.99);\n$invoiceItemForm->setQuantity(5);\n\ntry {\n    $invoiceItem = $client->invoiceItems()->update($invoiceItemForm, 'invoiceId', 'invoiceItemId');\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new invoice item\nconst data = {\n    type: 'debit',\n    unitPrice: 5\n};\n\nconst invoiceItem = await api.invoices.updateInvoiceItem({id: 'id', itemId: 'itemId', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$invoiceItem = \\Rebilly\\Sdk\\Model\\InvoiceItem::from([\n    'type' => \\Rebilly\\Sdk\\Model\\InvoiceItem::TYPE_DEBIT,\n    'unitPrice' => 0.99,\n    'quantity' => 5,\n]);\n\ntry {\n    $invoiceItem = $service->invoices()->updateInvoiceItem('invoiceId', 'invoiceItemId', $invoiceItem);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Delete an invoice item",
        "operationId": "DeleteInvoiceItem",
        "x-sdk-operation-name": "deleteInvoiceItem",
        "description": "Deletes an invoice item.",
        "responses": {
          "204": {
            "description": "Invoice item deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$client->invoiceItems()->delete('invoiceId', 'invoiceItemId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const invoiceItem = await api.invoices.deleteInvoiceItem({id: 'id', itemId: 'itemId'});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->invoices()->deleteInvoiceItem('invoiceId', 'invoiceItemId');"
          }
        ]
      }
    },
    "/invoices/{id}/issue": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Issue an invoice",
        "operationId": "PostInvoiceIssuance",
        "x-sdk-operation-name": "issue",
        "description": "Issues an invoice with a specified ID.\nThe invoice must be in `draft` status.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceIssue"
              }
            }
          },
          "description": "Invoice issue resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Invoice issued.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$invoice = $client->invoices()->issue('invoiceId', '2025-01-01 05:00:00');\n"
          },
          {
            "lang": "JavaScript",
            "source": "// define the issued time\nconst data = {\n    issuedTime: \"2017-09-19T20:46:51Z\"\n};\n\n// issue the invoice without an issued time\nconst firstInvoice = await api.invoices.issue({id: 'my-first-id'});\n\n// or include it\nconst secondInvoice = await api.invoices.issue({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$invoice = $service->invoices()->issue('invoiceId', new \\Rebilly\\Sdk\\Model\\InvoiceIssue([\n    'issuedTime' => '2025-01-01 05:00:00',\n]));"
          }
        ]
      }
    },
    "/invoices/{id}/abandon": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Abandon an invoice",
        "operationId": "PostInvoiceAbandonment",
        "x-sdk-operation-name": "abandon",
        "description": "Abandons an invoice with a specified ID.",
        "responses": {
          "201": {
            "description": "Invoice abandoned.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$invoice = $client->invoices()->abandon('invoiceId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const abandonedInvoice = await api.invoices.abandon({id: 'my-invoice-id'});\nconsole.log(abandonedInvoice.fields.status);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$invoice = $service->invoices()->abandon('invoiceId');"
          }
        ]
      }
    },
    "/invoices/{id}/void": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Void an invoice",
        "operationId": "PostInvoiceVoid",
        "x-sdk-operation-name": "void",
        "description": "Voids an invoice with a specified ID.",
        "responses": {
          "201": {
            "description": "Invoice voided.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$invoice = $client->invoices()->void('invoiceId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const voidedInvoice = await api.invoices.void({id: 'my-invoice-id'});\nconsole.log(voidedInvoice.fields.status);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$invoice = $service->invoices()->void('invoiceId');"
          }
        ]
      }
    },
    "/invoices/{id}/recalculate": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Recalculate an invoice",
        "operationId": "PostInvoiceRecalculation",
        "x-sdk-operation-name": "recalculate",
        "description": "Recalculates shipping rates, taxes, and discounts on an invoice with a specified ID.\n\nOne use case for this operation to apply a revoked coupon,\nor coupon that is redeemed by a customer after the invoice is issued.",
        "responses": {
          "201": {
            "description": "Invoice recalculated.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$invoice = $service->invoices()->recalculate('invoiceId');"
          }
        ]
      }
    },
    "/invoices/{id}/reissue": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Reissue an invoice",
        "operationId": "PostInvoiceReissuance",
        "x-sdk-operation-name": "reissue",
        "description": "Reissues an invoice with a specified ID.\nThe status of the invoice must be `unpaid`, `partially paid`, `past due` or `abandoned`.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceReissue"
              }
            }
          },
          "description": "InvoiceReissue resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Invoice reissued.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$invoiceReissue = new \\Rebilly\\Sdk\\Model\\InvoiceReissue([\n    'dueTime' => '2025-01-01 05:00:00',\n]);\n\ntry {\n    $invoiceReissue = $service->invoices()->reissue('invoiceId', $invoiceReissue);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/invoices/{id}/transaction-allocations": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Retrieve transaction amounts allocations",
        "operationId": "GetInvoiceTransactionAllocationCollection",
        "x-sdk-operation-name": "getAllTransactionAllocations",
        "description": "Retrieves amounts from a transaction that are allocated as invoice payments.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "List of allocations retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceTransactionAllocation"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$transactionAllocations = $service->invoices()->getAllTransactionAllocations('invoiceId');"
          }
        ]
      }
    },
    "/invoices/{id}/transaction": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Apply a transaction to an invoice",
        "operationId": "PostInvoiceTransaction",
        "x-sdk-operation-name": "applyTransaction",
        "description": "Applies a transaction to an invoice.\nThe invoice status must be `unpaid`, and the transaction must have a non-zero unused amount.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceTransaction"
              }
            }
          },
          "description": "Invoice transaction resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Transaction applied to invoice.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    id: 'my-invoice-id', \n    transactionId: 'my-transaction-id',\n    amount: 12,99 \n};\n\nconst invoice = await api.invoices.applyTransaction(params);\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$invoiceTransaction = new \\Rebilly\\Sdk\\Model\\InvoiceTransaction([\n    'transactionId' => 'transactionId',\n    'amount' => 149.99,\n]);\n\ntry {\n    $invoiceTransaction = $service->invoices()->applyTransaction('invoiceId', $invoiceTransaction);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/invoices/{id}/timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices timeline"
        ],
        "summary": "Retrieve invoice timeline messages",
        "operationId": "GetInvoiceTimelineCollection",
        "x-sdk-operation-name": "getAllTimelineMessages",
        "description": "Retrieves a list of invoice timeline messages.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of invoice timeline messages retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/InvoiceTimeline"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional except for the `id`\nconst firstCollection = await api.invoices\n    .getAllTimelineMessages({id: 'my-invoice'});\n\n// alternatively you can specify one or more of them\nconst params = {id: 'my-invoice', limit: 20, offset: 100};\nconst secondCollection = await api.invoices.getAllTimelineMessages(params);\n\n// access the collection items, each item is an InvoiceTimeline\nsecondCollection.items\n    .forEach(message => console.log(message.fields.eventType));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$timelineMessages = $service->invoices()->getAllTimelineMessages('invoiceId', filter: 'triggeredBy:direct-api');"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices timeline"
        ],
        "summary": "Create an invoice timeline comment",
        "operationId": "PostInvoiceTimeline",
        "x-sdk-operation-name": "createTimelineComment",
        "description": "Creates an invoice timeline comment.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceTimeline"
              }
            }
          },
          "description": "Invoice Timeline resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Invoice timeline comment created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// Create a comment\nconst firstComment = await api\n    .invoices.createTimelineComment({id: 'my-invoice-id', data: {message: 'Your comment here'}});\n\n// Using params object, mentions and references\nconst message = `Example of mentions @user@mydomain.com and references #invoice-subscription-id`;\nconst params = {\n    id: 'my-invoice-id',\n    data: {\n        message,\n    },\n};\nconst secondComment = await api.invoices.createTimelineComment(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$timelineMessage = new \\Rebilly\\Sdk\\Model\\InvoiceTimeline([\n    'message' => 'Automatic message',\n]);\n\ntry {\n    $timelineMessage = $service->invoices()->createTimelineComment('invoiceId', $timelineMessage);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/invoices/{id}/timeline/{messageId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "messageId",
          "in": "path",
          "description": "ID of the invoice timeline message.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices timeline"
        ],
        "summary": "Retrieve an invoice timeline message",
        "operationId": "GetInvoiceTimeline",
        "x-sdk-operation-name": "getTimelineMessage",
        "description": "Retrieves an invoice timeline message with a specified ID.",
        "responses": {
          "200": {
            "description": "Invoice message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvoiceTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const message = await api.invoices\n    .getTimelineMessage({id: 'foobar-001', messageId: 'message-202'});\nconsole.log(message.fields.eventType);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$timelineMessage = $service->invoices()->getTimelineMessage('invoiceId', 'messageId');"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices timeline"
        ],
        "summary": "Delete an invoice timeline message",
        "operationId": "DeleteInvoiceTimeline",
        "x-sdk-operation-name": "deleteTimelineMessage",
        "description": "Deletes an invoice timeline message with a specified ID.",
        "responses": {
          "204": {
            "description": "Invoice timeline message deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const request = await api.invoices\n    .deleteTimelineMessage({id: 'foobar-001', messageId: 'message-202'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->invoices()->deleteTimelineMessage('invoiceId', 'messageId');"
          }
        ]
      }
    },
    "/credit-memos": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "summary": "Retrieve credit memos",
        "operationId": "GetCreditMemoCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a list of credit memos.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of credit memos retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CreditMemo"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "summary": "Create a credit memo",
        "operationId": "PostCreditMemo",
        "x-sdk-operation-name": "create",
        "description": "Creates a credit memo.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreditMemo"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Credit memo created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditMemo"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/credit-memos/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "summary": "Retrieve a credit memo",
        "operationId": "GetCreditMemo",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a credit memo with a specified ID.",
        "responses": {
          "200": {
            "description": "Credit memo retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditMemo"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "summary": "Upsert a credit memo",
        "operationId": "PutCreditMemo",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a credit memo with a specified ID.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreditMemo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Credit memo updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditMemo"
                }
              }
            }
          },
          "201": {
            "description": "Credit memo created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditMemo"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "summary": "Partially update a credit memo",
        "operationId": "PatchCreditMemo",
        "x-sdk-operation-name": "patch",
        "description": "Partially updates a credit memo with a specified ID.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchCreditMemo"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Credit memo updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditMemo"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/credit-memos/{id}/void": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "summary": "Void a credit memo",
        "operationId": "PostCreditMemoVoid",
        "x-sdk-operation-name": "void",
        "description": "Voids a credit memo with a specified ID.",
        "responses": {
          "201": {
            "description": "Credit memo voided.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditMemo"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/credit-memos/{id}/timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos timeline"
        ],
        "summary": "Retrieve credit memo timeline messages",
        "operationId": "GetCreditMemoTimelineCollection",
        "x-sdk-operation-name": "getAllTimelineMessages",
        "description": "Retrieves a list of credit memo timeline messages.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of credit memo timeline messages retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CreditMemoTimeline"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos timeline"
        ],
        "summary": "Create a credit memo timeline message",
        "operationId": "PostCreditMemoTimeline",
        "x-sdk-operation-name": "createTimelineComment",
        "description": "Creates a credit memo timeline message.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreditMemoTimeline"
              }
            }
          },
          "description": "Credit memo timeline resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Credit memo timeline message created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditMemoTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/credit-memos/{id}/timeline/{messageId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "messageId",
          "in": "path",
          "description": "ID of the credit memo timeline message.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos timeline"
        ],
        "summary": "Retrieve a credit memo timeline message",
        "operationId": "GetCreditMemoTimeline",
        "x-sdk-operation-name": "getTimelineMessage",
        "description": "Retrieves a credit memo timeline message with a specified ID.",
        "responses": {
          "200": {
            "description": "Credit memo timeline message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CreditMemoTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos timeline"
        ],
        "summary": "Delete a credit memo timeline message",
        "operationId": "DeleteCreditMemoTimeline",
        "x-sdk-operation-name": "deleteTimelineMessage",
        "description": "Deletes a credit memo timeline message with a specified ID.",
        "responses": {
          "204": {
            "description": "Credit memo timeline message deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/journal-accounts": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Retrieve journal accounts",
        "operationId": "GetJournalAccountCollection",
        "x-sdk-operation-name": "getAllAccounts",
        "description": "Retrieves a list of journal accounts.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of journal accounts retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JournalAccount"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Create a journal account",
        "operationId": "PostJournalAccount",
        "x-sdk-operation-name": "createAccount",
        "description": "Creates a journal account.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JournalAccount"
              }
            }
          },
          "description": "Journal account resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Journal account created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/journal-accounts/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Retrieve journal account",
        "operationId": "GetJournalAccount",
        "x-sdk-operation-name": "getAccount",
        "description": "Retrieves a journal account with a specified ID.",
        "responses": {
          "200": {
            "description": "Journal account retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Upsert a journal account",
        "operationId": "PutJournalAccount",
        "x-sdk-operation-name": "updateAccount",
        "description": "Creates or updates (upsert) a journal account.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JournalAccount"
              }
            }
          },
          "description": "Journal account resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Journal account updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalAccount"
                }
              }
            }
          },
          "201": {
            "description": "Journal account created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/journal-entries": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Retrieve journal entries",
        "operationId": "GetJournalEntryCollection",
        "x-sdk-operation-name": "getAllEntries",
        "description": "Retrieves a list of journal entries.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of journal entries retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JournalEntry"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Create a journal entry",
        "operationId": "PostJournalEntry",
        "x-sdk-operation-name": "createEntry",
        "description": "Creates a journal entry.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JournalEntry"
              }
            }
          },
          "description": "Journal entry resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Journal entry created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalEntry"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/journal-entries/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Retrieve journal entry",
        "operationId": "GetJournalEntry",
        "x-sdk-operation-name": "getEntry",
        "description": "Retrieves a journal entry with a specified ID.",
        "responses": {
          "200": {
            "description": "Journal entry retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalEntry"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Upsert a journal entry",
        "operationId": "PutJournalEntry",
        "x-sdk-operation-name": "updateEntry",
        "description": "Creates or updates (upsert) a journal entry.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JournalEntry"
              }
            }
          },
          "description": "Journal entry resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Journal entry updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalEntry"
                }
              }
            }
          },
          "201": {
            "description": "Journal entry created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalEntry"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/journal-records": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Retrieve journal records",
        "operationId": "GetJournalRecordCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of journal records.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of journal records retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/JournalRecord"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Create a journal record",
        "operationId": "PostJournalRecord",
        "x-sdk-operation-name": "create",
        "description": "Creates a journal record.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JournalRecord"
              }
            }
          },
          "description": "Journal record resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Journal record created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalRecord"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/journal-records/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Retrieve journal record",
        "operationId": "GetJournalRecord",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a journal record with a specified ID.",
        "responses": {
          "200": {
            "description": "Journal record retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalRecord"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Upsert a journal record",
        "operationId": "PutJournalRecord",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upsert) a journal record.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/JournalRecord"
              }
            }
          },
          "description": "Journal record resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Journal record updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalRecord"
                }
              }
            }
          },
          "201": {
            "description": "Journal record created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/JournalRecord"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Journal"
        ],
        "summary": "Delete a journal record",
        "operationId": "DeleteJournalRecord",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a journal record.",
        "responses": {
          "204": {
            "description": "Journal record deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/kyc-requests": {
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Create a KYC request",
        "operationId": "PostKycRequest",
        "x-sdk-operation-name": "create",
        "description": "Creates a KYC request.\n\nThe customer is redirected to the `kycGatherer` link.\nAfter the customer completes the KYC process,\nthey are redirected back to the `redirectUrl` link.\n\nCorresponding webhooks, such as: KYC document accepted and KYC document rejected,\nare sent to the subscribers.\n\nWhen the complete list of documents is received and accepted,\nthe KYC request fulfilled webhook is sent to subscribers.\n\nIf a `credit-file-proof` request is successful,\nit returns a `decision` value of `single-source` or `dual-source`.\nThe corresponding `identity-proof` and `address-proof` documents are not requested.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KycRequest"
              },
              "examples": {
                "credit-file-identity-address": {
                  "summary": "Credit file with fallback",
                  "description": "In the sandbox environment, to mark a `credit-file-proof` KYC document as `accepted`,\npass the customer's first name to the `accept` field.\nIf an incorrect first name is passed, the document is rejected.",
                  "value": {
                    "customerId": "123_456789",
                    "redirectUrl": "https://example.com/return-here/",
                    "documents": [
                      {
                        "type": "credit-file-proof",
                        "maxAttempts": 1
                      },
                      {
                        "type": "identity-proof"
                      },
                      {
                        "type": "address-proof"
                      }
                    ],
                    "reason": "registration"
                  }
                },
                "identity-with-face-proof": {
                  "summary": "Identity with face proof",
                  "value": {
                    "customerId": "123_456789",
                    "redirectUrl": "https://example.com/return-here/",
                    "documents": [
                      {
                        "type": "identity-proof",
                        "faceProofRequired": true,
                        "faceLivenessRequired": false
                      }
                    ],
                    "reason": "registration"
                  }
                },
                "identity-and-address": {
                  "summary": "Identity and address",
                  "value": {
                    "customerId": "123_456789",
                    "redirectUrl": "https://example.com/return-here/",
                    "documents": [
                      {
                        "type": "identity-proof"
                      },
                      {
                        "type": "address-proof"
                      }
                    ],
                    "reason": "registration"
                  }
                }
              }
            }
          },
          "description": "KYC request resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "KYC request created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Retrieve KYC requests",
        "operationId": "GetKycRequestCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of KYC requests.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of KYC requests retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/KycRequest"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/kyc-requests/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Retrieve a KYC request",
        "operationId": "GetKycRequest",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a KYC request with a specified ID.",
        "responses": {
          "200": {
            "description": "KYC request retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "patch": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Update a KYC request",
        "operationId": "PatchKycRequest",
        "x-sdk-operation-name": "update",
        "description": "Updates a KYC request with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PatchKycRequest",
          "description": "KYC document resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "KYC request updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Delete the KYC request",
        "operationId": "DeleteKycRequest",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a KYC request with a specified ID.",
        "responses": {
          "204": {
            "description": "KYC request deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/kyc-documents": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Retrieve KYC documents",
        "operationId": "GetKycDocumentCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of KYC documents.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of KYC documents retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/KycDocument"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.kycDocuments.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.kycDocuments.getAll(params);\n\n// access the collection items, each item is a KycDocument\nsecondCollection.items.forEach(document => console.log(document.fields.documentType));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Create a KYC document",
        "operationId": "PostKycDocument",
        "x-sdk-operation-name": "create",
        "description": "Creates a KYC document.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KycDocument"
              }
            }
          },
          "description": "Kyc document resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "KYC document created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycDocument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// All fields are required\nconst data = {\n    fieldId: '4f6cf35x-2c4y-483z-a0a9-158621f77a21',\n    customerId: '4f6cf35x-2c4y-483z-a0a9-158621f77a21',\n    documentType: 'identity-proof'\n};\n\nconst firstKycDocument = await api.kycDocuments.create({data});"
          }
        ]
      }
    },
    "/kyc-documents/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Retrieve a KYC document",
        "operationId": "GetKycDocument",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a KYC document with a specified ID.",
        "responses": {
          "200": {
            "description": "KYC document retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycDocument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const document = await api.kycDocuments.get({id: 'foobar-001'});\nconsole.log(document.fields.documentType);"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Upsert a KYC document",
        "operationId": "PutKycDocument",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a KYC document with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KycDocument"
              }
            }
          },
          "description": "KYC document resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "KYC document updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycDocument"
                }
              }
            }
          },
          "201": {
            "description": "KYC document created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycDocument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// define the values to update\nconst data = {\n    status: 'accepted'\n};\n\nconst document = await api.kycDocuments.update({id: 'my-second-id', data});"
          }
        ]
      }
    },
    "/kyc-documents/{id}/acceptance": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Accept a KYC document",
        "operationId": "PostKycDocumentAcceptance",
        "x-sdk-operation-name": "accept",
        "description": "Accepts a KYC document and changes the documents `status` to `accepted`.\nThe review time and reviewer information is also updated.\n\n> **Note:** Use this operation for manual overrides.",
        "responses": {
          "201": {
            "description": "KYC document acceptance created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycDocument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const acceptedDocument = await api.kycDocuments.accept({id: 'my-second-id'});\nconsole.log(acceptedDocument.fields.status);"
          }
        ]
      }
    },
    "/kyc-documents/{id}/matches": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Update KYC document matches",
        "operationId": "PostKycDocumentMatches",
        "x-sdk-operation-name": "matches",
        "description": "Updates the document matches of a KYC document with a specified ID.\n\n> **Note:** Use this operation for manual overrides.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "anyOf": [
                  {
                    "$ref": "#/components/schemas/KycIdentityMatches"
                  },
                  {
                    "$ref": "#/components/schemas/KycAddressMatches"
                  }
                ]
              }
            }
          },
          "description": "Kyc document resource.",
          "required": true
        },
        "responses": {
          "204": {
            "description": "Document matches updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/kyc-documents/{id}/rejection": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Reject a KYC document",
        "operationId": "PostKycDocumentRejection",
        "x-sdk-operation-name": "reject",
        "description": "Rejects a KYC document and changes the `status` to `rejected`.\nThe review time and reviewer information is also updated.\n\n> **Note:** Use this operation for manual overrides.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KycDocumentRejection"
              }
            }
          },
          "description": "KYC document resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "KYC document rejected.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycDocument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const data = {\n    type: 'document-expired',\n    message: 'Document is expired'\n}\nconst rejectedDocument = await api.kycDocuments.reject({id: 'my-second-id', data});\nconsole.log(rejectedDocument.fields.rejectionReason.type);"
          }
        ]
      }
    },
    "/kyc-documents/{id}/review": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Review a KYC document",
        "operationId": "PostKycDocumentReview",
        "x-sdk-operation-name": "review",
        "description": "Updates the `reviewTime` and `reviewerId` of a KYC document with a specified ID.",
        "responses": {
          "201": {
            "description": "KYC document reviewed.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycDocument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const reviewedDocument = await api.kycDocuments.review({id: 'my-second-id'});\nconsole.log(reviewedDocument.fields.status);"
          }
        ]
      }
    },
    "/kyc-documents/{id}/start-review": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Start review of a KYC document",
        "operationId": "PostKycDocumentStartReview",
        "x-sdk-operation-name": "startReview",
        "description": "Starts the review process of a KYC document with a specified ID.\n\nThis operation also sets the KYC document `reviewStartTime` to the current date-time,\nand updates the review information.",
        "responses": {
          "201": {
            "description": "KYC document review started.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycDocument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/kyc-documents/{id}/stop-review": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Stop review of a KYC document",
        "operationId": "PostKycDocumentStopReview",
        "x-sdk-operation-name": "stopReview",
        "description": "Stops the review of a KYC document with a specified ID.\n\nThis operation also sets the KYC document `reviewStartTime` and the reviewer information to null.\nUse this operation when the reviewer must stop the review.\nFor example, if the reviewer must take a break, or ends a shift.",
        "responses": {
          "201": {
            "description": "KYC document review stopped.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycDocument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/kyc-settings": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Retrieve KYC settings",
        "operationId": "GetKycSettings",
        "x-sdk-operation-name": "getKycSettings",
        "description": "Retrieves KYC settings.",
        "responses": {
          "200": {
            "description": "KYC settings retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycSettings"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "summary": "Update KYC settings",
        "operationId": "PutKycSettings",
        "x-sdk-operation-name": "updateKycSettings",
        "description": "Updates KYC settings.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/KycSettings"
              }
            }
          },
          "description": "Settings for KYC analysis.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "KYC settings updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/KycSettings"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/password-tokens": {
      "get": {
        "x-products": [
          "Full",
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Retrieve tokens",
        "operationId": "GetPasswordTokenCollection",
        "x-sdk-operation-name": "getAllResetPasswordTokens",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Retrieves a list of reset password tokens.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "List of reset password tokens retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ResetPasswordToken"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.customerAuthentication.getAllResetPasswordTokens();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100};\nconst secondCollection = await api.customerAuthentication.getAllResetPasswordTokens(params);\n\n// access the collection items, each item is a ResetPasswordToken\nsecondCollection.items.forEach(token => console.log(token.fields.token));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$passwordTokens = $service->customerAuthentication()->getAllResetPasswordTokens();"
          }
        ]
      },
      "post": {
        "x-products": [
          "Full",
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Create a reset password token",
        "operationId": "PostPasswordToken",
        "x-sdk-operation-name": "createResetPasswordToken",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Creates a reset password token.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ResetPasswordToken"
              }
            }
          },
          "description": "ResetPasswordToken resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Reset password token created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResetPasswordToken"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// first set the required properties for the new credential\nconst data = {\n    username: 'foobar',\n    password: 'fuubar',\n    // the `credential` expects \n    // the customer credential's ID\n    credential: 'foobar-0001'\n\n    // optionally you can define an `expiredTime` to \n    // limit the duration of the reset token\n\n    //expiredTime: '2017-09-18T19:17:39Z'\n};\n\nconst resetToken = await api.customerAuthentication.createResetPasswordToken({data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$resetPasswordTokenForm = new \\Rebilly\\Sdk\\Model\\ResetPasswordToken();\n$resetPasswordTokenForm->setUsername('username');\n\ntry {\n    $tokens = $coreService->customerAuthentication()->createResetPasswordToken($resetPasswordTokenForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/password-tokens/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Retrieve a reset password token",
        "operationId": "GetPasswordToken",
        "x-sdk-operation-name": "getResetPasswordToken",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Retrieves a reset password token with a specified ID.",
        "responses": {
          "200": {
            "description": "Reset password token retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResetPasswordToken"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const token = await api.customerAuthentication.getResetPasswordToken({id: 'my-first-id'});\nconsole.log(token.fields.credential);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$passwordToken = $service->customerAuthentication()->getResetPasswordToken('tokenId');"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customer authentication"
        ],
        "summary": "Delete a reset password token",
        "operationId": "DeletePasswordToken",
        "x-sdk-operation-name": "deleteResetPasswordToken",
        "x-sdk-resource": "CustomerAuthentication",
        "description": "Deletes a reset password token with a specified ID.",
        "responses": {
          "204": {
            "description": "Reset password token deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const request = await api.customerAuthentication.deleteResetPasswordToken({id: 'my-second-key'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$service->customerAuthentication()->deleteResetPasswordToken('tokenId');"
          }
        ]
      }
    },
    "/payment-instruments": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment instruments"
        ],
        "summary": "Retrieve payment instruments",
        "operationId": "GetPaymentInstrumentCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of payment instruments.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of payment instruments retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PaymentInstrument"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$paymentInstruments = $client->paymentInstruments()->search([\n    'filter' => 'status:active;method:payment-card',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.paymentInstruments.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.paymentInstruments.getAll(params);\n\n// access the collection items, each item is a PaymentInstrument\nsecondCollection.items.forEach(paymentInstrument => console.log(paymentInstrument.fields.customerId));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$paymentInstrumentsPaginator = $service->paymentInstruments()->getAllPaginator(\n    filter: 'status:active;method:payment-card',\n    limit: 5\n);\nforeach ($paymentInstrumentsPaginator as $paymentInstrumentsPage) {\n    printf(\"Payment instruments page %d/%d\\n\", $paymentInstrumentsPaginator->key() + 1, $paymentInstrumentsPaginator->count());\n    foreach ($paymentInstrumentsPage as $paymentInstrument) {\n        printf(\"Payment instrument #%s\\n\", $paymentInstrument->getId());\n    }\n}\n\n// OR\n\n$paymentInstruments = $service->paymentInstruments()->getAll(filter: 'status:active;method:payment-card');\nforeach ($paymentInstruments as $paymentInstrument) {\n    printf(\"Payment instrument #%s\\n\", $paymentInstrument->getId());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment instruments"
        ],
        "summary": "Create a payment instrument",
        "operationId": "PostPaymentInstrument",
        "x-sdk-operation-name": "create",
        "description": "Creates a payment instrument.\nIf the payment card, bank account, or alternative payment instrument already exists it is updated.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PostPaymentInstrument"
        },
        "responses": {
          "201": {
            "description": "Payment instrument created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentInstrument"
                }
              }
            }
          },
          "303": {
            "description": "Payment instrument updated.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentInstrument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$paymentInstrumentForm = new Rebilly\\Entities\\CommonPaymentInstrument();\n$paymentInstrumentForm->setCustomerId('customerId');\n$paymentInstrumentForm->setPan('4111111111111111');\n$paymentInstrumentForm->setExpYear(2025);\n$paymentInstrumentForm->setExpMonth(8);\n$paymentInstrumentForm->setBillingAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n]);\n\ntry {\n    $paymentInstrument = $client->paymentInstruments()->create($paymentInstrumentForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n\n// Alternatively you can specify a payment token\n$paymentInstrumentForm = new Rebilly\\Entities\\CommonPaymentInstrument();\n$paymentInstrumentForm->setCustomerId('customerId');\n$paymentInstrumentForm->setToken('payment-token');\n\ntry {\n    $paymentInstrument = $client->paymentInstruments()->create($paymentInstrumentForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new payment card instrument\nconst data = {\n    method: 'payment-card',\n    pan: '4111111111111111',\n    expYear: 2025,\n    expMonth: 11,\n    cvv: '123',\n    billingAddress: {\n      firstName: 'Johnny',\n      lastName: 'Brown',\n      emails: [{\n          label: 'main',\n          value: 'johnny+test@grr.la',\n          primary: true\n      }]\n    },\n    // the customer ID for which\n    // we are adding a payment card instrument\n    customerId: 'foobar-0001'\n};\n\nconst firstPaymentInstrument = await api.paymentInstruments.create({data});\n\n// alternatively you can specify a payment token\nconst tokenData = {\n    token: 'payment-token',\n    // the customer ID for which\n    // we are adding a payment card instrument\n    customerId: 'foobar-0001'\n};\n\nconst secondPaymentInstrument = await api.paymentInstruments.create({tokenData});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$paymentInstrumentForm = new \\Rebilly\\Sdk\\Model\\PaymentCardCreatePlain();\n$paymentInstrumentForm->setCustomerId('customerId');\n$paymentInstrumentForm->setPan('4111111111111111');\n$paymentInstrumentForm->setExpYear(2025);\n$paymentInstrumentForm->setExpMonth(8);\n$paymentInstrumentForm->setBillingAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n]);\n\ntry {\n    $paymentInstrument = $service->paymentInstruments()->create($paymentInstrumentForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n\n// Alternatively you can specify a payment token\n$paymentInstrumentForm = new \\Rebilly\\Sdk\\Model\\PaymentInstrumentCreateToken();\n$paymentInstrumentForm->setCustomerId('customerId');\n$paymentInstrumentForm->setToken('payment-token');\n\ntry {\n    $paymentInstrument = $service->paymentInstruments()->create($paymentInstrumentForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/payment-instruments/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment instruments"
        ],
        "summary": "Retrieve a payment instrument",
        "operationId": "GetPaymentInstrument",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a payment instrument with a specified ID.",
        "responses": {
          "200": {
            "description": "Payment instrument retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentInstrument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$paymentInstrument = $client->paymentInstruments()->load('paymentInstrumentId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const paymentInstrument = await api.paymentInstruments.get({id: 'payment-instrument-id'});\n\nconsole.log(paymentInstrument.fields.customerId);\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$paymentInstrument = $service->paymentInstruments()->get('paymentInstrumentId');"
          }
        ]
      },
      "patch": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment instruments"
        ],
        "summary": "Update payment instrument",
        "operationId": "PatchPaymentInstrument",
        "x-sdk-operation-name": "update",
        "description": "Updates the values of a payment instrument with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PatchPaymentInstrument"
        },
        "responses": {
          "200": {
            "description": "Payment instrument updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentInstrument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$paymentInstrumentForm = new Rebilly\\Entities\\CommonPaymentInstrument();\n$paymentInstrumentForm->setCvv('123');\n$paymentInstrumentForm->setExpYear(2025);\n$paymentInstrumentForm->setExpMonth(12);\n$paymentInstrumentForm->setBillingAddress([\n    'firstName' => 'John',\n]);\n\ntry {\n    $paymentInstrument = $client->paymentInstruments()->update('paymentInstrumentId', $paymentInstrumentForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n\n// Alternatively you can specify a partial token\n$paymentInstrumentForm = new Rebilly\\Entities\\CommonPaymentInstrument();\n$paymentInstrumentForm->setToken('partial-token');\n$paymentInstrumentForm->setBillingAddress([\n    'firstName' => 'John',\n]);\n\ntry {\n    $paymentInstrument = $client->paymentInstruments()->update('paymentInstrumentId', $paymentInstrumentForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// payment instrument properties to be updated\nconst data = {\n    cvv: '123',\n    expMonth: 12,\n    expYear: 2025,\n    billingAddress: {\n        firstName: 'John'\n    }\n};\n\napi.paymentInstruments.patch({id: 'id-to-update', data});\n\n// alternatively you can specify a partial token\nconst tokenData = {\n    token: 'partial-token',\n    billingAddress: {\n        firstName: 'John'\n    },\n    customFields: {\n        foo: 'bar'\n    }\n};\n\napi.paymentInstruments.patch({id: 'id-to-update', tokenData});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$paymentInstrumentForm = new \\Rebilly\\Sdk\\Model\\PaymentCardUpdatePlain();\n$paymentInstrumentForm->setCvv('123');\n$paymentInstrumentForm->setExpYear(2025);\n$paymentInstrumentForm->setExpMonth(12);\n$paymentInstrumentForm->setBillingAddress([\n    'firstName' => 'John',\n]);\n\ntry {\n    $paymentInstrument = $service->paymentInstruments()->update('paymentInstrumentId', $paymentInstrumentForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n\n// Alternatively you can specify a partial token\n$paymentInstrumentForm = new \\Rebilly\\Sdk\\Model\\PaymentInstrumentUpdateToken();\n$paymentInstrumentForm->setToken('partial-token');\n$paymentInstrumentForm->setBillingAddress([\n    'firstName' => 'John',\n]);\n\ntry {\n    $paymentInstrument = $service->paymentInstruments()->update('paymentInstrumentId', $paymentInstrumentForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/payment-instruments/{id}/deactivation": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment instruments"
        ],
        "summary": "Deactivate a payment instrument",
        "operationId": "PostPaymentInstrumentDeactivation",
        "x-sdk-operation-name": "deactivate",
        "description": "Deactivates a payment instrument with a specified ID.",
        "responses": {
          "201": {
            "description": "Payment instrument deactivated.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentInstrument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$client->paymentInstruments()->deactivate('paymentInstrumentId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const paymentInstrument = await api.paymentInstruments.deactivate({id: 'id-to-deactivate'});\n\nconsole.log(paymentInstrument.fields.status);\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->paymentInstruments()->deactivate('paymentInstrumentId');"
          }
        ]
      }
    },
    "/payment-instruments/{id}/name-inquiry": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment instruments"
        ],
        "summary": "Verify name on a payment instrument",
        "operationId": "PostPaymentInstrumentNameInquiry",
        "x-sdk-operation-name": "nameInquiry",
        "description": "Performs a name check inquiry on a payment instrument.\nUse this operation to confirm the name that is associated with a payment instrument.\nThis operation supports payment cards only, using VISA ANI requests through Worldpay.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PaymentInstrumentNameInquiry"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Payment instrument name inquiry performed.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentInstrumentNameInquiry"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/plans": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Plans"
        ],
        "summary": "Retrieve plans",
        "operationId": "GetPlanCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a list of plans.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of plans retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Plan"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$plans = $client->plans()->search([\n    'filter' => 'name:TestPlan',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.plans.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.plans.getAll(params);\n\n// access the collection items, each item is a Plan\nsecondCollection.items.forEach(plan => console.log(plan.fields.name));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$plansPaginator = $service->plans()->getAllPaginator(limit: 5);\n\nforeach ($plansPaginator as $planPage) {\n    printf(\"Plans page %d/%d\\n\", $plansPaginator->key() + 1, $plansPaginator->count());\n    foreach ($planPage as $plan) {\n        printf(\"Plan #%s: %s\\n\", $plan->getId(), $plan->getProductId());\n    }\n}\n\n// OR\n\n$plans = $service->plans()->getAll(limit: 100);\nforeach ($plans as $plan) {\n    printf(\"Plan #%s: %s\\n\", $plan->getId(), $plan->getProductId());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Plans"
        ],
        "summary": "Create a plan",
        "operationId": "PostPlan",
        "x-sdk-operation-name": "create",
        "description": "Creates a plan.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Plan"
              }
            }
          },
          "description": "Plan resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Plan created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Plan"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$planForm = new Rebilly\\Entities\\Plan();\n$planForm->setName('TestPlan');\n$planForm->setCurrency('USD');\n$planForm->setTrialAmount(1);\n$planForm->setTrialPeriodUnit('day');\n$planForm->setTrialPeriodLength(1);\n$planForm->setProductId('test-product');\n\ntry {\n    $plan = $client->plans()->create($planForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new plan\nconst data = {\n    name: 'My strongest plan',\n    currency: 'USD',\n    setupAmount: 12.99,\n    // you could also include a trial if needed\n    recurringPeriodUnit: 'month',\n    recurringPeriodLength: 1,\n    recurringAmount: 25.99\n};\n\n// the ID is optional\nconst firstPlan = await api.plans.create({data});\n\n// or you can provide one\nconst secondPlan = await api.plans.create({id: 'my-second-key', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$plan = \\Rebilly\\Sdk\\Model\\SubscriptionPlan::from([])\n    ->setProductId('productId')\n    ->setName('Test plan')\n    ->setCurrency('USD')\n    ->setPricing(new \\Rebilly\\Sdk\\Model\\PlanFormulaFlatRate(['price' => 9.99]))\n    ->setRecurringInterval(\n        \\Rebilly\\Sdk\\Model\\SubscriptionPlanRecurringInterval::from()\n            ->setUnit(\\Rebilly\\Sdk\\Model\\SubscriptionPlanRecurringInterval::UNIT_MONTH)\n            ->setLength(1),\n    );\n\ntry {\n    $plan = $service->plans()->create($plan);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/plans/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Plans"
        ],
        "summary": "Retrieve a plan",
        "operationId": "GetPlan",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a plan with a specified ID.",
        "responses": {
          "200": {
            "description": "Plan retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Plan"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$plan = $client->plans()->load('planId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const plan = await api.plans.get({id: 'foobar-001'});\nconsole.log(plan.fields.name);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$plan = $service->plans()->get('planId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Plans"
        ],
        "summary": "Upsert a plan",
        "operationId": "PutPlan",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a plan with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Plan"
              }
            }
          },
          "description": "Plan resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Plan updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Plan"
                }
              }
            }
          },
          "201": {
            "description": "Plan created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Plan"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$planForm = new Rebilly\\Entities\\Plan();\n$planForm->setName('TestPlan');\n$planForm->setCurrency('USD');\n$planForm->setTrialAmount(1);\n$planForm->setTrialPeriodUnit('day');\n$planForm->setTrialPeriodLength(1);\n\ntry {\n    $plan = $client->plans()->update('planId', $planForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new plan\nconst data = {\n    name: 'My strongest plan',\n    currency: 'USD',\n    setupAmount: 12.99,\n    // you could also include a trial if needed\n    recurringPeriodUnit: 'month',\n    recurringPeriodLength: 1,\n    recurringAmount: 25.99\n};\n\n// the ID is optional\nconst firstPlan = await api.plans.create({data});\n\n// or you can provide one\nconst secondPlan = await api.plans.create({id: 'my-second-key', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$plan = new \\Rebilly\\Sdk\\Model\\SubscriptionPlan([\n    'recurringInterval' => [\n        'unit' => \\Rebilly\\Sdk\\Model\\SubscriptionPlanRecurringInterval::UNIT_WEEK,\n        'length' => 2,\n    ],\n]);\n\ntry {\n    $plan = $service->plans()->update('planId', $plan);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n\n// OR\n\n$plan = $service->plans()->get('planId');\n$plan->setRecurringInterval(new \\Rebilly\\Sdk\\Model\\SubscriptionPlanRecurringInterval([\n    'unit' => \\Rebilly\\Sdk\\Model\\SubscriptionPlanRecurringInterval::UNIT_WEEK,\n    'length' => 2,\n]));\n\ntry {\n    $plan = $service->plans()->update('planId', $plan);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Plans"
        ],
        "summary": "Delete a plan",
        "operationId": "DeletePlan",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a plan with a specified ID.",
        "responses": {
          "204": {
            "description": "Plan deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$client->plans()->delete('planId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const request = await api.plans.delete({id: 'my-second-key'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->plans()->delete('planId');"
          }
        ]
      }
    },
    "/products": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Products"
        ],
        "summary": "Retrieve products",
        "operationId": "GetProductCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a list of products.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of products retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Product"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.products.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.products.getAll(params);\n\n// access the collection items, each item is a Product\nsecondCollection.items.forEach(product => console.log(product.fields.name));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$productsPaginator = $service->products()->getAllPaginator(limit: 5);\nforeach ($productsPaginator as $productPage) {\n    printf(\"Products page %d/%d\\n\", $productsPaginator->key() + 1, $productsPaginator->count());\n    foreach ($productPage as $product) {\n        printf(\"Product #%s: %s\\n\", $product->getId(), $product->getName());\n    }\n}\n\n// OR\n\n$products = $service->products()->getAll(limit: 100);\nforeach ($products as $product) {\n    printf(\"Product #%s: %s\\n\", $product->getId(), $product->getName());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Products"
        ],
        "summary": "Create a product",
        "operationId": "PostProduct",
        "x-sdk-operation-name": "create",
        "description": "Creates a product.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Product"
        },
        "responses": {
          "201": {
            "description": "Product created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Product"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new product\nconst data = {\n    name: 'my first product',\n    description: 'made to be of the highest quality',\n    taxCategoryId: '',\n    requiresShipping: true,\n    accountingCode: '100',\n    customFields: []\n};\n\n// the ID is optional\nconst firstProduct = await api.products.create({data});\n\n// or you can provide one\nconst secondProduct = await api.products.create({id: 'my-second-key', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$product = new \\Rebilly\\Sdk\\Model\\Product([\n    'name' => 'my first product',\n    'description' => 'made to be of the highest quality',\n    'taxCategoryId' => '',\n    'requiresShipping' => true,\n    'accountingCode' => '100',\n]);\n\ntry {\n    $product = $service->products()->create($product);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/products/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Products"
        ],
        "summary": "Retrieve a product",
        "operationId": "GetProduct",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a product with a specified ID.",
        "responses": {
          "200": {
            "description": "Product retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Product"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const product = await api.products.get({id: 'foobar-001'});\nconsole.log(product.fields.name);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$product = $service->products()->get('productId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Products"
        ],
        "summary": "Upsert a product",
        "operationId": "PutProduct",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a product with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Product"
        },
        "responses": {
          "200": {
            "description": "Product updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Product"
                }
              }
            }
          },
          "201": {
            "description": "Product created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Product"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// creating a new product\nconst data = {\n    name: 'my first product',\n    description: 'made to be of the highest quality',\n    taxCategoryId: '',\n    requiresShipping: true,\n    accountingCode: '100',\n    customFields: []\n};\n\n// the ID is optional\nconst firstProduct = await api.products.create({data});\n\n// or you can provide one\nconst secondProduct = await api.products.create({id: 'my-second-key', data});\n\n\n\n// updating a product\nconst data = {\n    name: 'my first product',\n    description: 'made to be of the highest quality',\n    taxCategoryId: '20010',\n    requiresShipping: false,\n    accountingCode: '77',\n    customFields: []\n};\n\nconst product = await api.products.update({id: 'my-second-key', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$product = new \\Rebilly\\Sdk\\Model\\Product([\n    'requiresShipping' => false,\n    'accountingCode' => '101',\n]);\n\ntry {\n    $product = $service->products()->update('productId', $product);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n\n// OR\n\n$product = $service->products()->get('productId');\n$product->setRequiresShipping(false)\n    ->setAccountingCode('101');\n\ntry {\n    $product = $service->products()->update('productId', $product);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Products"
        ],
        "summary": "Delete a product",
        "operationId": "DeleteProduct",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a product with a specified ID.",
        "responses": {
          "204": {
            "description": "Product deleted."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const request = await api.products.delete({id: 'my-second-key'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->products()->delete('productId');"
          }
        ]
      }
    },
    "/quotes": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "summary": "Retrieve quotes",
        "operationId": "GetQuoteCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of quotes.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of quotes retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Quote"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "summary": "Create a quote",
        "operationId": "PostQuote",
        "x-sdk-operation-name": "create",
        "description": "Creates a quote.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Quote"
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Quote created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/quotes/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "summary": "Retrieve a quote",
        "operationId": "GetQuote",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a quote with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/mediaTypeJsonPdf"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Quote retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              },
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "summary": "Upsert a quote",
        "operationId": "PutQuote",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates a quote with a specified ID.\n\nThe update operation can only be used for quotes with a `status` of `draft`.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Quote"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Quote updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "201": {
            "description": "Quote created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "summary": "Partially update a quote",
        "operationId": "PatchQuote",
        "x-sdk-operation-name": "patch",
        "description": "Partially updates a quote with a specified ID.\n\nThe update operation can only be used for quotes with a `status` of `draft`.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchQuote"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Quote updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/quotes/{id}/accept": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "summary": "Accept a quote",
        "operationId": "PostQuoteAcceptance",
        "x-sdk-operation-name": "accept",
        "description": "Accepts an issued quote with a specified ID.",
        "responses": {
          "200": {
            "description": "Quote accepted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/quotes/{id}/cancel": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "summary": "Cancel a quote",
        "operationId": "PostQuoteCancellation",
        "x-sdk-operation-name": "cancel",
        "description": "Cancels a draft or issued quote with a specified ID.",
        "responses": {
          "200": {
            "description": "Quote canceled.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/quotes/{id}/issue": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "summary": "Issue a quote",
        "operationId": "PostQuoteIssuance",
        "x-sdk-operation-name": "issue",
        "description": "Issues a draft quote with a specified ID.",
        "responses": {
          "200": {
            "description": "Quote issued.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/quotes/{id}/recall": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "summary": "Recall a quote",
        "operationId": "PostQuoteRecall",
        "x-sdk-operation-name": "recall",
        "description": "Recalls an issued quote with a specified ID so that it can be edited.\nRecalled quotes are assigned the `status` of `draft`.",
        "responses": {
          "200": {
            "description": "Quote recalled.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/quotes/{id}/reject": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "summary": "Reject a quote",
        "operationId": "PostQuoteRejection",
        "x-sdk-operation-name": "reject",
        "description": "Rejects an issued quote with specified ID.",
        "responses": {
          "200": {
            "description": "Quote rejected.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/quotes/{id}/timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes timeline"
        ],
        "summary": "Retrieve quote timeline messages",
        "operationId": "GetQuoteTimelineCollection",
        "x-sdk-operation-name": "getAllTimelineMessages",
        "description": "Retrieves quote timeline messages.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of quote timeline messages retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/QuoteTimeline"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes timeline"
        ],
        "summary": "Create a quote timeline comment",
        "operationId": "PostQuoteTimeline",
        "x-sdk-operation-name": "createTimelineComment",
        "description": "Creates a quote timeline comment or custom defined event.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/QuoteTimeline"
              }
            }
          },
          "description": "Quote timeline resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Quote timeline comment or custom defined event created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/quotes/{id}/timeline/{messageId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "messageId",
          "in": "path",
          "description": "ID of the quote timeline message.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes timeline"
        ],
        "summary": "Retrieve a quote timeline message",
        "operationId": "GetQuoteTimeline",
        "x-sdk-operation-name": "getTimelineMessage",
        "description": "Retrieves a quote timeline message with a specified ID.",
        "responses": {
          "200": {
            "description": "Quote timeline message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "delete": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes timeline"
        ],
        "summary": "Delete a quote timeline message",
        "operationId": "DeleteQuoteTimeline",
        "x-sdk-operation-name": "deleteTimelineMessage",
        "description": "Deletes a quote timeline message with a specified ID.",
        "responses": {
          "204": {
            "description": "Quote timeline message deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/ready-to-pay": {
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Ready to pay",
        "operationId": "PostReadyToPay",
        "x-sdk-operation-name": "readyToPay",
        "x-sdk-resource": "Purchase",
        "description": "Retrieves available payment methods for a specific transaction or purchase.\n\nThe order in which the payment methods are displayed to the customer should be the same as the order in the response.\n\nThe list of payment methods is generated from available gateway accounts and the last matched `adjust-ready-to-pay` action on the `ready-to-pay-requested` event.\nIf no rules match for the specific request, all methods supported by the gateway accounts are sent.\n\nTo invert this behavior, place an all matching rule at the end of the `ready-to-pay-requested` event in the rules engine,\nand include an empty `paymentMethods` property for the `adjust-ready-to-pay` action.\n\nFor more information, see [Update event rules](https://www.rebilly.com/catalog/all/rules#operation/PutEventRule) and [Gateway accounts](https://www.rebilly.com/catalog/all/gateway-accounts).",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostReadyToPay"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Payment methods retrieved.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ReadyToPayMethods"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$readyToPayForm = new Rebilly\\Entities\\ReadyToPay();\n$readyToPayForm->setCurrency('USD');\n$readyToPayForm->setAmount(10);\n$readyToPayForm->setWebsiteId('websiteId');\n$readyToPayForm->setCustomerId('customerId');\n\n$riskMetadata = new Rebilly\\Entities\\RiskMetadata();\n$riskMetadata->setFingerprint('fingerprint');\n$readyToPayForm->setRiskMetadata($riskMetadata);\n\ntry {\n    $transaction = $client->transactions()->create($readyToPayForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$readyToPayForm = new \\Rebilly\\Sdk\\Model\\ReadyToPayAmount();\n$readyToPayForm->setCurrency('USD');\n$readyToPayForm->setAmount(10);\n$readyToPayForm->setWebsiteId('websiteId');\n$readyToPayForm->setCustomerId('customerId');\n\n$riskMetadata = new \\Rebilly\\Sdk\\Model\\RiskMetadata();\n$riskMetadata->setFingerprint('fingerprint');\n$readyToPayForm->setRiskMetadata($riskMetadata);\n\ntry {\n    $transactions = $service->purchase()->readyToPay($readyToPayForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/search": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Search"
        ],
        "summary": "Search merchant data",
        "operationId": "GetSearch",
        "x-sdk-operation-name": "get",
        "description": "Searches merchant data to return resources such as customers, invoices, orders, transactions.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Default search.\nSearches across resources and fields.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Results keyed by a resource.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Search"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/shipping-rates": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Shipping rates"
        ],
        "summary": "Retrieve shipping rates",
        "operationId": "GetShippingRateCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of shipping rates.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of shipping rates retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ShippingRate"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.shippingRates.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.shippingRates.getAll(params);\n\n// access the collection items, each item is a ShippingRate\nsecondCollection.items.forEach(shippingRate => console.log(shippingRate.fields.name));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Shipping rates"
        ],
        "summary": "Create a shipping rate",
        "operationId": "PostShippingRate",
        "x-sdk-operation-name": "create",
        "description": "Creates a shipping rate.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShippingRate"
              }
            }
          },
          "description": "Shipping rate resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Shipping rate created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShippingRate"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new shipping rate\nconst data = {\n    name: 'free shipping',\n    filter: '',\n    price: 0,\n    currency: 'USD'\n};\n\n// the ID is optional\nconst firstRate = await api.shippingRates.create({data});\n\n// or you can provide one\nconst secondRate = await api.shippingRates.create({id: 'my-second-key', data});\n"
          }
        ]
      }
    },
    "/shipping-rates/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Shipping rates"
        ],
        "summary": "Retrieve a shipping rate",
        "operationId": "GetShippingRate",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a shipping rate with a specified ID.",
        "responses": {
          "200": {
            "description": "Shipping rate retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShippingRate"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const shippingRate = await api.shippingRates.get({id: 'foobar-001'});\nconsole.log(shippingRate.fields.name);\n"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Shipping rates"
        ],
        "summary": "Create a shipping rate with ID",
        "operationId": "PutShippingRate",
        "x-sdk-operation-name": "update",
        "description": "Creates a shipping rate with a specified ID.",
        "responses": {
          "200": {
            "description": "Shipping rate updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShippingRate"
                }
              }
            }
          },
          "201": {
            "description": "Shipping rate created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ShippingRate"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ShippingRate"
              }
            }
          },
          "description": "Shipping rate resource.",
          "required": true
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// creating a new shipping rate\nconst data = {\n    name: 'free shipping',\n    filter: '',\n    price: 0,\n    currency: 'USD'\n};\n\n// the ID is optional\nconst firstRate = await api.shippingRates.create({data});\n\n// or you can provide one\nconst secondRate = await api.shippingRates.create({id: 'my-second-key', data});\n\n\n// updating a shipping rate\nconst data = {\n  name: 'regular shipping',\n  filter: '',\n  price: 9.99,\n  currency: 'USD'\n};\n\nconst shippingRate = await api.shippingRates.update({id: 'my-second-key', data});\n"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Shipping rates"
        ],
        "summary": "Delete a shipping rate",
        "operationId": "DeleteShippingRate",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a shipping rate with a specified ID.",
        "responses": {
          "204": {
            "description": "Shipping rate deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const request = await api.shippingRates.delete({id: 'my-second-key'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204\n"
          }
        ]
      }
    },
    "/orders": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Retrieve orders",
        "operationId": "GetOrderCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a collection of orders.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of orders retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Order"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Create an order",
        "operationId": "PostOrder",
        "x-sdk-operation-name": "create",
        "description": "Creates an order.",
        "parameters": [
          {
            "$ref": "#/components/parameters/orderExpand"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Order"
              }
            }
          },
          "description": "Order resource."
        },
        "responses": {
          "201": {
            "description": "Order created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        }
      }
    },
    "/orders/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Retrieve an order",
        "operationId": "GetOrder",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/orderExpand"
          }
        ],
        "description": "Retrieves an order with a specified ID.",
        "responses": {
          "200": {
            "description": "Order retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Upsert an order",
        "operationId": "PutOrder",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) an order with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/orderExpand"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Order"
              }
            }
          },
          "description": "Order resource."
        },
        "responses": {
          "200": {
            "description": "Order updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          },
          "201": {
            "description": "Order created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        }
      }
    },
    "/orders/{id}/upcoming-invoice": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Retrieve an upcoming order invoice",
        "operationId": "GetOrderUpcomingInvoice",
        "x-sdk-operation-name": "getUpcomingInvoice",
        "description": "Retrieves an upcoming invoice for a specified order.\n\nAn upcoming invoice is an invoice that has not been issued.\nIt functions as a preview of the next invoice for the order.\nFor more information, see [Invoices](https://www.rebilly.com/docs/dev-docs/invoices/).",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Upcoming invoice retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderUpcomingInvoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/order-pauses": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Retrieve order pauses",
        "operationId": "GetOrderPauseCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of order pauses.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of order pauses retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderPause"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Pause a order",
        "operationId": "PostOrderPause",
        "x-sdk-operation-name": "pause",
        "description": "Pauses an order with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderPause"
              }
            }
          },
          "description": "Pause resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Pause created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPause"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/order-pauses/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Retrieve an order pause",
        "operationId": "GetOrderPause",
        "x-sdk-operation-name": "get",
        "description": "Retrieves an order pause with a specified ID.",
        "responses": {
          "200": {
            "description": "Pause retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPause"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Update an order pause",
        "operationId": "PutOrderPause",
        "x-sdk-operation-name": "update",
        "description": "Updates an order pause with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderPause"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Pause updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPause"
                }
              }
            }
          },
          "201": {
            "description": "Pause created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPause"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Delete an order pause",
        "operationId": "DeleteOrderPause",
        "x-sdk-operation-name": "delete",
        "description": "Deletes an order pause with a specified ID.\nIf the specified pause is `pending`, it is `revoked`.\nIf the specified pause is `ongoing`, it is `finished`.",
        "responses": {
          "204": {
            "description": "Order pause revoked or finished.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/order-cancellations": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Retrieve order cancellation collection",
        "operationId": "GetOrderCancellationCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of order cancellations.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of cancelled orders retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderCancellation"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Cancel an order",
        "operationId": "PostOrderCancellation",
        "x-sdk-operation-name": "create",
        "description": "Cancels an order.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderCancellation"
              }
            }
          },
          "description": "Cancellation resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Cancellation created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderCancellation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/order-cancellations/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Retrieve an order cancellation",
        "operationId": "GetOrderCancellation",
        "x-sdk-operation-name": "get",
        "description": "Retrieves an order cancellation with a specified ID.",
        "responses": {
          "200": {
            "description": "Order cancellation retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderCancellation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Upsert an order cancellation",
        "operationId": "PutOrderCancellation",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) an order cancellation with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderCancellation"
              }
            }
          },
          "description": "Cancellation resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Cancellation updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderCancellation"
                }
              }
            }
          },
          "201": {
            "description": "Cancellation created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderCancellation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Update an order cancellation",
        "operationId": "PatchOrderCancellation",
        "x-sdk-operation-name": "patch",
        "description": "Updates an order cancellation with a specified ID.\nUse this operation to update a cancellation reason and description.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "canceledBy": {
                        "readOnly": true
                      },
                      "status": {
                        "readOnly": true
                      }
                    }
                  },
                  {
                    "$ref": "#/components/schemas/OrderCancellation"
                  }
                ]
              }
            }
          },
          "description": "Patch cancellation resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Cancellation updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderCancellation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Delete an order cancellation",
        "operationId": "DeleteOrderCancellation",
        "x-sdk-operation-name": "delete",
        "description": "Deletes an order cancellation with a specified ID.\n\n> **Important:** Only order cancellations with a `status` of `draft` can be deleted.",
        "responses": {
          "204": {
            "description": "Order cancellation deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/order-reactivations": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Retrieve order reactivations",
        "operationId": "GetOrderReactivationCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of order reactivations.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of order reactivations retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderReactivation"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.orderReactivations.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.orderReactivations.getAll(params);\n\n// access the collection items, each item is a Member\nsecondCollection.items.forEach(order => console.log(order.fields.customerId));\n"
          }
        ]
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Reactivate an order",
        "operationId": "PostOrderReactivation",
        "x-sdk-operation-name": "reactivate",
        "description": "Reactivates an order with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderReactivation"
              }
            }
          },
          "description": "Reactivation resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Reactivation created. The order is now active.\nIf the order had a related cancellation with a `status` of `confirmed`, it is revoked.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderReactivation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const data = {\n    orderId: 'ord_01HRF27SATGE4Z6PBJE6PD8328',\n    description: 'reactivation-reason',\n    effectiveTime: '2020-06-10T13:55:51Z',\n    renewalTime: '2020-07-10T13:55:51Z'\n};\n\nconst reactivatedOrder = await api.orderReactivations.reactivate({data});\n"
          }
        ]
      }
    },
    "/order-reactivations/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Retrieve an order reactivation",
        "operationId": "GetOrderReactivation",
        "x-sdk-operation-name": "get",
        "description": "Retrieves an order reactivation with a specified ID.",
        "responses": {
          "200": {
            "description": "Reactivation retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderReactivation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const order = await api.orderReactivations.get({id: 'foobar-001'});\nconsole.log(order.fields.description);\n"
          }
        ]
      }
    },
    "/subscriptions": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Retrieve orders",
        "operationId": "GetSubscriptionCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a list of orders.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/subscriptionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of subscriptions retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$subscriptions = $client->subscriptions()->search([\n    'filter' => 'customerId:testCustomerId',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.subscriptions.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.subscriptions.getAll(params);\n\n// access the collection items, each item is a Subscription\nsecondCollection.items.forEach(subscription => console.log(subscription.fields.customerId));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$ordersPaginator = $service->subscriptions()->getAllPaginator(filter: 'customerId:testCustomerId');\nforeach ($ordersPaginator as $orderPage) {\n    printf(\"Orders page %d/%d\\n\", $ordersPaginator->key() + 1, $ordersPaginator->count());\n    foreach ($orderPage as $order) {\n        printf(\"Order #%s (%s): %s\\n\", $order->getId(), $order->getOrderType(), $order->getStatus());\n    }\n}\n\n// OR\n\n$orders = $service->subscriptions()->getAll(filter: 'customerId:testCustomerId', limit: 10);\nforeach ($orders as $order) {\n    printf(\"Order #%s (%s): %s\\n\", $order->getId(), $order->getOrderType(), $order->getStatus());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Create an order",
        "operationId": "PostSubscription",
        "x-sdk-operation-name": "create",
        "description": "Creates an order.\n\nTo create or update an order with a specified ID, use the [Upsert an order](../PutSubscription) operation.",
        "parameters": [
          {
            "$ref": "#/components/parameters/subscriptionExpand"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Subscription"
        },
        "responses": {
          "201": {
            "description": "Order created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$subscriptionForm = new Rebilly\\Entities\\Subscription();\n$subscriptionForm->setCustomerId('customerId');\n$subscriptionForm->setWebsiteId('websiteId');\n$subscriptionForm->setItems([\n    [\n        'planId' => 'my-plan',\n        'quantity' => 1,\n    ],\n]);\n$subscriptionForm->setBillingAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n]);\n\ntry {\n    $subscription = $client->subscriptions()->create($subscriptionForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new subscription\nconst data = {\n    customerId: 'foobar-0001',\n    websiteId: 'my-main-website',\n    items: [\n        { plan: { id: 'my-plan-id' }, quantity: 1 },\n    ],\n    // you can append this subscription to\n    // an existing invoice by passing its ID\n    initialInvoiceId: 'my-existing-invoice-id',\n    billingAddress: {\n        firstName: 'Johnny',\n        lastName: 'Brown',\n        emails: [{\n            label: 'main',\n            value: 'johnny+test@grr.la',\n            primary: true\n        }],\n    },\n    deliveryAddress: {\n        firstName: 'Johnny',\n        lastName: 'Brown',\n        emails: [{\n            label: 'main',\n            value: 'johnny+test@grr.la',\n            primary: true\n        }],\n    },\n    customFields: {}\n};\n\n// the ID is optional\nconst firstInvoice = await api.subscriptions.create({data});\n\n// or you can provide one\nconst secondInvoice = await api.subscriptions.create({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$order = \\Rebilly\\Sdk\\Model\\Subscription::from()\n    ->setWebsiteId('websiteId')\n    ->setCustomerId('customerId')\n    ->setItems([\n        \\Rebilly\\Sdk\\Model\\SubscriptionOrOneTimeSaleItem::from()\n            ->setPlan(\n                \\Rebilly\\Sdk\\Model\\OriginalPlan::from()\n                    ->setId('planId')\n            )\n            ->setQuantity(1),\n    ]);\n\ntry {\n    $order = $service->subscriptions()->create($order);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/subscriptions/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Retrieve an order",
        "operationId": "GetSubscription",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/subscriptionExpand"
          }
        ],
        "description": "Retrieves an order with a specified ID.",
        "responses": {
          "200": {
            "description": "Order retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$subscription = $client->subscriptions()->load('subscriptionId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const subscription = await api.subscriptions.get({id: 'foobar-001'});\nconsole.log(subscription.fields.billingAddress.firstName);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$order = $service->subscriptions()->get('orderId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Upsert an order",
        "operationId": "PutSubscription",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) an order with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/subscriptionExpand"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/Subscription"
        },
        "responses": {
          "200": {
            "description": "Order updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                }
              }
            }
          },
          "201": {
            "description": "Order created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$subscriptionForm = new Rebilly\\Entities\\Subscription();\n$subscriptionForm->setCustomerId('customerId');\n$subscriptionForm->setWebsiteId('websiteId');\n$subscriptionForm->setItems($subscriptionForm->createItems([\n    [\n        'planId' => 'my-plan',\n        'quantity' => 1,\n    ],\n]));\n$subscriptionForm->setBillingAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n]);\n\ntry {\n    $subscription = $client->subscriptions()->update('subscriptionId', $subscriptionForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// creating a subscription\nconst data = {\n    customerId: 'foobar-0001',\n    websiteId: 'my-main-website',\n    items: [\n        { plan: { id: 'my-plan-id' }, quantity: 1 },\n    ],\n    // you can append this subscription to\n    // an existing invoice by passing its ID\n    initialInvoiceId: 'my-existing-invoice-id',\n    billingAddress: {\n        firstName: 'Johnny',\n        lastName: 'Brown',\n        emails: [{\n            label: 'main',\n            value: 'johnny+test@grr.la',\n            primary: true\n        }],\n    },\n    deliveryAddress: {\n        firstName: 'Johnny',\n        lastName: 'Brown',\n        emails: [{\n            label: 'main',\n            value: 'johnny+test@grr.la',\n            primary: true\n        }],\n    },\n    customFields: {}\n};\n\n// the ID is optional\nconst firstInvoice = await api.subscriptions.create({data});\n\n// or you can provide one\nconst secondInvoice = await api.subscriptions.create({id: 'my-second-id', data});\n\n\n\n// updating a subscription\nconst data = {\n    // determines if a payment attempt will be automatic\n    autopay: false,\n    // set the next renewal time\n    renewalTime: '2018-09-26T15:34:29Z'\n};\n\nconst subscription = await api.subscriptions.update({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$order = new \\Rebilly\\Sdk\\Model\\Subscription([\n    'shipping' => new \\Rebilly\\Sdk\\Model\\ManualShipping([\n        'amount' => 14.99,\n    ]),\n]);\n\ntry {\n    $order = $service->subscriptions()->update('orderId', $order);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n\n// OR\n\n$order = $service->subscriptions()->get('orderId');\n$order->setShipping(new \\Rebilly\\Sdk\\Model\\ManualShipping(['amount' => 14.99]));\n\ntry {\n    $order = $service->subscriptions()->update('orderId', $order);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Delete a pending order",
        "operationId": "DeleteSubscription",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a pending order with a specified ID.",
        "responses": {
          "204": {
            "description": "Pending order deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->subscriptions()->delete('orderId');"
          }
        ]
      }
    },
    "/subscriptions/{id}/void": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Void a subscription order",
        "operationId": "PostSubscriptionVoid",
        "x-sdk-operation-name": "void",
        "description": "Voids a pending order with a specified ID.",
        "responses": {
          "201": {
            "description": "Order voided.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$subscription = $client->subscriptions()->void('subscriptionId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const voidedSubscription = await api.subscriptions.void({id: 'my-subscription-id'});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$order = $service->subscriptions()->void('orderId');"
          }
        ]
      }
    },
    "/orders/{id}/void": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Void an order",
        "operationId": "PostOrderVoid",
        "x-sdk-operation-name": "void",
        "description": "Voids a pending order with a specified ID.",
        "responses": {
          "201": {
            "description": "Order voided.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const voidedOrder = await api.orders.void({id: 'my-order-id'});\n"
          }
        ]
      }
    },
    "/subscriptions/{id}/change-items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Change subscription order items",
        "operationId": "PostSubscriptionItemsChange",
        "x-sdk-operation-name": "changeItems",
        "parameters": [
          {
            "$ref": "#/components/parameters/subscriptionExpand"
          }
        ],
        "description": "Changes subscription order items or quantities, and designates if or when pro-rata credits should be given.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscriptionChange"
              }
            }
          },
          "description": "Change items request.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Order changed.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionOrOneTimeSale"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/orders/{id}/change-items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Change order items",
        "operationId": "PostOrderItemsChange",
        "x-sdk-operation-name": "changeItems",
        "parameters": [
          {
            "$ref": "#/components/parameters/orderExpand"
          }
        ],
        "description": "Changes order items or quantities, and designates if or when pro-rata credits should be given.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderChange"
              }
            }
          },
          "description": "Change items request.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Order changed.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/subscriptions/{id}/items/{itemId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "itemId",
          "in": "path",
          "description": "ID of subscription item.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "patch": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Update a subscription order item",
        "operationId": "PatchSubscriptionItem",
        "x-sdk-operation-name": "updateItem",
        "description": "Updates a subscription order item.\nThis is an experimental endpoint and may be changed or removed in the future.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderItemUpdate"
              }
            }
          },
          "description": "Update item request.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Order item updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionOrOneTimeSaleItem"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const data = {\n  quantityFilled: 4,\n};\n\nconst subscription = await api.subscription.updateItem({\n  id: \"subscription-id\",\n  itemId: \"item-id\",\n  data,\n});\n"
          }
        ]
      }
    },
    "/orders/{id}/items/{itemId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "itemId",
          "in": "path",
          "description": "ID of the order item.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "patch": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Update an order item",
        "operationId": "PatchOrderItem",
        "x-sdk-operation-name": "updateItem",
        "description": "Updates an order item.\nThis is an experimental endpoint and may be changed or removed in the future.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderItemUpdate"
              }
            }
          },
          "description": "Update item request.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Order item updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionOrOneTimeSaleItem"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const data = {\n  quantityFilled: 4,\n};\n\nconst order = await api.order.updateItem({\n  id: \"order-id\",\n  itemId: \"item-id\",\n  data,\n});\n"
          }
        ]
      }
    },
    "/subscriptions/{id}/interim-invoice": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Issue an interim invoice",
        "operationId": "PostSubscriptionInterimInvoice",
        "x-sdk-operation-name": "createInterimInvoice",
        "description": "Issues an interim invoice for a subscription order.\nUse this operation for plan changes and pro rata adjustments.\n\nThis process:\n\n  - Creates an invoice.\n  - Adds the subscription line items to the invoice.\n  - Issues the invoice.\n  - Optionally, applies payment to the invoice if a `transactionId` is supplied.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscriptionInvoice"
              }
            }
          },
          "description": "Issue an interim invoice.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Invoice created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/orders/{id}/interim-invoice": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Issue an interim invoice",
        "operationId": "PostOrderInterimInvoice",
        "x-sdk-operation-name": "createInterimInvoice",
        "description": "Issues an interim invoice for an order.\nUse this operation for plan changes and pro rata adjustments.\n\nThis process:\n\n  - Creates an invoice.\n  - Adds the order line items to the invoice.\n  - Issues the invoice.\n  - Optionally, applies payment to the invoice if a `transactionId` is supplied.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscriptionInvoice"
              }
            }
          },
          "description": "Issue an interim invoice.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Invoice created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Invoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/subscription-pauses": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Retrieve subscription order pauses",
        "operationId": "GetSubscriptionPauseCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of subscription order pauses.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of subscription order pauses retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SubscriptionPause"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Pause a subscription order",
        "operationId": "PostSubscriptionPause",
        "x-sdk-operation-name": "pause",
        "description": "Pauses a subscription order with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscriptionPause"
              }
            }
          },
          "description": "Pause resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Pause created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionPause"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/subscription-pauses/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Retrieve a subscription order pause",
        "operationId": "GetSubscriptionPause",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a subscription order pause with a specified ID.",
        "responses": {
          "200": {
            "description": "Pause retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionPause"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Update a subscription order pause",
        "operationId": "PutSubscriptionPause",
        "x-sdk-operation-name": "update",
        "description": "Updates a subscription order pause.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscriptionPause"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Pause updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionPause"
                }
              }
            }
          },
          "201": {
            "description": "Pause created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionPause"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Delete a subscription order pause",
        "operationId": "DeleteSubscriptionPause",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a subscription order pause with a specified ID.\nIf the specified pause is `pending`, it is `revoked`.\nIf the specified pause is `ongoing`, it is `finished`.",
        "responses": {
          "204": {
            "description": "Subscription order pause revoked or finished.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/subscription-cancellations": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Retrieve subscription order cancellations",
        "operationId": "GetSubscriptionCancellationCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of subscription order cancellations.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of cancelled subscription orders retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SubscriptionCancellation"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$cancellationsPaginator = $service->subscriptionCancellations()->getAllPaginator(\n    filter: 'reason:' . \\Rebilly\\Sdk\\Model\\SubscriptionCancellation::REASON_CONTRACT_EXPIRED,\n);\nforeach ($cancellationsPaginator as $cancellationPage) {\n    printf(\"Cancellations page %d/%d\\n\", $cancellationsPaginator->key() + 1, $cancellationsPaginator->count());\n    foreach ($cancellationPage as $cancellation) {\n        printf(\n            \"Cancellation #%s (%s): %s\\n\",\n            $cancellation->getId(),\n            $cancellation->getStatus(),\n            $cancellation->getSubscriptionId(),\n        );\n    }\n}\n\n// OR\n\n$cancellations = $service->subscriptionCancellations()->getAll(\n    filter: 'reason:' . \\Rebilly\\Sdk\\Model\\SubscriptionCancellation::REASON_CONTRACT_EXPIRED,\n    limit: 10,\n);\nforeach ($cancellations as $cancellation) {\n    printf(\n        \"Cancellation #%s (%s): %s\\n\",\n        $cancellation->getId(),\n        $cancellation->getStatus(),\n        $cancellation->getSubscriptionId(),\n    );\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Cancel a subscription order",
        "operationId": "PostSubscriptionCancellation",
        "x-sdk-operation-name": "create",
        "description": "Cancels a subscription order.",
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionCancellation"
        },
        "responses": {
          "201": {
            "description": "Cancellation created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionCancellation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$subscriptionCancellationForm = new Rebilly\\Entities\\SubscriptionCancellation();\n$subscriptionCancellationForm->setSubscriptionId('subscription-1');\n$subscriptionCancellationForm->setChurnTime(date('c'));\n\ntry {\n    $subscription = $client->subscriptionCancellations()->create($subscriptionCancellationForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "const data = {\n    subscriptionId: 'sub_01HRF27SATGE4Z6PBJE6PD8328',\n    churnTime: '2020-06-10T13:55:51Z',\n}\n\n// the ID is optional\nconst firstSubscriptionCancellation = await api.subscriptionCancellations.create({data});\n\n// or you can provide one\nconst secondSubscriptionCancellation = await api.subscriptionCancellations.create({id: 'custom-cancellation-id', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$cancellation = new \\Rebilly\\Sdk\\Model\\SubscriptionCancellation([\n    'subscriptionId' => 'subscriptionId',\n    'churnTime' => new \\DateTimeImmutable(),\n    'canceledBy' => \\Rebilly\\Sdk\\Model\\SubscriptionCancellation::CANCELED_BY_MERCHANT,\n    'reason' => \\Rebilly\\Sdk\\Model\\SubscriptionCancellation::REASON_CONTRACT_EXPIRED,\n]);\n\ntry {\n    $cancellation = $service->subscriptionCancellations()->create($cancellation);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/subscription-cancellations/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Retrieve a subscription order cancellation",
        "operationId": "GetSubscriptionCancellation",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a subscription order cancellation with a specified ID.",
        "responses": {
          "200": {
            "description": "Subscription order cancellation retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionCancellation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$cancellation = $service->subscriptionCancellations()->get('cancellationId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Upsert a subscription order cancellation",
        "operationId": "PutSubscriptionCancellation",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a subscription order cancellation with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionCancellation"
        },
        "responses": {
          "200": {
            "description": "Cancellation updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionCancellation"
                }
              }
            }
          },
          "201": {
            "description": "Cancellation created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionCancellation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const data = {\n    subscriptionId: 'sub_01HRF27SATGE4Z6PBJE6PD8328',\n    churnTime: '2020-06-10T13:55:51Z',\n}\n\n// the ID is optional\nconst firstSubscriptionCancellation = await api.subscriptionCancellations.create({data});\n\n// or you can provide one\nconst secondSubscriptionCancellation = await api.subscriptionCancellations.create({id: 'custom-cancellation-id', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$cancellation = new \\Rebilly\\Sdk\\Model\\SubscriptionCancellation([\n    'subscriptionId' => 'subscriptionId',\n    'churnTime' => new \\DateTimeImmutable(),\n    'canceledBy' => \\Rebilly\\Sdk\\Model\\SubscriptionCancellation::CANCELED_BY_MERCHANT,\n    'reason' => \\Rebilly\\Sdk\\Model\\SubscriptionCancellation::REASON_CONTRACT_EXPIRED,\n]);\n\ntry {\n    $cancellation = $service->subscriptionCancellations()->update('cancellationId', $cancellation);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "patch": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Update a subscription order cancellation",
        "operationId": "PatchSubscriptionCancellation",
        "x-sdk-operation-name": "patch",
        "description": "Updates a subscription order cancellation with a specified ID.\nUse this operation to update a cancellation reason and description.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "properties": {
                      "canceledBy": {
                        "readOnly": true
                      },
                      "status": {
                        "readOnly": true
                      }
                    }
                  },
                  {
                    "$ref": "#/components/schemas/SubscriptionCancellation"
                  }
                ]
              }
            }
          },
          "description": "Patch cancellation resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Cancellation updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionCancellation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$cancellation = new \\Rebilly\\Sdk\\Model\\PatchSubscriptionCancellationRequest([\n    'reason' => \\Rebilly\\Sdk\\Model\\PatchSubscriptionCancellationRequest::REASON_CONTRACT_EXPIRED,\n]);\n\ntry {\n    $cancellation = $service->subscriptionCancellations()->patch('cancellationId', $cancellation);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Delete a subscription order cancellation",
        "operationId": "DeleteSubscriptionCancellation",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a subscription order cancellation with a specified ID.\n\n> **Important:** Only subscription order cancellations with a `status` of `draft` can be deleted.",
        "responses": {
          "204": {
            "description": "Subscription order cancellation deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$service->subscriptionCancellations()->delete('cancellationId');"
          }
        ]
      }
    },
    "/subscription-reactivations": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Retrieve subscription order reactivations",
        "operationId": "GetSubscriptionReactivationCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of subscription order reactivations.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of subscription order reactivations retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/SubscriptionReactivation"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.subscriptionReactivations.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.subscriptionReactivations.getAll(params);\n\n// access the collection items, each item is a SubscriptionReactivation\nsecondCollection.items.forEach(subscription => console.log(subscription.fields.customerId));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Reactivate a subscription order",
        "operationId": "PostSubscriptionReactivation",
        "x-sdk-operation-name": "reactivate",
        "description": "Reactivates a subscription order with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SubscriptionReactivation"
              }
            }
          },
          "description": "Reactivation resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Reactivation created. The order is now active.\nIf the order had a related cancellation with a `status` of `confirmed`, it is revoked.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionReactivation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const data = {\n    subscriptionId: 'sub_01HRF27SATGE4Z6PBJE6PD8328',\n    description: 'reactivation-reason',\n    effectiveTime: '2020-06-10T13:55:51Z',\n    renewalTime: '2020-07-10T13:55:51Z'\n};\n\nconst reactivatedSubscription = await api.subscriptionReactivations.reactivate({data});\n"
          }
        ]
      }
    },
    "/subscription-reactivations/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Retrieve a subscription order reactivation",
        "operationId": "GetSubscriptionReactivation",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a subscription order reactivation with a specified ID.",
        "responses": {
          "200": {
            "description": "Reactivation retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionReactivation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const subscription = await api.subscriptionReactivations.get({id: 'foobar-001'});\nconsole.log(subscription.fields.description);\n"
          }
        ]
      }
    },
    "/subscriptions/{id}/upcoming-invoices": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Retrieve upcoming subscription order invoice",
        "operationId": "GetSubscriptionUpcomingInvoiceCollection",
        "x-sdk-operation-name": "getAllUpcomingInvoices",
        "description": "Retrieves an upcoming invoice for a specified subscription order.\n\nThis endpoint is deprecated.\nUse [Retrieve an upcoming invoice](../GetSubscriptionUpcomingInvoice) instead.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "deprecated": true,
        "responses": {
          "200": {
            "description": "Upcoming invoices retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UpcomingInvoice"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/subscriptions/{id}/upcoming-invoice": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Retrieve an upcoming subscription order invoice",
        "operationId": "GetSubscriptionUpcomingInvoice",
        "x-sdk-operation-name": "getUpcomingInvoice",
        "description": "Retrieves an upcoming invoice for a specified subscription order.\n\nAn upcoming invoice is an invoice that has not been issued.\nIt functions as a preview of the next invoice for the order.\nFor more information, see [Invoices](https://www.rebilly.com/docs/dev-docs/invoices/).",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Upcoming invoice retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpcomingInvoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/subscriptions/{id}/upcoming-invoice/issue": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Issue an upcoming invoice for early pay",
        "operationId": "PostSubscriptionUpcomingInvoiceIssuance",
        "x-sdk-operation-name": "issueEarlyUpcomingInvoice",
        "description": "Issues an upcoming invoice, for a subscription order with a specified ID, for early pay.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceIssue"
              }
            }
          },
          "description": "InvoiceIssue resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Upcoming invoice issued.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpcomingInvoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/orders/{id}/upcoming-invoice/issue": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "summary": "Issue an upcoming invoice for early pay",
        "operationId": "PostOrderUpcomingInvoiceIssuance",
        "x-sdk-operation-name": "issueEarlyUpcomingInvoice",
        "description": "Issues an upcoming invoice, for an order with a specified ID, for early pay.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceIssue"
              }
            }
          },
          "description": "InvoiceIssue resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Upcoming invoice issued.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpcomingInvoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/subscriptions/{id}/upcoming-invoices/{invoiceId}/issue": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "invoiceId",
          "in": "path",
          "description": "ID of the upcoming invoice.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Issue a specific upcoming invoice for early pay",
        "operationId": "PostUpcomingInvoiceIssuance",
        "x-sdk-operation-name": "issueUpcomingInvoice",
        "deprecated": true,
        "description": "Issues an upcoming invoice with a specified ID for early pay.\n\nThis endpoint is deprecated.\nUse [Issue an upcoming invoice for early pay](../PostSubscriptionUpcomingInvoiceIssuance) instead.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceIssue"
              }
            }
          },
          "description": "InvoiceIssue resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Upcoming invoice issued.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpcomingInvoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/subscriptions/{id}/timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders timeline"
        ],
        "summary": "Retrieve order timeline messages",
        "operationId": "GetSubscriptionTimelineCollection",
        "x-sdk-operation-name": "getAllTimelineMessages",
        "description": "Retrieves a list of order timeline messages.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of order timeline messages retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/OrderTimeline"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional except for the `id`\nconst firstCollection = await api.subscriptions\n    .getAllTimelineMessages({id: 'my-transaction'});\n\n// alternatively you can specify one or more of them\nconst params = {id: 'my-transaction', limit: 20, offset: 100};\nconst secondCollection = await api.subscriptions.getAllTimelineMessages(params);\n\n// access the collection items, each item is a SubscriptionTimeline\nsecondCollection.items\n    .forEach(message => console.log(message.fields.eventType));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders timeline"
        ],
        "summary": "Create an order timeline comment",
        "operationId": "PostSubscriptionTimeline",
        "x-sdk-operation-name": "createTimelineComment",
        "description": "Creates an order timeline comment.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderTimeline"
              }
            }
          },
          "description": "Order Timeline resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Order timeline comment created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// Create a comment\nconst firstComment = await api\n    .subscriptions.createTimelineComment({id: 'my-subscription-id', data: {message: 'Your comment here'}});\n\n// Using params object, mentions and references\nconst message = `Example of mentions @user@mydomain.com and references #subscriptions-subscription-id`;\nconst params = {\n    id: 'my-subscription-id',\n    data: {\n        message,\n    },\n};\nconst secondComment = await api.subscriptions.createTimelineComment(params);"
          }
        ]
      }
    },
    "/subscriptions/{id}/timeline/{messageId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "messageId",
          "in": "path",
          "description": "ID of the order timeline message.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders timeline"
        ],
        "summary": "Retrieve an order timeline message",
        "operationId": "GetSubscriptionTimeline",
        "x-sdk-operation-name": "getTimelineMessage",
        "description": "Retrieves a order message with a specified ID.",
        "responses": {
          "200": {
            "description": "Order timeline message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const message = await api.subscriptions\n    .getTimelineMessage({id: 'foobar-001', messageId: 'message-202'});\nconsole.log(message.fields.eventType);"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders timeline"
        ],
        "summary": "Delete an order timeline message",
        "operationId": "DeleteSubscriptionTimeline",
        "x-sdk-operation-name": "deleteTimelineMessage",
        "description": "Deletes an order timeline message with a specified ID.",
        "responses": {
          "204": {
            "description": "Order timeline message deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const request = await api.subscriptions\n    .deleteTimelineMessage({id: 'foobar-001', messageId: 'message-202'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          }
        ]
      }
    },
    "/usages": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Usage"
        ],
        "summary": "Retrieve usage records",
        "operationId": "GetUsageCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of usage records.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of usage records retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Usage"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Usage"
        ],
        "summary": "Create a usage record",
        "operationId": "PostUsage",
        "x-sdk-operation-name": "create",
        "description": "Creates a usage report.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Usage"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Usage record created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Usage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/usages/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Usage"
        ],
        "summary": "Retrieve a usage record",
        "operationId": "GetUsage",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          }
        ],
        "description": "Retrieves a usage record with a specified ID.",
        "responses": {
          "200": {
            "description": "Usage record retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Usage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Usage"
        ],
        "summary": "Delete a usage record",
        "operationId": "DeleteUsage",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a usage record with a specified ID.",
        "responses": {
          "204": {
            "description": "Usage record deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/tags": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Retrieve tags",
        "operationId": "GetTagCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of tags.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of tags retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Tag"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$tagsPaginator = $service->tags()->getAllPaginator(limit: 5);\nforeach ($tagsPaginator as $tagPage) {\n    printf(\"Tags page %d/%d\\n\", $tagsPaginator->key() + 1, $tagsPaginator->count());\n    foreach ($tagPage as $tag) {\n        printf(\"Tag #%s: %s\\n\", $tag->getId(), $tag->getName());\n    }\n}\n\n// OR\n\n$tags = $service->tags()->getAll();\nforeach ($tags as $tag) {\n    printf(\"Tag #%s: %s\\n\", $tag->getId(), $tag->getName());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Create a tag",
        "operationId": "PostTag",
        "x-sdk-operation-name": "create",
        "description": "Creates a tag.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Tag"
        },
        "responses": {
          "201": {
            "description": "Tag created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tag"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$tagForm = new \\Rebilly\\Sdk\\Model\\Tag();\n$tagForm->setName('tag-name');\n$tagForm->setType(\\Rebilly\\Sdk\\Model\\Tag::TYPE_CUSTOMER);\n\ntry {\n    $service->tags()->create($tagForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/tags/{tag}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/tag"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Retrieve a tag",
        "operationId": "GetTag",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a tag with a specified name.",
        "responses": {
          "200": {
            "description": "Tag with a specified name retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tag"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "patch": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Update a tag",
        "operationId": "PatchTag",
        "x-sdk-operation-name": "update",
        "description": "Updates a tag with a specified name.",
        "requestBody": {
          "$ref": "#/components/requestBodies/UpdateTag"
        },
        "responses": {
          "200": {
            "description": "Tag updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Tag"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Delete a tag",
        "operationId": "DeleteTag",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a tag with a specified name.\nThis is an asynchronous operation.",
        "responses": {
          "204": {
            "description": "Tag deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/tags/{tag}/customers": {
      "parameters": [
        {
          "$ref": "#/components/parameters/tag"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Tag a list of customers",
        "operationId": "PostTagCustomerCollection",
        "x-sdk-operation-name": "tagCustomers",
        "description": "Tags a list of customers.\n\nIf a customer in the list already has the specified tag applied, the customer is ignored.\nThis is an asynchronous operation.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "customerIds"
                ],
                "properties": {
                  "customerIds": {
                    "description": "List of customer IDs.",
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 1000,
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Customers tagging process has been scheduled.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Untag a list of customers",
        "operationId": "DeleteTagCustomerCollection",
        "x-sdk-operation-name": "untagCustomers",
        "description": "Untag a list of customers.\n\nIf a customer in the list does not have the specified tag applied, the customer is ignored.\nThis is an asynchronous operation.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "customerIds"
                ],
                "properties": {
                  "customerIds": {
                    "description": "List of customer IDs.",
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 1000,
                    "items": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Customers untagging process has been scheduled.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/tags/{tag}/customers/{customerId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/tag"
        },
        {
          "$ref": "#/components/parameters/customerId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Tag a customer",
        "operationId": "PostTagCustomer",
        "x-sdk-operation-name": "tagCustomer",
        "description": "Tags a customer.",
        "responses": {
          "204": {
            "description": "Customer tagged.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Untag a customer",
        "operationId": "DeleteTagCustomer",
        "x-sdk-operation-name": "untagCustomer",
        "description": "Untags a customer.",
        "responses": {
          "204": {
            "description": "Customer untagged.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/tags/{tag}/kyc-documents": {
      "parameters": [
        {
          "$ref": "#/components/parameters/tag"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Tag a list of KYC documents",
        "operationId": "PostTagKycDocumentCollection",
        "x-sdk-operation-name": "tagKycDocuments",
        "description": "Tags a list of KYC documents.\n\nIf a KYC document in the list already has the specified tag applied, the KYC document is ignored.\nThis is an asynchronous operation.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "kycDocumentIds"
                ],
                "properties": {
                  "kycDocumentIds": {
                    "description": "List of KYC document IDs.",
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 1000,
                    "items": {
                      "type": "string",
                      "example": "kyc_doc_0YV7JHY705C6DA487BFTAA33V8"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "KYC documents tagging process has been scheduled.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Untag a list of KYC documents",
        "operationId": "DeleteTagKycDocumentCollection",
        "x-sdk-operation-name": "untagKycDocuments",
        "description": "Untags a list of KYC documents.\n\nIf a KYC document in the list does not have the specified tag applied, the KYC document is ignored.\nThis is an asynchronous operation.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "kycDocumentIds"
                ],
                "properties": {
                  "kycDocumentIds": {
                    "description": "List of KYC document IDs.",
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 1000,
                    "items": {
                      "type": "string",
                      "example": "kyc_doc_0YV7JHY705C6DA487BFTAA33V8"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "KYC documents untagging process has been scheduled.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/tags/{tag}/kyc-documents/{kycDocumentId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/tag"
        },
        {
          "$ref": "#/components/parameters/kycDocumentId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Tag a KYC document",
        "operationId": "PostTagKycDocument",
        "x-sdk-operation-name": "tagKycDocument",
        "description": "Tags a KYC document.",
        "responses": {
          "204": {
            "description": "KYC document tagged.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Untag a KYC document",
        "operationId": "DeleteTagKycDocument",
        "x-sdk-operation-name": "untagKycDocument",
        "description": "Untags a KYC document.",
        "responses": {
          "204": {
            "description": "KYC document untagged.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/tags/{tag}/aml-checks": {
      "parameters": [
        {
          "$ref": "#/components/parameters/tag"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Tag a list of AML checks",
        "operationId": "PostTagAmlCheckCollection",
        "x-sdk-operation-name": "tagAmlChecks",
        "description": "Tags a list of AML checks.\n\nIf an AML check in the list already has the specified tag applied, the AML check is ignored.\nThis is an asynchronous operation.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "amlCheckIds"
                ],
                "properties": {
                  "amlCheckIds": {
                    "description": "List of AML check IDs to tag.",
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 1000,
                    "items": {
                      "type": "string",
                      "example": "aml_chk_0YV8XJT2ZWDR398Q8NFEM7DEPM"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "AML checks tagging process has been scheduled.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Untag a list of AML checks",
        "operationId": "DeleteTagAmlCheckCollection",
        "x-sdk-operation-name": "untagAmlChecks",
        "description": "Untags a list of AML checks.\n\nIf an AML check in the list does not have the specified tag applied, the AML check is ignored.\nThis is an asynchronous operation.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "amlCheckIds"
                ],
                "properties": {
                  "amlCheckIds": {
                    "description": "List of AML check IDs to tag.",
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 1000,
                    "items": {
                      "type": "string",
                      "example": "aml_chk_0YV8XJT2ZWDR398Q8NFEM7DEPM"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "AML checks untagging process has been scheduled.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/tags/{tag}/aml-checks/{amlCheckId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/tag"
        },
        {
          "name": "amlCheckId",
          "in": "path",
          "description": "ID of the AML check to tag.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Tag an AML check",
        "operationId": "PostTagAmlCheck",
        "x-sdk-operation-name": "tagAmlCheck",
        "description": "Tags an AML check.\n\nIf an AML check in the list does not have the specified tag applied, the AML check is ignored.",
        "responses": {
          "204": {
            "description": "AML check tagged.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Untag an AML check",
        "operationId": "DeleteTagAmlCheck",
        "x-sdk-operation-name": "untagAmlCheck",
        "description": "Untags an AML check.\n\nIf an AML check in the list does not have the specified tag applied, the AML check is ignored.",
        "responses": {
          "204": {
            "description": "AML check untagged.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/tokens": {
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment tokens"
        ],
        "summary": "Create a payment token",
        "operationId": "PostToken",
        "x-sdk-operation-name": "create",
        "x-sdk-resource": "PaymentTokens",
        "description": "Creates a payment token which can be exchanged into a payment instrument.\n[FramePay](https://docs.rebilly.com/docs/developer-docs/framepay/) is the recommended way to create a payment token because it minimizes PCI DSS compliance.\nOnce a payment token is created, it can only be used once.\n\nA payment token expires upon first use or within 30 minutes of the token creation, whichever comes first.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CompositeToken"
              }
            }
          },
          "description": "Payment token resource.",
          "required": true
        },
        "security": [
          {
            "PublishableApiKey": []
          },
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          }
        ],
        "responses": {
          "201": {
            "description": "Token created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompositeToken"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$paymentCardTokenForm = new Rebilly\\Entities\\PaymentCardToken();\n$paymentCardTokenForm->setBillingAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n]);\n\n$paymentInstrumentForm = new Entities\\PaymentInstruments\\PaymentCardPaymentInstrument();\n$paymentInstrumentForm->setPan('4111111111111111');\n$paymentInstrumentForm->setExpYear(2025);\n$paymentInstrumentForm->setExpMonth(8);\n$paymentInstrumentForm->setCvv(123);\n\n$paymentCardTokenForm->setPaymentInstrument($paymentInstrumentForm);\n\ntry {\n    $paymentCardToken = $client->paymentCardTokens()->create($paymentCardTokenForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new payment token\nconst data = {\n    method: 'payment-card',\n    paymentInstrument: {\n        pan: '4111111111111111',\n        expYear: 2022,\n        expMonth: 12,\n        cvv: '123'\n    },\n    billingAddress: {\n      firstName: 'Johnny',\n      lastName: 'Brown',\n      emails: [{\n          label: 'main',\n          value: 'johnny+test@grr.la',\n          primary: true\n      }]\n    }\n};\n\nconst token = await api.paymentTokens.create({data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$paymentCardTokenForm = new \\Rebilly\\Sdk\\Model\\PaymentCardToken();\n$paymentCardTokenForm->setBillingAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n]);\n\n$paymentInstrumentForm = new \\Rebilly\\Sdk\\Model\\PaymentCardTokenPaymentInstrument();\n$paymentInstrumentForm->setPan('4111111111111111');\n$paymentInstrumentForm->setExpYear(2025);\n$paymentInstrumentForm->setExpMonth(8);\n$paymentInstrumentForm->setCvv('123');\n\n$paymentCardTokenForm->setPaymentInstrument($paymentInstrumentForm);\n\ntry {\n    $paymentCardToken = $service->paymentTokens()->create($paymentCardTokenForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment tokens"
        ],
        "summary": "Retrieve tokens",
        "operationId": "GetTokenCollection",
        "x-sdk-operation-name": "getAll",
        "x-sdk-resource": "PaymentTokens",
        "description": "Retrieve a list of tokens.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "List of tokens retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/CompositeToken"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$paymentCardTokens = $client->paymentCardTokens()->search([\n    'filter' => 'token:string',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.paymentTokens.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100};\nconst secondCollection = await api.paymentTokens.getAll(params);\n\n// access the collection items, each item is a Token\nsecondCollection.items.forEach(paymentToken => console.log(paymentToken.fields.id));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$paymentCardTokensPaginator = $service->paymentTokens()->getAllPaginator(limit: 5);\nforeach ($paymentCardTokensPaginator as $paymentCardTokensPage) {\n    printf(\"Payment card tokens page %d/%d\\n\", $paymentCardTokensPaginator->key() + 1, $paymentCardTokensPaginator->count());\n    foreach ($paymentCardTokensPage as $paymentCardToken) {\n        printf(\"Payment card token #%s\\n\", $paymentCardToken->getId());\n    }\n}\n\n// OR\n\n$paymentCardTokens = $service->paymentTokens()->getAll();\nforeach ($paymentCardTokens as $paymentCardToken) {\n    printf(\"Payment card token #%s\\n\", $paymentCardToken->getId());\n}"
          }
        ]
      }
    },
    "/tokens/{token}": {
      "parameters": [
        {
          "name": "token",
          "in": "path",
          "description": "ID of the token.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment tokens"
        ],
        "summary": "Retrieve a token",
        "operationId": "GetToken",
        "x-sdk-operation-name": "get",
        "x-sdk-resource": "PaymentTokens",
        "description": "Retrieves a token with a specified ID.",
        "security": [
          {
            "PublishableApiKey": []
          }
        ],
        "responses": {
          "200": {
            "description": "Token retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CompositeToken"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$paymentCardToken = $client->paymentCardTokens()->load('tokenId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const paymentToken = await api.paymentTokens.get({id: 'foobar-001'});\nconsole.log(paymentToken.fields.method);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$paymentCardToken = $service->paymentTokens()->get('tokenId');"
          }
        ]
      }
    },
    "/digital-wallets/validation": {
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment tokens"
        ],
        "summary": "Validate a digital wallet session",
        "operationId": "PostDigitalWalletValidation",
        "x-sdk-operation-name": "validate",
        "description": "Validates a digital wallet session.\n\nWe recommend using [FramePay](https://docs.rebilly.com/docs/developer-docs/framepay/) to validate a digital wallet session.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalWalletValidation"
              }
            }
          },
          "description": "Digital wallet validation request.",
          "required": true
        },
        "security": [
          {
            "PublishableApiKey": []
          },
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          }
        ],
        "responses": {
          "201": {
            "description": "Digital wallet validation complete.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DigitalWalletValidation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/transactions": {
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Create a transaction",
        "operationId": "PostTransaction",
        "x-sdk-operation-name": "create",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Creates a transaction of type `sale`, `authorize` or `setup`.\n\nUse this operation for the following transactions.\n\n#### Real-time decision and response\n\nIn this transaction, you send a request and inspect the `result` of the response for `approved` or `declined`.\n\n#### User approval/interaction required\n\nIn this transaction, user approval is required to complete the transaction.\nUser approval generally requires the user to interact with a third party,\nand is common in many transactions for alternative methods.\nFor example, PayPal requires user permission to complete a payment or to accept a billing agreement.\nPayment cards may also require user approval for 3D secure authentication.\n\nIf approval is required, you receive a response with a `result` value of `unknown` and a `status` value of `waiting-approval`.\nThe `_links` property of the response has a link for the `approvalUrl`.\nOpen the `approvalUrl` in an iframe or in a pop. A pop is a better workflow for mobile devices.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionRequest"
        },
        "responses": {
          "201": {
            "description": "Transaction created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$transactionForm = new Rebilly\\Entities\\Transaction();\n$transactionForm->setType('sale');\n$transactionForm->setCustomerId('customerId');\n$transactionForm->setWebsiteId('websiteId');\n$transactionForm->setCurrency('USD');\n$transactionForm->setAmount(1);\n\n$paymentInstruction = new Rebilly\\Entities\\Transactions\\PaymentInstructions\\PaymentTokenInstruction();\n$paymentInstruction->setToken('payment-token');\n$transactionForm->setPaymentInstruction($paymentInstruction);\n\n$transactionForm->setBillingAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n    'dob' => '2000-06-01',\n]);\n\ntry {\n    $transaction = $client->transactions()->create($transactionForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new transaction\nconst data = {\n    customerId: 'foobar-0001',\n    type: 'sale',\n    websiteId: 'my-main-website',\n    paymentInstrument: {\n        method: 'payment-card',\n        paymentCardId: 'my-payment-card-id',\n        gatewayAccountId: 'my-gateway-account-id'\n    },\n    currency: 'USD',\n    amount: 12.99,\n    description: 'manual transaction',\n};\n\nconst transaction = await api.transactions.create({data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$transactionForm = new \\Rebilly\\Sdk\\Model\\PostTransactionRequest([\n    'type' => 'sale',\n    'amount' => 1,\n]);\n$transactionForm->setCustomerId('customerId');\n$transactionForm->setWebsiteId('websiteId');\n$transactionForm->setCurrency('USD');\n\n$paymentInstruction = new \\Rebilly\\Sdk\\Model\\PaymentInstructionToken();\n$paymentInstruction->setToken('payment-token');\n$transactionForm->setPaymentInstruction($paymentInstruction);\n\n$transactionForm->setBillingAddress([\n    'firstName' => 'John',\n    'lastName' => 'Doe',\n    'organization' => 'Test LTD',\n    'address' => 'Test street 5',\n    'address2' => 'Test house 5',\n    'city' => 'New York',\n    'region' => 'Long Island',\n    'country' => 'US',\n    'postalCode' => '123456',\n    'emails' => [\n        [\n            'label' => 'main',\n            'value' => 'johndoe@testemail.com',\n            'primary' => true,\n        ],\n        [\n            'label' => 'secondary',\n            'value' => 'otheremail@testemail.com',\n        ],\n    ],\n    'phoneNumbers' => [\n        [\n            'label' => 'work',\n            'value' => '+123456789',\n            'primary' => true,\n        ],\n        [\n            'label' => 'home',\n            'value' => '+9874654321',\n        ],\n    ],\n    'dob' => '2000-06-01',\n]);\n\ntry {\n    $transaction = $service->transactions()->create($transactionForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Retrieve transactions",
        "operationId": "GetTransactionCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a list of transactions.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of transactions retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Transaction"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$transactions = $client->transactions()->search([\n    'filter' => 'result:approved',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.transactions.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.transactions.getAll(params);\n\n// access the collection items, each item is a Transaction\nsecondCollection.items.forEach(transaction => console.log(transaction.fields.type));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$transactionsPaginator = $service->transactions()->getAllPaginator(limit: 5, filter: 'result:approved');\nforeach ($transactionsPaginator as $transactionsPage) {\n    printf(\"Transactions page %d/%d\\n\", $transactionsPaginator->key() + 1, $transactionsPaginator->count());\n    foreach ($transactionsPage as $transaction) {\n        printf(\"Transaction #%s (%s): %s\\n\", $transaction->getId(), $transaction->getStatus(), $transaction->getDescription());\n    }\n}\n\n// OR\n\n$transactions = $service->transactions()->getAll(filter: 'result:approved');\nforeach ($transactions as $transaction) {\n    printf(\"Transaction #%s (%s): %s\\n\", $transaction->getId(), $transaction->getStatus(), $transaction->getDescription());\n}"
          }
        ]
      }
    },
    "/transactions/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Retrieve a transaction",
        "operationId": "GetTransaction",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a transaction with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Transaction retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$transaction = $client->transactions()->load('transactionId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const transaction = await api.transactions.get({id: 'foobar-001'});\nconsole.log(transaction.fields.billingAddress.firstName);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$transaction = $service->transactions()->get('transactionId');"
          }
        ]
      },
      "patch": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Update a transaction",
        "operationId": "PatchTransaction",
        "x-sdk-operation-name": "patch",
        "description": "Updates the custom fields of a transaction with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PatchTransactionRequest"
        },
        "responses": {
          "200": {
            "description": "Transaction updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "try {\n    $transaction = $client->transactions()->patch($transactionId, $data);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the custom fields to update for the transaction\nconst data = {\n    customFields: {\n        'myCustomField': 'myCustomData',\n        'myOtherField': 'myOtherData',        \n    }\n};\n\nconst transaction = await api.transactions.patch({id: 'my-transaction-id', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$transactionForm = new \\Rebilly\\Sdk\\Model\\PatchTransactionRequest();\n$transactionForm->setCustomFields([\n    [\n        'name' => 'customField',\n        'value' => 'customValue',\n    ],\n]);\n\ntry {\n    $transaction = $service->transactions()->patch('transactionId', $transactionForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/payouts": {
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Create a credit transaction",
        "operationId": "PostPayout",
        "x-sdk-operation-name": "create",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Creates a transaction of type `credit`.",
        "requestBody": {
          "$ref": "#/components/requestBodies/CreditTransactionRequest"
        },
        "responses": {
          "201": {
            "description": "Transaction created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/transactions/{id}/query": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Query a transaction",
        "operationId": "PostTransactionQuery",
        "x-sdk-operation-name": "query",
        "description": "Queries a transaction with a specified ID.\n\nThe query interacts with the related gateway account to obtain the result, amount, and currency.\nIf after analysis, the transaction must be updated, see [Update a transaction status](../PostTransactionUpdate).",
        "responses": {
          "201": {
            "description": "Transaction queried.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionQuery"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/transactions/{id}/update": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Update a transaction status",
        "operationId": "PostTransactionUpdate",
        "x-sdk-operation-name": "update",
        "description": "Updates the status of a transaction with a specified ID to `completed`,\nwith a specified `result` and optional currency and amount values.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionUpdate"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Transaction updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/transactions/{id}/refund": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Refund a transaction",
        "operationId": "PostTransactionRefund",
        "x-sdk-operation-name": "refund",
        "description": "Refunds a transaction with a specified ID.\n\nThe refund is in the same currency as the original transaction.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionRefund"
              }
            }
          },
          "description": "Transaction resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Transaction refunded.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$transaction = $client->transactions()->refund('transactionId', 1.99);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// define the refund amount\nconst data = {\n    amount: 12.99\n};\n\nconst refund = await api.transactions.switch({id: 'my-transaction-id', data});\nconsole.log(refund.fields.status);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$transactionRefund = new \\Rebilly\\Sdk\\Model\\TransactionRefund();\n$transactionRefund->setAmount(1.99);\n\n$transaction = $service->transactions()->refund('transactionId', $transactionRefund);"
          }
        ]
      }
    },
    "/transactions/{id}/timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions timeline"
        ],
        "summary": "Retrieve transaction timeline messages",
        "operationId": "GetTransactionTimelineCollection",
        "x-sdk-operation-name": "getAllTimelineMessages",
        "description": "Retrieves a list of transaction timeline messages.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of transaction timeline messages retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TransactionTimeline"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional except for the `id`\nconst firstCollection = await api.transactions\n    .getAllTimelineMessages({id: 'my-transaction'});\n\n// alternatively you can specify one or more of them\nconst params = {id: 'my-transaction', limit: 20, offset: 100};\nconst secondCollection = await api.transactions.getAllTimelineMessages(params);\n\n// access the collection items, each item is a TransactionTimeline\nsecondCollection.items\n    .forEach(message => console.log(message.fields.eventType));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions timeline"
        ],
        "summary": "Create a transaction timeline comment",
        "operationId": "PostTransactionTimeline",
        "x-sdk-operation-name": "createTimelineComment",
        "description": "Creates a transaction timeline comment.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransactionTimeline"
              }
            }
          },
          "description": "Transaction timeline resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Transaction timeline comment created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// Create a comment\nconst firstComment = await api\n    .transactions.createTimelineComment({id: 'my-transaction-id', data: {message: 'Your comment here'}});\n\n// Using params object, mentions and references\nconst message = `Example of mentions @user@mydomain.com and references #transactions-transaction-id`;\nconst params = {\n    id: 'my-transaction-id',\n    data: {\n        message,\n    },\n};\nconst secondComment = await api.transactions.createTimelineComment(params);"
          }
        ]
      }
    },
    "/transactions/{id}/timeline/{messageId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "messageId",
          "in": "path",
          "description": "ID of the transaction timeline message.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions timeline"
        ],
        "summary": "Retrieve a transaction Timeline message",
        "operationId": "GetTransactionTimeline",
        "x-sdk-operation-name": "getTimelineMessage",
        "description": "Retrieves a timeline message with a specified ID.",
        "responses": {
          "200": {
            "description": "Timeline message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransactionTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const message = await api.transactions\n    .getTimelineMessage({id: 'foobar-001', messageId: 'message-202'});\nconsole.log(message.fields.eventType);"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions timeline"
        ],
        "summary": "Delete a transaction timeline message",
        "operationId": "DeleteTransactionTimeline",
        "x-sdk-operation-name": "deleteTimelineMessage",
        "description": "Deletes a transaction timeline message with a specified ID.",
        "responses": {
          "204": {
            "description": "Transaction timeline message deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const request = await api.transactions\n    .deleteTimelineMessage({id: 'foobar-001', messageId: 'message-202'});\n\n// the request does not return any fields but\n// you can confirm the success using the status code\nconsole.log(request.response.status); // 204"
          }
        ]
      }
    },
    "/fees": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Fees"
        ],
        "summary": "Retrieve fee entries",
        "description": "Retrieves a list of fee entries.\n\n> **Important:** This operation is experimental and may not be backward compatible.",
        "operationId": "GetFeeCollection",
        "x-sdk-operation-name": "getAll",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of fee entries retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Fee"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Fees"
        ],
        "summary": "Create a fee entry",
        "description": "Creates a fee entry.\n\n> **Important:** This operation is experimental and may not be backward compatible.",
        "operationId": "PostFee",
        "x-sdk-operation-name": "create",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Fee"
              },
              "examples": {
                "stripe-trx": {
                  "$ref": "#/components/examples/stripe-trx-request"
                },
                "stripe-us": {
                  "$ref": "#/components/examples/stripe-us-request"
                },
                "stripe-intl": {
                  "$ref": "#/components/examples/stripe-intl-request"
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Fee entry created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fee"
                },
                "examples": {
                  "stripe-trx": {
                    "$ref": "#/components/examples/stripe-trx-response"
                  },
                  "stripe-us": {
                    "$ref": "#/components/examples/stripe-us-response"
                  },
                  "stripe-intl": {
                    "$ref": "#/components/examples/stripe-intl-response"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/fees/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Fees"
        ],
        "summary": "Retrieve a fee entry",
        "description": "Retrieves a fee entry.\n\n> **Important:** This operation is experimental and may not be backward compatible.",
        "operationId": "GetFee",
        "x-sdk-operation-name": "get",
        "responses": {
          "200": {
            "description": "Fee retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fee"
                },
                "examples": {
                  "stripe-trx": {
                    "$ref": "#/components/examples/stripe-trx-response"
                  },
                  "stripe-us": {
                    "$ref": "#/components/examples/stripe-us-response"
                  },
                  "stripe-intl": {
                    "$ref": "#/components/examples/stripe-intl-response"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Fees"
        ],
        "summary": "Upsert a fee entry",
        "description": "Creates or updates (upserts) a fee entry.\n\n> **Important:** This operation is experimental and may not be backward compatible.",
        "operationId": "PutFee",
        "x-sdk-operation-name": "upsert",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Fee"
              },
              "examples": {
                "stripe-trx": {
                  "$ref": "#/components/examples/stripe-trx-request"
                },
                "stripe-us": {
                  "$ref": "#/components/examples/stripe-us-request"
                },
                "stripe-intl": {
                  "$ref": "#/components/examples/stripe-intl-request"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Fee entry updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fee"
                },
                "examples": {
                  "stripe-trx": {
                    "$ref": "#/components/examples/stripe-trx-response"
                  },
                  "stripe-us": {
                    "$ref": "#/components/examples/stripe-us-response"
                  },
                  "stripe-intl": {
                    "$ref": "#/components/examples/stripe-intl-response"
                  }
                }
              }
            }
          },
          "201": {
            "description": "Fee entry created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fee"
                },
                "examples": {
                  "stripe-trx": {
                    "$ref": "#/components/examples/stripe-trx-response"
                  },
                  "stripe-us": {
                    "$ref": "#/components/examples/stripe-us-response"
                  },
                  "stripe-intl": {
                    "$ref": "#/components/examples/stripe-intl-response"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Fees"
        ],
        "summary": "Patch a fee entry",
        "description": "Patches a fee entry.\n\n> **Important:** This operation is experimental and may not be backward compatible.",
        "operationId": "PatchFee",
        "x-sdk-operation-name": "patch",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PatchFee"
              },
              "examples": {
                "stripe-trx": {
                  "$ref": "#/components/examples/stripe-trx-request"
                },
                "stripe-us": {
                  "$ref": "#/components/examples/stripe-us-request"
                },
                "stripe-intl": {
                  "$ref": "#/components/examples/stripe-intl-request"
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Fee entry patched.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Fee"
                },
                "examples": {
                  "stripe-trx": {
                    "$ref": "#/components/examples/stripe-trx-response"
                  },
                  "stripe-us": {
                    "$ref": "#/components/examples/stripe-us-response"
                  },
                  "stripe-intl": {
                    "$ref": "#/components/examples/stripe-intl-response"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Fees"
        ],
        "summary": "Delete a fee entry",
        "description": "Deletes a fee entry.\n\n> **Important:** This operation is experimental and may not be backward compatible.",
        "operationId": "DeleteFee",
        "x-sdk-operation-name": "delete",
        "responses": {
          "204": {
            "description": "Fee deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/api-keys/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/balance-transactions/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/billing-portals/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/broadcast-messages/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/deposit-requests": {
      "post": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Create a deposit request",
        "operationId": "PostDepositRequest",
        "x-sdk-operation-name": "create",
        "description": "Creates a deposit request.\nTo complete the deposit, the customer is redirected to the [deposit](/catalog/all/deposits/postdepositrequest#deposits/postdepositrequest/t=response&c=201&path=_links/href) link.\nAfter the deposit, the customer is redirected to the `redirectUrl`.\nCorresponding transaction webhooks are sent to webhooks subscribers.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostDepositRequest"
              }
            }
          },
          "description": "Deposit request resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Deposit request created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepositRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "get": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Retrieve deposit requests",
        "operationId": "GetDepositRequestCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of deposit requests.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of deposit requests retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DepositRequest"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/deposit-requests/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Retrieve a deposit request",
        "operationId": "GetDepositRequest",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a deposit request with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Deposit request retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepositRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/cashiers": {
      "post": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Cashiers"
        ],
        "summary": "Create a cashier",
        "operationId": "PostCashier",
        "x-sdk-operation-name": "create",
        "description": "Creates a cashier resource for a specific customer, website, and currency.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostCashier"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Cashier retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Cashier"
                }
              }
            }
          },
          "201": {
            "description": "Cashier created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Cashier"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/cashiers/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Cashiers"
        ],
        "summary": "Retrieve a cashier",
        "operationId": "GetCashier",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a cashier resource with a specified ID.",
        "responses": {
          "200": {
            "description": "Cashier retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Cashier"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/deposit-strategies": {
      "post": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Create a deposit amount strategy",
        "operationId": "PostDepositStrategy",
        "x-sdk-operation-name": "create",
        "description": "Creates a deposit amount strategy.\nUse deposit amount strategies to determine the amounts presented to customers in deposit forms, based on currency, customer segmentation (tags), or prior deposit behavior.\n\nSelection of deposit amount strategy:\n  - If more than one deposit amount strategy applies to a deposit request,\nthe deposit amount strategy with the greater `priority` value is applied.\n  - If the `strategyId` property is specified when a deposit request is created,\n  the specified deposit amount strategy is applied. All other deposit amount strategies are ignored.\n\nDefault behavior:\n  - If the `customAmount` property is not specified when a deposit request is created, amount restrictions are determined from the chosen deposit amount strategy.\n  - If the `amounts` property is not specified when a deposit request is created, amounts are determined from the chosen deposit amount strategy.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepositStrategy"
              }
            }
          },
          "description": "Deposit amount strategy resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Deposit amount strategy created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepositStrategy"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "get": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Retrieve deposit amount strategies",
        "operationId": "GetDepositStrategyCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of deposit amount strategies.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of deposit amount strategies retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DepositStrategy"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/deposit-strategies/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Retrieve a deposit amount strategy",
        "operationId": "GetDepositStrategy",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a deposit amount strategy with a specified ID.",
        "responses": {
          "200": {
            "description": "Deposit amount strategy retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepositStrategy"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Upsert a deposit amount strategy",
        "operationId": "PutDepositStrategy",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a deposit amount strategy with a specified ID.\n\nUse deposit amount strategies to determine the amounts presented to customers in deposit forms, based on currency, customer segmentation (tags), or prior deposit behavior.\n\nWhen more than one deposit amount strategy applies to a deposit request,\nthe deposit amount strategy with the greater `priority` value is applied.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepositStrategy"
              }
            }
          },
          "description": "Deposit amount strategy resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Deposit amount strategy updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepositStrategy"
                }
              }
            }
          },
          "201": {
            "description": "Deposit amount strategy created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepositStrategy"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Delete a deposit amount strategy",
        "operationId": "DeleteDepositStrategy",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a deposit amount strategy with a specified ID.",
        "responses": {
          "204": {
            "description": "Deposit amount strategy deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/deposit-custom-property-sets": {
      "post": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Create a custom deposit property set",
        "operationId": "PostDepositCustomPropertySet",
        "x-sdk-operation-name": "create",
        "description": "Creates a custom deposit property set.\nA custom property set is a JSON-schema to extend the request form with extra form fields.\nThe collected information is stored at the deposit request.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepositCustomPropertySet"
              }
            }
          },
          "description": "Custom deposit property set resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Custom deposit property set created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepositCustomPropertySet"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "get": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Retrieve custom deposit properties sets",
        "operationId": "GetDepositCustomPropertySetCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of custom deposit property sets.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of custom deposit property sets retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/DepositCustomPropertySet"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/deposit-custom-property-sets/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Retrieve a custom deposit property set",
        "operationId": "GetDepositCustomPropertySet",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a custom deposit property set with a specified ID.",
        "responses": {
          "200": {
            "description": "Custom deposit property set retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepositCustomPropertySet"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Upsert a custom deposit property set",
        "operationId": "PutDepositCustomPropertySet",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a custom deposit property set with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DepositCustomPropertySet"
              }
            }
          },
          "description": "Custom deposit property set resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Custom deposit property updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepositCustomPropertySet"
                }
              }
            }
          },
          "201": {
            "description": "Custom deposit property set created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepositCustomPropertySet"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Deposits"
        ],
        "summary": "Delete a custom deposit property set",
        "operationId": "DeleteDepositCustomPropertySet",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a custom deposit property set with a specified ID.",
        "responses": {
          "204": {
            "description": "Custom deposit property set deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/checkout-forms/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/service-credentials/{type}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/credentialType"
        }
      ]
    },
    "/service-credentials/{type}/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/credentialType"
        },
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/service-credentials/{type}/{id}/items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/credentialType"
        },
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/custom-domains/{domain}": {
      "parameters": [
        {
          "name": "domain",
          "in": "path",
          "description": "Resource domain.",
          "required": true,
          "schema": {
            "type": "string",
            "maxLength": 255,
            "pattern": "^[@~\\-\\.\\w]+$"
          }
        }
      ]
    },
    "/email-delivery-setting-verifications/{token}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/token"
        }
      ]
    },
    "/email-delivery-settings/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/email-delivery-settings/{id}/resend-email-verification": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/email-messages/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/events/{eventType}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ]
    },
    "/events/{eventType}/rules": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ]
    },
    "/events/{eventType}/timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ]
    },
    "/events/{eventType}/timeline/{messageId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        },
        {
          "name": "messageId",
          "in": "path",
          "description": "ID of the rules engine timeline message.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/events/{eventType}/rules/history": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ]
    },
    "/events/{eventType}/rules/history/{version}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        },
        {
          "$ref": "#/components/parameters/rulesVersion"
        }
      ]
    },
    "/events/{eventType}/rules/versions/{version}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        },
        {
          "$ref": "#/components/parameters/rulesVersion"
        }
      ]
    },
    "/events/{eventType}/rules/drafts": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ]
    },
    "/events/{eventType}/rules/drafts/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        },
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/forgot-password": {
      "servers": [
        {
          "url": "https://api-sandbox.rebilly.com",
          "description": "Sandbox server"
        },
        {
          "url": "https://api.rebilly.com",
          "description": "Live server"
        }
      ]
    },
    "/gateway-accounts/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/gateway-accounts/{id}/close": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/gateway-accounts/{id}/disable": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/gateway-accounts/{id}/downtime-schedules": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/gateway-accounts/{id}/downtime-schedules/{downtimeId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "downtimeId",
          "in": "path",
          "description": "ID of the gateway account downtime.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/gateway-accounts/{id}/enable": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/gateway-accounts/{id}/limits": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/gateway-accounts/{id}/limits/{limitId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "limitId",
          "in": "path",
          "description": "ID of the gateway account limit.",
          "required": true,
          "schema": {
            "type": "string",
            "enum": [
              "daily-money",
              "monthly-money",
              "daily-count",
              "monthly-count"
            ]
          }
        }
      ]
    },
    "/gateway-accounts/{id}/timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/gateway-accounts/{id}/timeline/{messageId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "messageId",
          "in": "path",
          "description": "ID of the gateway account timeline message.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/gateway-accounts/{id}/check-credentials": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/gateway-accounts/{id}/financial-settings": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/grid-segments/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/integrations/{label}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/integrationLabel"
        }
      ]
    },
    "/lists/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/lists/{id}/{version}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "version",
          "in": "path",
          "required": true,
          "description": "Version of the list.",
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        }
      ]
    },
    "/memberships/{organizationId}/{userId}": {
      "parameters": [
        {
          "name": "organizationId",
          "in": "path",
          "required": true,
          "description": "Unique organization identifier.\nAn organization is an entity that represents a company.\nFor more information, see [Obtain an organization ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).",
          "schema": {
            "$ref": "#/components/schemas/ResourceId"
          }
        },
        {
          "name": "userId",
          "in": "path",
          "required": true,
          "description": "ID of the user.",
          "schema": {
            "$ref": "#/components/schemas/ResourceId"
          }
        }
      ]
    },
    "/organizations/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/payment-methods": {
      "servers": [
        {
          "url": "https://api-sandbox.rebilly.com",
          "description": "Sandbox server"
        },
        {
          "url": "https://api.rebilly.com",
          "description": "Live server"
        }
      ]
    },
    "/payment-methods/{apiName}": {
      "servers": [
        {
          "url": "https://api-sandbox.rebilly.com",
          "description": "Sandbox server"
        },
        {
          "url": "https://api.rebilly.com",
          "description": "Live server"
        }
      ],
      "parameters": [
        {
          "name": "apiName",
          "in": "path",
          "description": "Name of the payment method API.",
          "required": true,
          "schema": {
            "description": "Name of the payment method returned in the API response.",
            "type": "string",
            "pattern": "^[\\w\\. -]+$"
          }
        }
      ]
    },
    "/payment-gateways-metadata/{apiName}": {
      "parameters": [
        {
          "name": "apiName",
          "in": "path",
          "description": "Payment gateway metadata API name.",
          "required": true,
          "schema": {
            "description": "Name of the payment gateway returned in the API response.",
            "type": "string",
            "pattern": "^[\\w\\. -]+$"
          }
        }
      ]
    },
    "/payout-requests": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Retrieve payout requests",
        "operationId": "GetPayoutRequestCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of payout requests.\n\nFilter by: `id`, `customerId`, `websiteId`, `batchId`, `status`, `blocked`, `blockReason`, `createdTime`, `updatedTime`.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of payout requests retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PayoutRequest"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Create a payout request",
        "operationId": "PostPayoutRequest",
        "x-sdk-operation-name": "create",
        "description": "Creates a payout request.\nIn the response, the `selectPaymentInstrumentUrl` field is used to redirect the customer to select a preferred payment instrument.\nAfter a payment instrument is selected, the customer is redirected to the `selectedPaymentInstrumentRedirectUrl` value.\n\n> **Important:** The selected payment gateway must be configured to support payout requests.\n> For more information, see the [readyToPayoutInstruction](https://www.rebilly.com/catalog/all/gateway-accounts/getgatewayaccountcollection#gateway-accounts/getgatewayaccountcollection/t=response&c=200&path=&d=0/readytopayoutinstruction) field.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayoutRequest"
              }
            }
          },
          "description": "Payout request resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Payout request created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-requests/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Retrieve a payout request",
        "operationId": "GetPayoutRequest",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a payout request with a specified ID.",
        "responses": {
          "200": {
            "description": "Payout request retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Upsert a payout request",
        "operationId": "PutPayoutRequest",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a payout request with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayoutRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Payout request updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequest"
                }
              }
            }
          },
          "201": {
            "description": "Payout request created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Update a payout request",
        "operationId": "PatchPayoutRequest",
        "x-sdk-operation-name": "patch",
        "description": "Updates a payout request with a specified ID. \nUse this operation to update the status, description, and blocked state.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PatchPayoutRequest"
        },
        "responses": {
          "200": {
            "description": "Payout request updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-requests-v2/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Retrieve a payout request (v2 temporary endpoint)",
        "operationId": "GetPayoutRequestV2",
        "x-sdk-operation-name": "getV2",
        "description": "Retrieves a payout request with a specified ID.",
        "deprecated": true,
        "responses": {
          "200": {
            "description": "Payout request retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequestV2"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/payout-requests/{id}/cancel": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Cancel a payout request",
        "operationId": "PostPayoutRequestCancellation",
        "x-sdk-operation-name": "cancel",
        "description": "Cancels a payout request with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayoutRequestCancellation"
              }
            }
          },
          "description": "Payout request resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Payout request canceled.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-requests/{id}/split": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Request a payout request split",
        "operationId": "PostPayoutRequestSplit",
        "x-sdk-operation-name": "split",
        "description": "Splits a pending payout request into two or more separate requests.\nProvide an array of at least two amounts; one new payout request is created per amount.\nThe sum of the amounts must equal the original payout request amount.\nThe original request transitions to the `split` status.\nThis operation returns the newly created payout requests.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayoutRequestSplit"
              }
            }
          },
          "description": "Payout request split parameters.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Payout requests created by the split operation.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PayoutRequestV2"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-requests/{id}/payment-instruments": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Retrieve associated payment instruments",
        "operationId": "GetPayoutRequestPaymentInstruments",
        "x-sdk-operation-name": "getPaymentInstruments",
        "description": "Retrieves the payment gateway and a list of payment instruments that are associated with a payout request with a specified ID.",
        "responses": {
          "200": {
            "description": "Payout request associated payment instruments retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "List of available payment instruments per an associated gateway to offer for the payout.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "paymentInstrumentId": {
                        "type": "string",
                        "description": "ID of the payment instrument to offer for the payout.",
                        "maxLength": 50,
                        "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
                      },
                      "gatewayName": {
                        "description": "Name of the payment gateway and payment instrument to use for the payout.\nThis field is empty if the requested payment instrument has not been used yet.",
                        "x-label": "Gateway account",
                        "x-basic": true,
                        "type": [
                          "string",
                          "null"
                        ],
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/GatewayName"
                          }
                        ]
                      },
                      "exposureAmount": {
                        "description": "Total amount of sales minus credit for the specified gateway and instrument.",
                        "type": "number",
                        "format": "double"
                      },
                      "previousAllocatedAmount": {
                        "description": "Total amount of allocated credit for the payout request for the specified gateway and instrument.",
                        "type": "number",
                        "format": "double"
                      },
                      "lastPaymentTime": {
                        "description": "Date and time when the last payment is created for the gateway and the payment instrument.\nPayments are the result of `sale` or `capture` transactions.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "format": "date-time"
                      },
                      "lastPayoutTime": {
                        "description": "Date and time when the last payout is created for the gateway and the payment instrument.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "format": "date-time"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/payout-requests-v2/{id}/payment-instruments": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Retrieve associated payment instruments",
        "operationId": "GetPayoutRequestV2PaymentInstruments",
        "x-sdk-operation-name": "getPaymentInstrumentsV2",
        "description": "Retrieves the payment gateway and a list of payment instruments that are associated with a payout request with a specified ID.",
        "responses": {
          "200": {
            "description": "Payout request associated payment instruments retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "description": "List of available payment instruments per an associated gateway to offer for the payout.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "paymentInstrumentId": {
                        "type": "string",
                        "description": "ID of the payment instrument to offer for the payout.",
                        "maxLength": 50,
                        "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
                      },
                      "gatewayName": {
                        "description": "Name of the payment gateway and payment instrument to use for the payout.\nThis field is empty if the requested payment instrument has not been used yet.",
                        "x-label": "Gateway account",
                        "x-basic": true,
                        "type": [
                          "string",
                          "null"
                        ],
                        "allOf": [
                          {
                            "$ref": "#/components/schemas/GatewayName"
                          }
                        ]
                      },
                      "gatewayAccountId": {
                        "description": "ID of the gateway account to use for processing this allocation.",
                        "type": "string",
                        "maxLength": 50,
                        "example": "gateway_0YVB8KPKNXCBR9EDX7JHSED75N"
                      },
                      "gatewayPayoutInstruction": {
                        "description": "Payout configuration for the gateway account.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "enum": [
                          "all",
                          "covered-payout",
                          "approved-payment",
                          "none"
                        ],
                        "example": "covered-payout"
                      },
                      "exposureAmount": {
                        "description": "Total amount of sales minus credit for the specified gateway and instrument.",
                        "type": "number",
                        "format": "double"
                      },
                      "previousAllocatedAmount": {
                        "description": "Total amount of allocated credit for the payout request for the specified gateway and instrument.",
                        "type": "number",
                        "format": "double"
                      },
                      "lastPaymentTime": {
                        "description": "Date and time when the last payment is created for the gateway and the payment instrument.\nPayments are the result of `sale` or `capture` transactions.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "format": "date-time"
                      },
                      "lastPayoutTime": {
                        "description": "Date and time when the last payout is created for the gateway and the payment instrument.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "format": "date-time"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/payout-requests/{id}/timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions timeline"
        ],
        "summary": "Retrieve payout request timeline messages",
        "operationId": "GetPayoutRequestTimelineCollection",
        "x-sdk-operation-name": "getAllTimelineMessages",
        "description": "Retrieves a list of payout request timeline messages.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of payout request timeline messages retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PayoutRequestTimelineMessage"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions timeline"
        ],
        "summary": "Create a payout request timeline comment",
        "operationId": "PostPayoutRequestTimeline",
        "x-sdk-operation-name": "createTimelineComment",
        "description": "Creates a payout request timeline comment.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PayoutRequestTimelineMessage"
              }
            }
          },
          "description": "Payout request timeline resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Payout request timeline comment created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequestTimelineMessage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-requests/{id}/timeline/{messageId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "messageId",
          "in": "path",
          "required": true,
          "schema": {
            "type": "string"
          },
          "description": "ID of the timeline message."
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions timeline"
        ],
        "summary": "Retrieve a payout request timeline message",
        "operationId": "GetPayoutRequestTimelineMessage",
        "x-sdk-operation-name": "getTimelineMessage",
        "description": "Retrieves a payout request timeline message with a specified ID.",
        "responses": {
          "200": {
            "description": "Payout request timeline message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequestTimelineMessage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions timeline"
        ],
        "summary": "Delete a payout request timeline message",
        "operationId": "DeletePayoutRequestTimelineMessage",
        "x-sdk-operation-name": "deleteTimelineMessage",
        "description": "Deletes a payout request timeline message with a specified ID.",
        "responses": {
          "204": {
            "description": "Payout request timeline message deleted."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-allocations": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Retrieve payout request allocations",
        "operationId": "GetPayoutRequestAllocationCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of payout request allocations.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of payout request allocations retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PayoutRequestAllocation"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Create a payout request allocation",
        "operationId": "PostPayoutRequestAllocation",
        "x-sdk-operation-name": "create",
        "description": "Creates an allocation for a payout request.\n\nWhen an allocation is created, the payout request transitions to the `in-progress` status,\nand the allocation starts in the `pending` status.\n\nThe allocation transitions to the `processing` status when payment processing begins.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "payoutRequestId": {
                    "type": "string",
                    "description": "ID of the payout request to allocate.",
                    "maxLength": 50,
                    "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
                  },
                  "paymentInstrumentId": {
                    "type": "string",
                    "description": "ID of the payment instrument to allocate.",
                    "maxLength": 50,
                    "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
                  },
                  "gatewayAccountId": {
                    "type": "string",
                    "description": "ID of the gateway account.",
                    "maxLength": 50,
                    "example": "gw_acc_0YVCXMF26DDNKAERE5NW727S34"
                  },
                  "amount": {
                    "type": "number",
                    "format": "double",
                    "description": "Amount to allocate to this payment instrument.",
                    "x-type": "Money"
                  }
                },
                "required": [
                  "payoutRequestId",
                  "paymentInstrumentId",
                  "gatewayAccountId",
                  "amount"
                ]
              }
            }
          },
          "description": "Payout request allocation resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Payout request allocation created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequestAllocation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-allocations/auto": {
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Create an automatic payout request allocation",
        "operationId": "PostPayoutRequestAutoAllocation",
        "x-sdk-operation-name": "autoAllocate",
        "description": "Creates an automatic payout request allocation using system-selected parameters.  \nOnly the payout request ID is required; all allocation details are determined automatically.\n\nWhen an allocation is created, the payout request transitions to the `in-progress` status,\nand the allocation starts in the `pending` status.\nThe allocation transitions to the `processing` status when payment processing begins.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "payoutRequestId": {
                    "type": "string",
                    "description": "ID of the payout request to allocate.",
                    "maxLength": 50,
                    "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
                  }
                },
                "required": [
                  "payoutRequestId"
                ]
              }
            }
          },
          "description": "Payout request allocation resource.",
          "required": true
        },
        "responses": {
          "204": {
            "description": "Payout request auto-allocation completed."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-allocations/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Retrieve a payout request allocation",
        "operationId": "GetPayoutRequestAllocation",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a payout request allocation with a specified ID.",
        "responses": {
          "200": {
            "description": "Payout request allocation retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequestAllocation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "patch": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Update allocation status",
        "operationId": "PatchPayoutRequestAllocation",
        "x-sdk-operation-name": "update",
        "description": "Updates the status of a payout request allocation with a specified ID.\n\nOnly the `processing` and `canceled` statuses can be set with this operation.\nThe `processing` status transitions an allocation from `pending` when payment processing begins.\nThe `canceled` status stops the allocation before it is processed.\n\nThe `completed` and `failed` statuses are set automatically during transaction processing.\nAllocations are always created in the `pending` status.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "status": {
                    "type": "string",
                    "description": "New status for the allocation.\nUse `processing` to move an allocation from `pending` to `processing`,\nwhich begins payment processing.\nUse `canceled` to stop the allocation before it is processed.",
                    "enum": [
                      "processing",
                      "canceled"
                    ],
                    "example": "processing"
                  }
                },
                "required": [
                  "status"
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Payout request allocation updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequestAllocation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-allocations/process": {
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Initiate processing of allocations",
        "operationId": "PostPayoutRequestAllocationsProcess",
        "x-sdk-operation-name": "process",
        "description": "Initiates the processing of one or more payout request allocations.\n\nOnly allocations with status `pending` are processed.\nEach allocation is processed by creating a transaction.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "allocationIds"
                ],
                "properties": {
                  "allocationIds": {
                    "description": "Array of allocation IDs to process.",
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 1000,
                    "items": {
                      "type": "string",
                      "maxLength": 50,
                      "example": "pra_0YVDMDE2BMC6KBB5MX76RF6T80"
                    }
                  }
                }
              }
            }
          },
          "description": "Allocation processing options.",
          "required": true
        },
        "responses": {
          "204": {
            "description": "Allocation processing has been initiated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-batches": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Retrieve payout request batches",
        "operationId": "GetPayoutRequestBatchCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of payout request batches.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of payout request batches retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PayoutRequestBatch"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Create a payout request batch",
        "operationId": "PostPayoutRequestBatch",
        "x-sdk-operation-name": "create",
        "description": "Creates a batch of payout requests for batch processing.\n\nThe batch links multiple payout requests together so they can be auto-allocated and processed together.\nEach payout request can be assigned to only one batch.\nIf any of the specified payout requests are already included in another batch, a `409 Conflict error` is returned.\n\nBoth approaches are limited to a maximum of 1000 payout requests per batch.\n\nTwo mutually exclusive approaches are supported:\n- **Explicit IDs**: Provide an array of payout request IDs in the `payoutRequestIds` field.\n- **Filter-based**: Provide a `filter` string to select payout requests that match the specified criteria at execution time.\n  Payout requests that are already included in a batch are automatically excluded from the filter results.\n  If more than 1000 payout requests match the filter, only the oldest 1000 are included in the batch, sorted by creation time.\n  To view the number of matching items before creating the batch, use the [Preview payout request batch filter results](../GetPayoutRequestBatchPreview) operation.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "title": "Explicit IDs",
                    "required": [
                      "payoutRequestIds"
                    ],
                    "properties": {
                      "payoutRequestIds": {
                        "description": "Array of payout request IDs to include in the batch.",
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 1000,
                        "items": {
                          "type": "string",
                          "maxLength": 50,
                          "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
                        }
                      },
                      "description": {
                        "description": "Optional description of the batch.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "maxLength": 255,
                        "example": "Batch processed on 2024-01-15"
                      }
                    }
                  },
                  {
                    "title": "Filter-based",
                    "required": [
                      "filter"
                    ],
                    "properties": {
                      "filter": {
                        "description": "Filter string that is used to select payout requests.\nThis field uses the same format as collection filter parameters.\nUse semicolons to separate multiple filter conditions.\n\nAvailable filter fields: `id`, `status`, `websiteId`, `customerId`, `currency`, `amount`, `createdTime`, `updatedTime`.\n\nIf a `batchId` filter is provided, it is ignored.\nPayout requests that are already included in a batch are always excluded from the results.\n\nIf more than 1000 payout requests match the filter, only the oldest 1000 are included in the batch, sorted by creation time.",
                        "type": "string",
                        "example": "status:pending;websiteId:ws_0YVDMDE2BMC6KBB5MX76RF6T80"
                      },
                      "description": {
                        "description": "Optional description of the batch.",
                        "type": [
                          "string",
                          "null"
                        ],
                        "maxLength": 255,
                        "example": "Pending payout requests batch - 2024-01-15"
                      }
                    }
                  }
                ]
              }
            }
          },
          "description": "Resource for the payout request batch.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Payout request batch created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequestBatch"
                }
              }
            }
          },
          "400": {
            "description": "Invalid filter provided or no payout requests match the filter.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "description": "One or more payout requests are already included in another batch.",
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-batches/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Retrieve a payout request batch",
        "operationId": "GetPayoutRequestBatch",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a payout request batch with a specified ID.",
        "responses": {
          "200": {
            "description": "Payout request batch retrieved.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequestBatch"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-batches/{id}/auto-allocate": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Allocate batch payout requests automatically",
        "operationId": "PostPayoutRequestBatchAutoAllocate",
        "x-sdk-operation-name": "autoAllocate",
        "description": "Creates allocations automatically for all payout requests in the batch using the auto-allocation algorithm.\n\nEach payout request is processed independently.",
        "responses": {
          "200": {
            "description": "Batch auto-allocation completed.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequestBatch"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-batches/{id}/approve": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Approve payout requests in a batch",
        "operationId": "PostPayoutRequestBatchApprove",
        "x-sdk-operation-name": "approve",
        "description": "Approves all payout requests in a specified batch.\n\nEach payout request is processed independently.\nOnly payout requests with a status of `ready` can be approved.",
        "responses": {
          "200": {
            "description": "Batch approval completed.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequestBatch"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-batches/{id}/block": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Block batch payout requests",
        "operationId": "PostPayoutRequestBatchBlock",
        "x-sdk-operation-name": "block",
        "description": "Blocks all payout requests in a specified batch.\n\nEach payout request is processed independently.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "reason"
                ],
                "properties": {
                  "reason": {
                    "$ref": "#/components/schemas/PayoutRequestBlockReason"
                  },
                  "description": {
                    "description": "Additional description for blocking the payout requests in the batch.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "maxLength": 255
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Batch blocking completed.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PayoutRequestBatch"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-batches/preview": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Preview payout request batch results",
        "operationId": "GetPayoutRequestBatchPreview",
        "x-sdk-operation-name": "preview",
        "description": "Retrieves aggregate information for the payout requests that match a specified filter.\n\nIf more than 1000 payout requests match the filter, only the oldest 1000 are included in the preview.",
        "parameters": [
          {
            "name": "filter",
            "in": "query",
            "description": "Filter string that is used to select payout requests.\nThis field uses the same format as collection filter parameters.\n\nUse semicolons to separate multiple filter conditions.\nAvailable filter fields: `id`, `status`, `websiteId`, `customerId`, `currency`, `amount`, `createdTime`, `updatedTime`.\n\nIf a `batchId` filter is provided, it is ignored.\nPayout requests that are already included in a batch are always excluded from the results.",
            "schema": {
              "type": "string",
              "example": "status:pending;websiteId:ws_0YVDMDE2BMC6KBB5MX76RF6T80"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Preview retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "properties": {
                    "matchingCount": {
                      "description": "Total number of matching payout requests, regardless of the preview limit.",
                      "type": "integer",
                      "minimum": 0,
                      "example": 42
                    },
                    "customerCount": {
                      "description": "Number of unique customers in the matching payout requests.",
                      "type": "integer",
                      "minimum": 0,
                      "example": 3
                    },
                    "totalAmountByCurrency": {
                      "description": "Total amount grouped by currency for matching payout requests.",
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "currency",
                          "amount"
                        ],
                        "properties": {
                          "currency": {
                            "$ref": "#/components/schemas/CurrencyCode"
                          },
                          "amount": {
                            "type": "number"
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "description": "Empty or invalid filter provided.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/previews/orders": {
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Preview an order",
        "operationId": "PostPreviewOrder",
        "x-sdk-operation-name": "order",
        "description": "Previews an order.\nUse this operation to preview a draft order before making an order.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderPreview"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Order preview retrieved.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderPreview"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/roles/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/send-through-attribution/{eventType}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ]
    },
    "/status": {
      "servers": [
        {
          "url": "https://api-sandbox.rebilly.com",
          "description": "Sandbox server"
        },
        {
          "url": "https://api.rebilly.com",
          "description": "Live server"
        }
      ]
    },
    "/tracking/api/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/tracking/taxes/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/tracking/webhooks/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/tracking/webhooks/{id}/resend": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/users/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/users/{id}/mfa": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/webhooks/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/websites/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/experimental/customers/{customerId}/summary-metrics": {
      "parameters": [
        {
          "name": "customerId",
          "in": "path",
          "required": true,
          "description": "ID of the customer.",
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/experimental/data-exports/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/organization-exports/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/experimental/reports/events-triggered/{eventType}/rules": {
      "parameters": [
        {
          "name": "eventType",
          "in": "path",
          "required": true,
          "description": "Type of system event.",
          "schema": {
            "$ref": "#/components/schemas/EventType"
          }
        }
      ]
    },
    "/experimental/subscriptions/{subscriptionId}/summary-metrics": {
      "parameters": [
        {
          "name": "subscriptionId",
          "in": "path",
          "required": true,
          "description": "ID of the subscription order.",
          "schema": {
            "type": "string"
          }
        }
      ]
    },
    "/storefront/account/reset-password/{token}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/token"
        }
      ]
    },
    "/storefront/account/verification/{token}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/token"
        }
      ]
    },
    "/storefront/billing-portals/{slug}": {
      "parameters": [
        {
          "name": "slug",
          "in": "path",
          "description": "Resource slug.",
          "required": true,
          "schema": {
            "type": "string",
            "maxLength": 100,
            "pattern": "^[@~\\-\\.\\w]+$"
          }
        }
      ]
    },
    "/storefront/deposit-strategies/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/deposit-requests/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/cashiers/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/cashiers/{id}/cancel-payout-requests": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/checkout-forms/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/custom-fields/{resource}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/storefrontCustomFieldResource"
        }
      ]
    },
    "/storefront/invoices/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/orders/{id}/upcoming-invoice": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/kyc-documents/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/kyc-requests/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/kyc-liveness-sessions/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/kyc-liveness-sessions/{id}/finish": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/orders/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/orders/{id}/cancellation": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/orders/{id}/pause": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/subscriptions/{id}/change-items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/payment-instruments/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/payment-instruments/{id}/deactivation": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/payment-instruments/{id}/setup": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/payout-requests/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/plans/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/products/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/quotes/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/quotes/{id}/accept": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/quotes/{id}/reject": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/transactions/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/transactions/{id}/dcc": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/storefront/transactions/{id}/{token}/continue": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "$ref": "#/components/parameters/token"
        }
      ]
    },
    "/storefront/transactions/{id}/{token}/bypass": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "$ref": "#/components/parameters/token"
        }
      ]
    },
    "/storefront/websites/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ]
    },
    "/customers/{id}/edd-score": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Retrieve a customer's EDD score",
        "operationId": "GetCustomerEddScore",
        "x-sdk-operation-name": "getCustomerEddScore",
        "description": "Retrieves an EDD score for a customer with a specified ID.",
        "responses": {
          "200": {
            "description": "EDD score retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Edd"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/customers/{id}/edd-timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers timeline"
        ],
        "summary": "Retrieve EDD timeline messages",
        "operationId": "GetCustomerEddTimelineCollection",
        "x-sdk-operation-name": "getEddTimelineCollection",
        "description": "Retrieves a list of EDD timeline messages.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of EDD timeline messages retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EddTimeline"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/customers/{id}/edd-timeline/{messageId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "messageId",
          "in": "path",
          "description": "ID of the EDD timeline message.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers timeline"
        ],
        "summary": "Retrieve an EDD timeline message",
        "operationId": "GetCustomerEddTimeline",
        "x-sdk-operation-name": "getEddTimelineMessage",
        "description": "Retrieves an EDD message with a specified ID.",
        "responses": {
          "200": {
            "description": "EDD timeline message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EddTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/customers/{id}/edd-search-results": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Retrieve customer EDD search results",
        "operationId": "GetCustomerEddSearchResultCollection",
        "x-sdk-operation-name": "getAllEddSearchResults",
        "description": "Retrieve EDD search results for a customer with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "EDD search results retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/EddSearchResult"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/customers/{id}/edd-search-results/{searchResultId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "searchResultId",
          "in": "path",
          "description": "ID of the EDD search result.",
          "required": true,
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-products": [
          "Full",
          "Risk Management",
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Retrieve a customer's EDD search result",
        "operationId": "GetCustomerEddSearchResult",
        "x-sdk-operation-name": "getEddSearchResult",
        "description": "Retrieves an EDD search result for a customer with a specified ID.",
        "responses": {
          "200": {
            "description": "EDD search result retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EddSearchResult"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/risk-score-rules": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Risk score"
        ],
        "summary": "Retrieve risk score rules",
        "operationId": "GetRiskScoreRules",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          }
        ],
        "description": "Retrieves risk score rules.",
        "responses": {
          "200": {
            "description": "Risk score rules retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskScoreRules"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Risk score"
        ],
        "summary": "Modify risk score rules",
        "operationId": "PutRiskScoreRules",
        "x-sdk-operation-name": "updateRiskScoreRules",
        "description": "Modifies risk score rules.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RiskScoreRules"
              }
            }
          },
          "description": "Risk score rules.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Risk score rules set.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskScoreRules"
                }
              }
            }
          },
          "201": {
            "description": "Risk score rules set.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskScoreRules"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/risk-score-rules/blocklists": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Risk score"
        ],
        "summary": "Retrieve risk score blocklist rules",
        "operationId": "GetRiskScoreBlocklistRules",
        "x-sdk-operation-name": "getAllBlocklistRules",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          }
        ],
        "description": "Retrieves risk score blocklist rules.",
        "responses": {
          "200": {
            "description": "Risk score blocklist rules retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskScoreBlocklist"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Risk score"
        ],
        "summary": "Modify risk score blocklist rules",
        "operationId": "PutRiskScoreBlocklistRules",
        "x-sdk-operation-name": "updateRiskScoreBlocklistRules",
        "description": "Modifies risk score blocklist rules.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RiskScoreBlocklist"
              }
            }
          },
          "description": "Risk score blocklist rules.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Risk score blocklist rules set.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskScoreBlocklist"
                }
              }
            }
          },
          "201": {
            "description": "Risk score blocklist rules set.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RiskScoreBlocklist"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/allowlists": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Allowlists"
        ],
        "summary": "Retrieve allowlist collection",
        "operationId": "GetAllowlistCollection",
        "x-sdk-operation-name": "getAllowlistCollection",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          }
        ],
        "description": "Retrieves allowlist collection.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Allowlist collection retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Allowlist"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Allowlists"
        ],
        "summary": "Create allowlist record",
        "operationId": "PostAllowlist",
        "x-sdk-operation-name": "storeAllowlist",
        "security": [
          {
            "PublishableApiKey": []
          }
        ],
        "description": "Creates allowlist record.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Allowlist"
              }
            }
          },
          "description": "Allowlist record.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Allowlist record created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Allowlist"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/allowlists/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Allowlists"
        ],
        "summary": "Retrieve allowlist record",
        "operationId": "GetAllowlist",
        "x-sdk-operation-name": "getAllowlist",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          }
        ],
        "description": "Retrieves allowlist record.",
        "responses": {
          "200": {
            "description": "Allowlist record retrieved.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Allowlist"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Allowlists"
        ],
        "summary": "Delete allowlist record",
        "operationId": "DeleteAllowlist",
        "x-sdk-operation-name": "delete",
        "description": "Deletes allowlist record with a specified ID.",
        "responses": {
          "204": {
            "description": "Allowlist record deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/tags-rules": {
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Retrieve tags rules list",
        "operationId": "GetTagRuleCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of tags rules.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of tags rules retrieved.",
            "headers": {
              "Pagination-Total": {
                "$ref": "#/components/headers/Pagination-Total"
              },
              "Pagination-Limit": {
                "$ref": "#/components/headers/Pagination-Limit"
              },
              "Pagination-Offset": {
                "$ref": "#/components/headers/Pagination-Offset"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TagUntagRule"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Create tags rule",
        "operationId": "PostTagRule",
        "x-sdk-operation-name": "create",
        "description": "Creates a tags rule.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagUntagRule"
              }
            }
          },
          "description": "Tags rule resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Tags rule created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagUntagRule"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/tags-rules/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Retrieve a tags rule",
        "operationId": "GetTagRule",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a tags rule with a specified ID.",
        "responses": {
          "200": {
            "description": "Tags rule retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagUntagRule"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Create a tags rule with specified ID",
        "operationId": "PutTagRule",
        "x-sdk-operation-name": "update",
        "description": "Creates a tags rule with a specified ID.",
        "responses": {
          "200": {
            "description": "Tags rule updated.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagUntagRule"
                }
              }
            }
          },
          "201": {
            "description": "Tags rule created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              },
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TagUntagRule"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TagUntagRule"
              }
            }
          },
          "description": "Tags rule resource.",
          "required": true
        }
      },
      "delete": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Tags"
        ],
        "summary": "Delete tags rule",
        "operationId": "DeleteTagRule",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a tags rule with a specified ID.",
        "responses": {
          "204": {
            "description": "Tags rule deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    }
  },
  "webhooks": {
    "aml-list-possibly-matched": {
      "post": {
        "summary": "AML list possibly matched",
        "operationId": "aml-list-possibly-matched",
        "x-products": [
          "Core"
        ],
        "tags": [
          "AML"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CustomerWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "coupon-application-removed": {
      "post": {
        "summary": "Coupon application removed",
        "operationId": "coupon-application-removed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CouponRedemptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "coupon-applied": {
      "post": {
        "summary": "Coupon applied",
        "operationId": "coupon-applied",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CouponRedemptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "coupon-expiration-modified": {
      "post": {
        "summary": "Coupon expiration modified",
        "operationId": "coupon-expiration-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CouponWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "coupon-expired": {
      "post": {
        "summary": "Coupon expired",
        "operationId": "coupon-expired",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CouponWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "coupon-issued": {
      "post": {
        "summary": "Coupon issued",
        "operationId": "coupon-issued",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CouponWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "coupon-modified": {
      "post": {
        "summary": "Coupon modified",
        "operationId": "coupon-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CouponWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "coupon-redeemed": {
      "post": {
        "summary": "Coupon redeemed",
        "operationId": "coupon-redeemed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CouponRedemptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "coupon-redemption-canceled": {
      "post": {
        "summary": "Coupon redemption canceled",
        "operationId": "coupon-redemption-canceled",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Coupons"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CouponRedemptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "credit-memo-applied": {
      "post": {
        "summary": "Credit memo applied",
        "operationId": "credit-memo-applied",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreditMemoWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "credit-memo-created": {
      "post": {
        "summary": "Credit memo created",
        "operationId": "credit-memo-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreditMemoWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "credit-memo-modified": {
      "post": {
        "summary": "Credit memo modified",
        "operationId": "credit-memo-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreditMemoWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "credit-memo-partially-applied": {
      "post": {
        "summary": "Credit memo partially applied",
        "operationId": "credit-memo-partially-applied",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreditMemoWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "credit-memo-voided": {
      "post": {
        "summary": "Credit memo voided",
        "operationId": "credit-memo-voided",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CreditMemoWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "customer-created": {
      "post": {
        "summary": "Customer created",
        "operationId": "customer-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CustomerWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "customer-merged": {
      "post": {
        "summary": "Customer merged",
        "operationId": "customer-merged",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/MergedCustomer"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "customer-one-time-password-requested": {
      "post": {
        "summary": "Customer one-time-password requested",
        "operationId": "customer-one-time-password-requested",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CustomerWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "customer-redirected-offsite": {
      "post": {
        "summary": "Customer redirected offsite",
        "operationId": "customer-redirected-offsite",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CustomerRedirect"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "customer-returned": {
      "post": {
        "summary": "Customer returned",
        "operationId": "customer-returned",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CustomerRedirect"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "customer-tax-number-validated": {
      "post": {
        "summary": "Customer tax number validated",
        "operationId": "customer-tax-number-validated",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CustomerTaxNumberValidated"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "customer-updated": {
      "post": {
        "summary": "Customer updated",
        "operationId": "customer-updated",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CustomerWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "dispute-created": {
      "post": {
        "summary": "Dispute created",
        "operationId": "dispute-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Disputes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/DisputeWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "dispute-modified": {
      "post": {
        "summary": "Dispute modified",
        "operationId": "dispute-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Disputes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/DisputeWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "experian-check-performed": {
      "post": {
        "summary": "Experian check performed",
        "operationId": "experian-check-performed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ExperianCheckPerformed"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "hard-usage-limit-reached": {
      "post": {
        "summary": "Hard usage limit reached",
        "operationId": "hard-usage-limit-reached",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UsageLimitWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-hard-usage-limit-reached": {
      "post": {
        "summary": "Hard usage limit reached",
        "operationId": "orders-experimental-hard-usage-limit-reached",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UsageLimitWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-tax-calculation-failed": {
      "post": {
        "summary": "Invoice tax calculation failed",
        "operationId": "invoice-tax-calculation-failed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceTaxCalculationFailed"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "gateway-account-requested": {
      "post": {
        "summary": "Gateway account requested",
        "operationId": "gateway-account-requested",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-abandoned": {
      "post": {
        "summary": "Invoice abandoned",
        "operationId": "invoice-abandoned",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-created": {
      "post": {
        "summary": "Invoice created",
        "operationId": "invoice-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-issued": {
      "post": {
        "summary": "Invoice issued",
        "operationId": "invoice-issued",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-modified": {
      "post": {
        "summary": "Invoice modified",
        "operationId": "invoice-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-paid": {
      "post": {
        "summary": "Invoice paid",
        "operationId": "invoice-paid",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-partially-paid": {
      "post": {
        "summary": "Invoice partially paid",
        "operationId": "invoice-partially-paid",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-refunded": {
      "post": {
        "summary": "Invoice refunded",
        "operationId": "invoice-refunded",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-partially-refunded": {
      "post": {
        "summary": "Invoice partially refunded",
        "operationId": "invoice-partially-refunded",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-past-due": {
      "post": {
        "summary": "Invoice past due",
        "operationId": "invoice-past-due",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-past-due-reminder": {
      "post": {
        "summary": "Invoice past due reminder",
        "operationId": "invoice-past-due-reminder",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-reissued": {
      "post": {
        "summary": "Invoice reissued",
        "operationId": "invoice-reissued",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "invoice-voided": {
      "post": {
        "summary": "Invoice voided",
        "operationId": "invoice-voided",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "kyc-document-accepted": {
      "post": {
        "summary": "KYC document accepted",
        "operationId": "kyc-document-accepted",
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/KycDocumentWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "kyc-document-created": {
      "post": {
        "summary": "KYC document created",
        "operationId": "kyc-document-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/KycDocumentWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "kyc-document-modified": {
      "post": {
        "summary": "KYC document modified",
        "operationId": "kyc-document-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/KycDocumentWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "kyc-document-rejected": {
      "post": {
        "summary": "KYC document rejected",
        "operationId": "kyc-document-rejected",
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/KycDocumentWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "kyc-document-reviewed": {
      "post": {
        "summary": "KYC document reviewed",
        "operationId": "kyc-document-reviewed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/KycDocumentWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "kyc-document-archived": {
      "post": {
        "summary": "KYC document archived",
        "operationId": "kyc-document-archived",
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/KycDocumentWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "kyc-request-attempted": {
      "post": {
        "summary": "KYC request attempted",
        "operationId": "kyc-request-attempted",
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/KycRequestWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "kyc-request-failed": {
      "post": {
        "summary": "KYC request failed",
        "operationId": "kyc-request-failed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/KycRequestWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "kyc-request-fulfilled": {
      "post": {
        "summary": "KYC request fulfilled",
        "operationId": "kyc-request-fulfilled",
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/KycRequestWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "kyc-request-partially-fulfilled": {
      "post": {
        "summary": "KYC request partially fulfilled",
        "operationId": "kyc-request-partially-fulfilled",
        "x-products": [
          "Core"
        ],
        "tags": [
          "KYC documents"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/KycRequestWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "lead-source-changed": {
      "post": {
        "summary": "Lead source changed",
        "operationId": "lead-source-changed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/CustomerWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "offsite-payment-completed": {
      "post": {
        "summary": "Offsite payment completed",
        "operationId": "offsite-payment-completed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "order-abandon-reminder": {
      "post": {
        "summary": "Order abandoned reminder",
        "operationId": "order-abandon-reminder",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/OrderAbandonReminderSent"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-order-abandon-reminder": {
      "post": {
        "summary": "Order abandoned reminder",
        "operationId": "orders-experimental-order-abandon-reminder",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/OrderAbandonReminderSent"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "order-abandoned": {
      "post": {
        "summary": "Order abandoned",
        "operationId": "order-abandoned",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-order-abandoned": {
      "post": {
        "summary": "Order abandoned",
        "operationId": "orders-experimental-order-abandoned",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "order-completed": {
      "post": {
        "summary": "Order completed",
        "operationId": "order-completed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-order-completed": {
      "post": {
        "summary": "Order completed",
        "operationId": "orders-experimental-order-completed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "organization-tax-number-validated": {
      "post": {
        "summary": "Organization tax number validated",
        "operationId": "organization-tax-number-validated",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Organizations"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/OrganizationTaxNumberValidated"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "payment-card-created": {
      "post": {
        "summary": "Payment card created",
        "operationId": "payment-card-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment instruments"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/PaymentCardWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "payment-card-expiration-reminder": {
      "post": {
        "summary": "Payment card expiration reminder",
        "operationId": "payment-card-expiration-reminder",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment instruments"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/PaymentCardWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "payment-card-expired": {
      "post": {
        "summary": "Payment card expired",
        "operationId": "payment-card-expired",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment instruments"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/PaymentCardWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "payment-instrument-modified": {
      "post": {
        "summary": "Payment instrument modified",
        "operationId": "payment-instrument-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Payment instruments"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/PaymentInstrumentWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "payout-request-canceled": {
      "post": {
        "summary": "Payout request canceled",
        "operationId": "payout-request-canceled",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/PayoutRequestWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "payout-request-created": {
      "post": {
        "summary": "Payout request created",
        "operationId": "payout-request-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/PayoutRequestWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "payout-request-fulfilled": {
      "post": {
        "summary": "Payout request fulfilled",
        "operationId": "payout-request-fulfilled",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/PayoutRequestWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "payout-request-modified": {
      "post": {
        "summary": "Payout request modified",
        "operationId": "payout-request-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/PayoutRequestWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "payout-request-reversed": {
      "post": {
        "summary": "Payout request reversed",
        "operationId": "payout-request-reversed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/PayoutRequestWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "quote-accepted": {
      "post": {
        "summary": "Quote accepted",
        "operationId": "quote-accepted",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/QuoteWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "quote-canceled": {
      "post": {
        "summary": "Quote canceled",
        "operationId": "quote-canceled",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/QuoteWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "quote-created": {
      "post": {
        "summary": "Quote created",
        "operationId": "quote-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/QuoteWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "quote-expired": {
      "post": {
        "summary": "Quote expired",
        "operationId": "quote-expired",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/QuoteWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "quote-issued": {
      "post": {
        "summary": "Quote issued",
        "operationId": "quote-issued",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/QuoteWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "quote-recalled": {
      "post": {
        "summary": "Quote recalled",
        "operationId": "quote-recalled",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/QuoteWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "quote-rejected": {
      "post": {
        "summary": "Quote rejected",
        "operationId": "quote-rejected",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/QuoteWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "quote-updated": {
      "post": {
        "summary": "Quote updated",
        "operationId": "quote-updated",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Quotes"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/QuoteWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "ready-to-pay-requested": {
      "post": {
        "summary": "Ready to pay requested",
        "operationId": "ready-to-pay-requested",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ReadyToPayRequested"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "renewal-invoice-issued": {
      "post": {
        "summary": "Renewal invoice issued",
        "operationId": "renewal-invoice-issued",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/RenewalInvoiceIssued"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-renewal-invoice-issued": {
      "post": {
        "summary": "Renewal invoice issued",
        "operationId": "orders-experimental-renewal-invoice-issued",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/RenewalInvoiceIssued"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "renewal-invoice-payment-canceled": {
      "post": {
        "summary": "Renewal invoice payment canceled",
        "operationId": "renewal-invoice-payment-canceled",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceAndTransaction"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "renewal-invoice-payment-declined": {
      "post": {
        "summary": "Renewal invoice payment declined",
        "operationId": "renewal-invoice-payment-declined",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/InvoiceAndTransaction"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "risk-score-changed": {
      "post": {
        "summary": "Risk score changed",
        "operationId": "risk-score-changed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "soft-usage-limit-reached": {
      "post": {
        "summary": "Soft usage limit reached",
        "operationId": "soft-usage-limit-reached",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UsageLimitWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-soft-usage-limit-reached": {
      "post": {
        "summary": "Soft usage limit reached",
        "operationId": "orders-experimental-soft-usage-limit-reached",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UsageLimitWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-activated": {
      "post": {
        "summary": "Subscription order activated",
        "operationId": "subscription-activated",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-activated": {
      "post": {
        "summary": "Subscription order activated",
        "operationId": "orders-experimental-subscription-activated",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-canceled": {
      "post": {
        "summary": "Subscription order canceled",
        "operationId": "subscription-canceled",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-canceled": {
      "post": {
        "summary": "Subscription order canceled",
        "operationId": "orders-experimental-subscription-canceled",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-churned": {
      "post": {
        "summary": "Subscription order churned",
        "operationId": "subscription-churned",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-churned": {
      "post": {
        "summary": "Subscription order churned",
        "operationId": "orders-experimental-subscription-churned",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-created": {
      "post": {
        "summary": "Subscription order created",
        "operationId": "subscription-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-created": {
      "post": {
        "summary": "Subscription order created",
        "operationId": "orders-experimental-subscription-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-downgraded": {
      "post": {
        "summary": "Subscription order downgraded",
        "operationId": "subscription-downgraded",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-downgraded": {
      "post": {
        "summary": "Subscription order downgraded",
        "operationId": "orders-experimental-subscription-downgraded",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-items-changed": {
      "post": {
        "summary": "Subscription items changed",
        "operationId": "subscription-items-changed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-items-changed": {
      "post": {
        "summary": "Subscription items changed",
        "operationId": "orders-experimental-subscription-items-changed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-modified": {
      "post": {
        "summary": "Order modified",
        "operationId": "subscription-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-modified": {
      "post": {
        "summary": "Order modified",
        "operationId": "orders-experimental-subscription-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-quantity-filled-limit-reached": {
      "post": {
        "summary": "Subscription quantity filled limit reached",
        "operationId": "subscription-quantity-filled-limit-reached",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionQuantityFilledLimitReached"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-quantity-filled-limit-reached": {
      "post": {
        "summary": "Subscription quantity filled limit reached",
        "operationId": "orders-experimental-subscription-quantity-filled-limit-reached",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionQuantityFilledLimitReached"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-reactivated": {
      "post": {
        "summary": "Subscription order reactivated",
        "operationId": "subscription-reactivated",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-reactivated": {
      "post": {
        "summary": "Subscription order reactivated",
        "operationId": "orders-experimental-subscription-reactivated",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-renewal-reminder": {
      "post": {
        "summary": "Subscription renewal reminder",
        "operationId": "subscription-renewal-reminder",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-renewal-reminder": {
      "post": {
        "summary": "Subscription renewal reminder",
        "operationId": "orders-experimental-subscription-renewal-reminder",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-renewed": {
      "post": {
        "summary": "Subscription order renewed",
        "operationId": "subscription-renewed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-renewed": {
      "post": {
        "summary": "Subscription order renewed",
        "operationId": "orders-experimental-subscription-renewed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-trial-converted": {
      "post": {
        "summary": "Subscription order trial converted",
        "operationId": "subscription-trial-converted",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-trial-converted": {
      "post": {
        "summary": "Subscription order trial converted",
        "operationId": "orders-experimental-subscription-trial-converted",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-trial-end-reminder": {
      "post": {
        "summary": "Subscription order trial end reminder",
        "operationId": "subscription-trial-end-reminder",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-trial-end-reminder": {
      "post": {
        "summary": "Subscription order trial end reminder",
        "operationId": "orders-experimental-subscription-trial-end-reminder",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-trial-ended": {
      "post": {
        "summary": "Subscription order trial ended",
        "operationId": "subscription-trial-ended",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-trial-ended": {
      "post": {
        "summary": "Subscription order trial ended",
        "operationId": "orders-experimental-subscription-trial-ended",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-upgraded": {
      "post": {
        "summary": "Subscription order upgraded",
        "operationId": "subscription-upgraded",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-upgraded": {
      "post": {
        "summary": "Subscription order upgraded",
        "operationId": "orders-experimental-subscription-upgraded",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-paused": {
      "post": {
        "summary": "Subscription order paused",
        "operationId": "subscription-paused",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionAndSubscriptionPause"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-paused": {
      "post": {
        "summary": "Subscription order paused",
        "operationId": "orders-experimental-subscription-paused",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionAndSubscriptionPause"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-pause-created": {
      "post": {
        "summary": "Subscription order pause created",
        "operationId": "subscription-pause-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionAndSubscriptionPause"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-pause-created": {
      "post": {
        "summary": "Subscription order pause created",
        "operationId": "orders-experimental-subscription-pause-created",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionAndSubscriptionPause"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-pause-modified": {
      "post": {
        "summary": "Subscription order pause modified",
        "operationId": "subscription-pause-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionAndSubscriptionPause"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-pause-modified": {
      "post": {
        "summary": "Subscription order pause modified",
        "operationId": "orders-experimental-subscription-pause-modified",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionAndSubscriptionPause"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-pause-revoked": {
      "post": {
        "summary": "Subscription order pause revoked",
        "operationId": "subscription-pause-revoked",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionAndSubscriptionPause"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-pause-revoked": {
      "post": {
        "summary": "Subscription order pause revoked",
        "operationId": "orders-experimental-subscription-pause-revoked",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionAndSubscriptionPause"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "subscription-resumed": {
      "post": {
        "summary": "Subscription order resumed",
        "operationId": "subscription-resumed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionAndSubscriptionPause"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-subscription-resumed": {
      "post": {
        "summary": "Subscription order resumed",
        "operationId": "orders-experimental-subscription-resumed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionAndSubscriptionPause"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "transaction-amount-discrepancy-found": {
      "post": {
        "summary": "Transaction amount discrepancy found",
        "operationId": "transaction-amount-discrepancy-found",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "transaction-declined": {
      "post": {
        "summary": "Transaction declined",
        "operationId": "transaction-declined",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "transaction-discrepancy-found": {
      "post": {
        "summary": "Transaction discrepancy found",
        "operationId": "transaction-discrepancy-found",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "transaction-process-requested": {
      "post": {
        "summary": "Transaction process requested",
        "operationId": "transaction-process-requested",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "transaction-processed": {
      "post": {
        "summary": "Transaction processed",
        "operationId": "transaction-processed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "transaction-reconciled": {
      "post": {
        "summary": "Transaction reconciled",
        "operationId": "transaction-reconciled",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "transaction-timeout-resolved": {
      "post": {
        "summary": "Transaction timeout resolved",
        "operationId": "transaction-timeout-resolved",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "trial-usage-limit-reached": {
      "post": {
        "summary": "Trial usage limit reached",
        "operationId": "trial-usage-limit-reached",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UsageLimitWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-trial-usage-limit-reached": {
      "post": {
        "summary": "Trial usage limit reached",
        "operationId": "orders-experimental-trial-usage-limit-reached",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/UsageLimitWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "waiting-gateway-transaction-completed": {
      "post": {
        "summary": "Waiting gateway transaction completed",
        "operationId": "waiting-gateway-transaction-completed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "order-delinquency-reached": {
      "post": {
        "summary": "Order delinquency time reached",
        "operationId": "order-delinquency-reached",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "orders-experimental-order-delinquency-reached": {
      "post": {
        "summary": "Order delinquency time reached",
        "operationId": "orders-experimental-order-delinquency-reached",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Orders experimental"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/SubscriptionWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "autodeposit-lookup-performed": {
      "post": {
        "summary": "Autodeposit lookup performed",
        "operationId": "autodeposit-lookup-performed",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/AutodepositLookupPerformed"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    }
  }
}