{
  "openapi": "3.1.1",
  "info": {
    "version": "latest",
    "title": "All 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\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## 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",
    "x-metadata": {
      "description": "All Rebilly APIs.",
      "redocly_category": "API Reference"
    }
  },
  "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
        }
      },
      "resourceId": {
        "name": "id",
        "in": "path",
        "description": "ID of the resource.",
        "required": true,
        "schema": {
          "type": "string",
          "maxLength": 50,
          "pattern": "^[@~\\-\\.\\w]+$"
        }
      },
      "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"
        }
      },
      "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"
          ]
        }
      },
      "collectionCriteria": {
        "name": "criteria",
        "in": "query",
        "description": "Criteria parameter for requesting a collection.",
        "schema": {
          "type": "string"
        }
      },
      "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": {
      "RegistrationFieldStep": {
        "type": "object",
        "required": [
          "id",
          "displayHeader"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the registration step.\nThis value must start with `step-` followed by lowercase alphanumeric characters or hyphens.",
            "pattern": "^step-[a-z0-9-]+$",
            "example": "step-0"
          },
          "displayHeader": {
            "type": "string",
            "description": "Display header of the registration step.",
            "minLength": 1,
            "maxLength": 255,
            "example": "Contact information"
          }
        }
      },
      "RegistrationField": {
        "type": "object",
        "required": [
          "attribute",
          "displayName",
          "requirementLevel",
          "validationType",
          "order",
          "step"
        ],
        "properties": {
          "attribute": {
            "type": "string",
            "description": "Attribute of the Keycloak user profile.\nThis value determines which user attribute the field maps to.\nUse the `contentBlock` attribute for static text in the registration form that requires no user input.",
            "enum": [
              "username",
              "firstName",
              "lastName",
              "email",
              "gender",
              "dateOfBirth",
              "addressLine1",
              "addressLine2",
              "city",
              "postalCode",
              "country",
              "province",
              "currency",
              "mobileNumber",
              "industry",
              "occupation",
              "marketingOptIn",
              "termsAccepted",
              "passwordStep",
              "contentBlock"
            ],
            "example": "email"
          },
          "displayName": {
            "type": "string",
            "description": "Display name of the registration field.",
            "minLength": 1,
            "maxLength": 255,
            "example": "Email Address"
          },
          "requirementLevel": {
            "type": "string",
            "description": "Requirement level of the field.\nThis value determines whether the field is required, optional, or hidden during registration.",
            "enum": [
              "required",
              "optional",
              "hidden"
            ],
            "default": "required",
            "example": "required"
          },
          "validationType": {
            "type": "string",
            "description": "Type of validation applied to the field input.",
            "enum": [
              "none",
              "email",
              "phone",
              "alphanumeric",
              "numeric",
              "date",
              "url",
              "regex",
              "password"
            ],
            "default": "none",
            "example": "email"
          },
          "validationPattern": {
            "type": [
              "string",
              "null"
            ],
            "description": "Custom validation regex pattern for the field.\nOnly applicable when `validationType` is `regex`.",
            "maxLength": 255
          },
          "minLength": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Minimum length of the field value.\nNot applicable when the `attribute` value is `dateOfBirth` or `contentBlock`.",
            "minimum": 0,
            "example": 1
          },
          "maxLength": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Maximum length of the field value.\nNot applicable when the `attribute` value is `dateOfBirth` or `contentBlock`.",
            "minimum": 1,
            "example": 255
          },
          "helpText": {
            "type": [
              "string",
              "null"
            ],
            "description": "Help text displayed to the user for the field.",
            "maxLength": 500,
            "example": "Enter your email address"
          },
          "minimumAge": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Minimum age in years for the registrant, calculated from their date of birth.\nThis field is only applicable when the `attribute` value is `dateOfBirth`.",
            "minimum": 1,
            "maximum": 100,
            "example": 19
          },
          "inputType": {
            "type": [
              "string",
              "null"
            ],
            "description": "Type of input control for the field in the registration form.",
            "enum": [
              "text",
              "select",
              "checkbox",
              "date",
              null
            ],
            "example": "text"
          },
          "placeholder": {
            "type": [
              "string",
              "null"
            ],
            "description": "Placeholder text displayed in the input field before the user enters a value.",
            "maxLength": 255,
            "example": "Enter your email address"
          },
          "contentBlock": {
            "type": [
              "string",
              "null"
            ],
            "description": "Static informational text in the registration form.\nThis field is only applicable when the `attribute` value is `contentBlock`.",
            "maxLength": 2048,
            "example": "For problem gaming assistance call 1-111-111-1111."
          },
          "order": {
            "type": "integer",
            "description": "Display order of the field within a registration step.",
            "minimum": 0,
            "default": 0,
            "example": 0
          },
          "step": {
            "description": "Registration step associated with the field.",
            "$ref": "#/components/schemas/RegistrationFieldStep"
          }
        }
      },
      "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"
      },
      "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"
              ]
            }
          }
        }
      },
      "AccountRegistrationSettings": {
        "type": "object",
        "description": "Account registration settings define the fields, steps, and validation rules\nfor a customer registration flow.\nEach account registration settings resource is scoped to a set of locations\nand is synchronized with a Keycloak realm.",
        "required": [
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the account registration settings.\nIf not provided, the ID is generated from the name.",
            "maxLength": 50,
            "pattern": "^[a-z0-9\\-]+$",
            "example": "eu-registration"
          },
          "name": {
            "type": "string",
            "description": "Name of the account registration settings.",
            "minLength": 1,
            "maxLength": 255,
            "example": "EU Registration Requirements"
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Description of the account registration settings.",
            "maxLength": 1000,
            "example": "Account registration settings for EU customers"
          },
          "isEnabled": {
            "type": "boolean",
            "description": "Specifies if the account registration settings are active.",
            "default": true,
            "example": true
          },
          "locations": {
            "type": "array",
            "description": "List of locations that the account registration settings apply to.\nEach location consists of a country and an optional region.",
            "items": {
              "type": "object",
              "required": [
                "country"
              ],
              "properties": {
                "country": {
                  "type": "string",
                  "description": "Country code of the location.\nUse ISO 3166-1 alpha-2 country codes.",
                  "example": "CA"
                },
                "region": {
                  "type": "string",
                  "description": "Region code of the location within the country.\nUse ISO 3166-2 subdivision codes without the country prefix.",
                  "example": "ON"
                }
              }
            },
            "example": [
              {
                "country": "CA",
                "region": "ON"
              },
              {
                "country": "GB"
              }
            ]
          },
          "fields": {
            "type": "array",
            "description": "List of registration fields that define the registration form.",
            "items": {
              "$ref": "#/components/schemas/RegistrationField"
            }
          },
          "realm": {
            "type": [
              "string",
              "null"
            ],
            "description": "Keycloak realm associated with the account registration settings.",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "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"
          }
        ]
      },
      "Conflict": {
        "allOf": [
          {
            "title": "Conflict"
          },
          {
            "type": "object",
            "properties": {
              "status": {
                "type": "integer",
                "description": "HTTP status code.",
                "minimum": 409,
                "maximum": 409
              }
            }
          },
          {
            "$ref": "#/components/schemas/BaseProblem"
          }
        ]
      },
      "InvalidFields": {
        "type": "array",
        "description": "Invalid field details.",
        "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"
          }
        ]
      },
      "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": {
                "$ref": "#/components/schemas/InvalidFields"
              }
            }
          }
        ]
      },
      "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."
          }
        }
      },
      "NotFound": {
        "allOf": [
          {
            "type": "object",
            "properties": {
              "status": {
                "type": "integer",
                "description": "HTTP status code.",
                "minimum": 404,
                "maximum": 404
              }
            }
          },
          {
            "$ref": "#/components/schemas/BaseProblem"
          }
        ]
      },
      "ResourceId": {
        "type": "string",
        "description": "Unique resource ID.",
        "maxLength": 50,
        "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
      },
      "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."
          },
          "metadata": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Additional metadata on AML sources, when available.",
            "properties": {
              "lookupId": {
                "type": "string",
                "readOnly": true,
                "description": "Direct lookup identifier for the LexisNexis WorldCompliance Online Search Tool.",
                "example": "1E66DAD6-A2E2-4DCB-BCAF-8CC92CD1DDEC"
              }
            }
          },
          "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"
                  ],
                  "x-enumDescriptions": {
                    "customer_duplicated_by_person_exact_match": "Customer identity exactly matched a check on another customer",
                    "customer_duplicated_by_primary_phone_number_exact_match": "Customer primary phone number exactly matched a check on another customer",
                    "customer_previous_check_exact_match": "Customer data exactly matched a previous check on the same customer"
                  }
                },
                "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"
          },
          "noMatchDetails": {
            "readOnly": true,
            "description": "List of codes that explain the no-match result.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "top_hit_not_eligible_for_matching",
              "search_shard_failures"
            ]
          },
          "_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"
                  ]
                }
              }
            }
          }
        }
      },
      "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",
              "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"
              }
            }
          }
        }
      },
      "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",
          "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",
          "Mollie",
          "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",
          "Quickpay",
          "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 its ID is assigned to `defaultPaymentInstrumentId` value.\nIf both are supplied, the value of this property overrides the `defaultPaymentInstrumentId` value.\nThe token expires after first use."
          },
          "defaultPaymentInstrument": {
            "type": [
              "object",
              "null"
            ],
            "description": "Default payment instrument of the customer.\n\nThis field is deprecated for writes. Use the `defaultPaymentInstrumentId` field instead.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/VaultedInstrument"
              },
              {
                "$ref": "#/components/schemas/AlternativePaymentInstrument"
              },
              {
                "$ref": "#/components/schemas/CashInstrument"
              },
              {
                "$ref": "#/components/schemas/CheckInstrument"
              }
            ]
          },
          "defaultPaymentInstrumentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the customer's default payment instrument.\n\nThe default payment instrument is used to automatically pay subscription renewals,\nand for transaction requests where a specific payment instrument is not provided.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N",
            "writeOnly": true
          },
          "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
          },
          "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": "Email addresses for notification delivery in event-based email notifications.\nWhen you configure event-based email notifications, you can send to these addresses, the customer's primary email address, or another email address you specify.\nFor more information, see [Manage notification emails](https://www.rebilly.com/docs/data-tables/manage-customer-information#manage-notification-emails).",
            "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."
          }
        }
      },
      "TimelineAction": {
        "type": "object",
        "discriminator": {
          "propertyName": "action",
          "mapping": {
            "redemption-cancel": "#/components/schemas/RedemptionCancelTimelineAction",
            "resend-email": "#/components/schemas/ResendEmailTimelineAction",
            "ruleset-restore": "#/components/schemas/RulesetRestoreTimelineAction"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/RedemptionCancelTimelineAction"
          },
          {
            "$ref": "#/components/schemas/ResendEmailTimelineAction"
          },
          {
            "$ref": "#/components/schemas/RulesetRestoreTimelineAction"
          }
        ]
      },
      "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-partially-refunded",
              "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"
          }
        }
      },
      "CustomerCreditBalance": {
        "type": "object",
        "required": [
          "balances"
        ],
        "properties": {
          "balances": {
            "description": "Customer credit balances grouped by currency.",
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "currency",
                "unallocatedAmount"
              ],
              "properties": {
                "currency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "unallocatedAmount": {
                  "description": "Sum of unallocated credit memo amounts for the currency.",
                  "readOnly": true,
                  "type": "number",
                  "format": "double",
                  "x-type": "Money",
                  "x-currency-field": "currency"
                }
              }
            }
          }
        }
      },
      "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"
      },
      "ExternalIdentifier": {
        "type": "object",
        "required": [
          "externalIdentifier"
        ],
        "properties": {
          "resource": {
            "type": "string",
            "description": "Type of resource.",
            "enum": [
              "customers",
              "invoices",
              "invoice-items",
              "transactions",
              "journal-accounts",
              "journal-entries"
            ],
            "readOnly": true
          },
          "resourceId": {
            "type": "string",
            "description": "ID of the resource.",
            "readOnly": true
          },
          "service": {
            "type": "string",
            "description": "Name of the external service.",
            "enum": [
              "quickbooks-online"
            ],
            "readOnly": true
          },
          "externalIdentifier": {
            "type": "string",
            "description": "ID of the referenced entity within an external service."
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "description": "Related links.",
            "type": "array",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "rel": {
                  "type": "string",
                  "description": "Type of link.",
                  "enum": [
                    "self",
                    "externalService"
                  ]
                },
                "href": {
                  "type": "string",
                  "description": "Link URL."
                }
              }
            }
          }
        }
      },
      "ExternalServiceSettings": {
        "type": "object",
        "description": "Settings that configure integrations with external services.",
        "properties": {
          "quickBooksOnline": {
            "type": "object",
            "title": "QuickBooksOnlineExternalServiceSettings",
            "description": "Settings for QuickBooks Online.",
            "properties": {
              "customer": {
                "type": "object",
                "title": "QuickBooksOnlineCustomerExternalServiceSettings",
                "description": "Settings for customers.",
                "properties": {
                  "sync": {
                    "type": "string",
                    "description": "Specifies how to synchronize customers between your Rebilly and QuickBooks Online account.",
                    "default": "manually",
                    "enum": [
                      "manually",
                      "when-used",
                      "always"
                    ],
                    "x-enumDescriptions": {
                      "manually": "Customer data is only synchronized when it is manually executed.",
                      "when-used": "Customer data is synchronized when related entities, such as transactions or invoices are created or updated.",
                      "always": "Customer data is synchronized automatically as data is created or updated."
                    }
                  },
                  "displayName": {
                    "type": "string",
                    "description": "Format used to display the customer name in QuickBooks Online.",
                    "default": "full-name",
                    "enum": [
                      "id",
                      "full-name",
                      "organization-name"
                    ]
                  }
                }
              },
              "invoice": {
                "type": "object",
                "title": "QuickBooksOnlineInvoiceExternalServiceSettings",
                "description": "Settings for invoices.",
                "properties": {
                  "sync": {
                    "type": "string",
                    "description": "Specifies how to synchronize invoices between your Rebilly and QuickBooks Online account.",
                    "default": "manually",
                    "enum": [
                      "manually",
                      "when-issued",
                      "always"
                    ],
                    "x-enumDescriptions": {
                      "manually": "Invoice data is only synchronized when it is manually executed.",
                      "when-issued": "Invoice data is synchronized when issued.",
                      "always": "Invoice data is synchronized automatically when it is issued or updated."
                    }
                  },
                  "syncZeroInvoices": {
                    "type": "boolean",
                    "description": "Specifies if zero amount invoices must be synchronized.",
                    "default": false
                  },
                  "unearnedRevenueAccountId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID of the unearned revenue journal account for product items.",
                    "example": "jrn_acc_01H32J1C97KWGRCKF1E1JY0QG8"
                  },
                  "taxesAccountId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "default": null,
                    "description": "ID of the journal account where all taxes are created.",
                    "example": "jrn_acc_01H32J1KGXSRDH0K8Q7YYA552T"
                  },
                  "discountsAccountId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "default": null,
                    "description": "ID of the journal account where all discounts are created.",
                    "example": "jrn_acc_01H32J1KGXSRDH0K8Q7YYA552T"
                  },
                  "department": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "default": null,
                    "description": "ID of the QuickBooks Online department that invoices are related to.",
                    "example": "jrn_acc_01H32J1KGXSRDH0K8Q7YYA552T"
                  },
                  "itemName": {
                    "type": "string",
                    "description": "Name of the invoice item."
                  },
                  "itemDescription": {
                    "type": "string",
                    "description": "Description of the invoice item."
                  },
                  "itemSku": {
                    "type": "string",
                    "description": "Stock Keeping Unit (SKU) of the invoice item."
                  },
                  "itemLineDescription": {
                    "type": "string",
                    "description": "Description of the invoice line item."
                  },
                  "taxName": {
                    "type": "string",
                    "description": "Name of the tax that is applied to the invoice."
                  },
                  "taxDescription": {
                    "type": "string",
                    "description": "Description of the tax that is applied to the invoice."
                  },
                  "taxSku": {
                    "type": "string",
                    "description": "Stock Keeping Unit (SKU) of the tax that is applied to the invoice."
                  },
                  "taxLineDescription": {
                    "type": "string",
                    "description": "Description of the tax line."
                  }
                }
              },
              "transaction": {
                "type": "object",
                "title": "QuickBooksOnlineTransactionExternalServiceSettings",
                "description": "Settings for transactions.",
                "properties": {
                  "syncPayments": {
                    "type": "string",
                    "description": "Specifies how to synchronize transactions between your Rebilly and QuickBooks Online account.",
                    "default": "manually",
                    "enum": [
                      "manually",
                      "always"
                    ],
                    "x-enumDescriptions": {
                      "manually": "Transaction data is only synchronized when it is manually executed.",
                      "always": "Transaction data is synchronized automatically as data is created or updated."
                    }
                  },
                  "syncRefundReceipts": {
                    "type": "string",
                    "description": "Specifies how to synchronize refund receipts between your Rebilly and QuickBooks Online account.",
                    "default": "manually",
                    "enum": [
                      "manually",
                      "always"
                    ],
                    "x-enumDescriptions": {
                      "manually": "Invoice data is only synchronized when it is manually executed.",
                      "always": "Invoice data is synchronized automatically as data is created or updated."
                    }
                  },
                  "depositAccountId": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "ID of the journal account where all payments and refund receipts are deposited.",
                    "example": "jrn_acc_01H32J1C97KWGRCKF1E1JY0QG8"
                  },
                  "department": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "default": null,
                    "description": "ID of the QuickBooks Online department that payments and refund receipts are related to.",
                    "example": "jrn_acc_01H32J1KGXSRDH0K8Q7YYA552T"
                  }
                }
              },
              "journalEntry": {
                "type": "object",
                "title": "QuickBooksOnlineJournalEntryExternalServiceSettings",
                "description": "Settings for journal entries.",
                "properties": {
                  "sync": {
                    "type": "string",
                    "description": "Specifies how to synchronize journal entries between your Rebilly and QuickBooks Online account.",
                    "default": "manually",
                    "enum": [
                      "manually",
                      "always"
                    ],
                    "x-enumDescriptions": {
                      "manually": "Journal entry data is only synchronized when it is manually executed.",
                      "always": "Journal entry data is synchronized automatically as data is created or updated."
                    }
                  }
                }
              }
            }
          }
        }
      },
      "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"
            ]
          }
        }
      },
      "ApplicationInstance": {
        "type": "object",
        "description": "Application instance object.",
        "properties": {
          "status": {
            "description": "Current status of the application instance.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "enabling",
              "enabled",
              "disabling",
              "disabled"
            ]
          },
          "isConfigured": {
            "description": "Specifies if the configuration of the application instance is complete.\nSome applications require additional configuration after installation before they can be used.\nConfiguration is completed using the [Upsert an application instance configuration](https://www.rebilly.com/catalog/all/application-users/putapplicationinstanceconfiguration) operation.",
            "type": "boolean",
            "readOnly": true
          },
          "settings": {
            "description": "Configuration settings submitted during installation.",
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "description": "Additional properties added by the user when the application is installed."
            },
            "example": {
              "color": "red",
              "limit": "5"
            },
            "deprecated": true,
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "ApplicationInstanceConfiguration": {
        "type": "object",
        "required": [
          "settings"
        ],
        "description": "Application instance configuration.\n\nIf the `configuredBy` field is set to `user`, only the user can change application settings.\n\nIf the `configuredBy` field is set to `application`, only the application itself can change settings.",
        "properties": {
          "settings": {
            "description": "Configuration settings for the application instance.",
            "type": "object",
            "additionalProperties": {
              "type": "string",
              "description": "Additional properties that the user specifies when installing an application."
            },
            "example": {
              "color": "red",
              "level": "gold"
            }
          },
          "_links": {
            "readOnly": true,
            "type": "array",
            "description": "Related links.",
            "items": {
              "type": "object",
              "properties": {
                "rel": {
                  "type": "string",
                  "description": "Type of the link.",
                  "enum": [
                    "self",
                    "configuration"
                  ],
                  "x-enumDescriptions": {
                    "self": "Link to the application instance configuration.",
                    "configuration": "Link to the external resource where the application instance must be configured.\nThis field contains a JWT in the query parameter.\nDirect the user to this URL where application settings must be submitted."
                  }
                },
                "href": {
                  "type": "string",
                  "description": "URL of the link."
                }
              }
            }
          }
        }
      },
      "Application": {
        "type": "object",
        "description": "Application object.",
        "required": [
          "name",
          "logoId",
          "authorName",
          "tagline",
          "description",
          "permissions"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the application.",
            "readOnly": true,
            "maxLength": 50,
            "example": "app_01H0HT25X7XXCJGS4H8VJSYF2Y"
          },
          "name": {
            "description": "Name that is displayed for the application in the App Store.",
            "type": "string"
          },
          "logoId": {
            "type": "string",
            "description": "Unique identifier of the file that contains the application logo.",
            "maxLength": 50,
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "authorName": {
            "description": "Name of the person or organization that created the application.",
            "type": "string"
          },
          "authorLogoId": {
            "type": [
              "string",
              "null"
            ],
            "description": "Unique identifier of the file that contains the logo of the author.",
            "maxLength": 50,
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "tagline": {
            "description": "Short descriptive tagline that is displayed for the application in the App Store.",
            "type": "string"
          },
          "description": {
            "description": "Detailed description of the application.\nThis field accepts markdown and simple text.",
            "type": "string"
          },
          "status": {
            "description": "Current status of the application in the App Store.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending-approval",
              "available",
              "disabled"
            ]
          },
          "permissions": {
            "description": "List of permissions that are available to the application.\nTo add permissions, contact [Rebilly Support](mailto:support@rebilly.com).",
            "type": "array",
            "items": {
              "type": "string",
              "format": "operationId",
              "enum": [
                "DeleteApplicationInstance",
                "GetApplicationInstanceConfiguration",
                "GetCustomer",
                "GetCustomerCollection",
                "GetInvoice",
                "GetInvoiceCollection",
                "GetPlan",
                "GetPlanCollection",
                "GetProduct",
                "GetProductCollection",
                "GetSubscription",
                "GetSubscriptionCollection",
                "GetTransaction",
                "GetTransactionCollection",
                "GetWebhook",
                "GetWebsite",
                "GetWebsiteCollection",
                "PostCoupon",
                "PostCouponRedemption",
                "PostGatewayAccountDowntimeSchedule",
                "PostPayout",
                "PostServiceCredential",
                "PostWebhook",
                "PostWebhookCredentialHash",
                "PutApplicationInstanceConfiguration",
                "PutCoupon"
              ]
            },
            "example": [
              "GetInvoice",
              "GetInvoiceCollection",
              "GetCustomer",
              "GetCustomerCollection"
            ]
          },
          "configurationUrl": {
            "description": "URL for configuring the application during installation.",
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "configuredBy": {
            "type": "string",
            "description": "Specifies who can configure the application.",
            "readOnly": true,
            "enum": [
              "user",
              "application"
            ]
          },
          "properties": {
            "description": "Defines settings that users complete when they install the application.\nThis field accepts [JSON-schema](https://json-schema.org/) drafts 4, 6, and 7.",
            "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": {
            "type": "array",
            "description": "Related links.",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "href": {
                  "description": "URL of the link.",
                  "type": "string"
                },
                "rel": {
                  "description": "Type of link.",
                  "type": "string",
                  "enum": [
                    "self",
                    "applicationInstance",
                    "logoUrl",
                    "authorLogoUrl"
                  ]
                }
              }
            }
          }
        }
      },
      "UserApplication": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Application"
          },
          {
            "properties": {
              "_embedded": {
                "type": "object",
                "description": "Embedded objects that are requested by the `expand` query parameter.",
                "readOnly": true,
                "properties": {
                  "applicationInstance": {
                    "$ref": "#/components/schemas/ApplicationInstance"
                  }
                }
              }
            }
          }
        ]
      },
      "OwnerApplicationInstance": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ApplicationInstance"
          },
          {
            "type": "object",
            "properties": {
              "organizationId": {
                "readOnly": true,
                "allOf": [
                  {
                    "$ref": "#/components/schemas/OrganizationId"
                  }
                ]
              },
              "token": {
                "description": "Session token used to authenticate an organization.",
                "type": "string",
                "readOnly": true
              }
            }
          }
        ]
      },
      "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"
          },
          "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"
          }
        }
      },
      "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",
          "IMerchant",
          "Ingenico",
          "INOVAPAY",
          "Inovio",
          "Intuit",
          "InstaDebit",
          "IpayOptions",
          "Isx",
          "JetPay",
          "Jeton",
          "JPMOrbital",
          "Khelocard",
          "Klarna",
          "Konnektive",
          "Kushki",
          "LaCore",
          "Limepay",
          "Loonio",
          "loonie",
          "LPG",
          "MaxiCash",
          "MercadoPago",
          "MiFinity",
          "Mollie",
          "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",
          "PayGlocal",
          "Paynote",
          "PaymentAsia",
          "PaymenTechnologies",
          "PaymentsOS",
          "Paymero",
          "PayPal",
          "Payper",
          "Payr",
          "PayRedeem",
          "PayRetailers",
          "Paysafe",
          "Paysafecard",
          "Paysafecash",
          "PayTabs",
          "PayU",
          "PayULatam",
          "Payvision",
          "PayXpert",
          "PharosPayments",
          "Piastrix",
          "Pin4Pay",
          "Plugnpay",
          "PostFinance",
          "Powertranz",
          "PPRO",
          "Prosa",
          "PSiGate",
          "Quickpay",
          "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",
          "Txn",
          "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",
          "Isx",
          "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",
          "PayGlocal",
          "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",
          "Txn",
          "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.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "completed",
              "conn-error",
              "disputed",
              "never-sent",
              "offsite",
              "partially-refunded",
              "pending",
              "refunded",
              "sending",
              "timeout",
              "voided",
              "waiting-approval",
              "waiting-capture",
              "waiting-gateway",
              "waiting-refund"
            ]
          },
          "result": {
            "description": "Result of the transaction.",
            "type": "string",
            "x-basic": true,
            "readOnly": true,
            "enum": [
              "abandoned",
              "approved",
              "canceled",
              "declined",
              "unknown"
            ]
          },
          "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"
                ]
              },
              "isForceDcc": {
                "description": "Specifies if Dynamic Currency Conversion (DCC) is forced for the transaction.",
                "type": "boolean"
              }
            }
          },
          "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"
            }
          },
          "isNewOrder": {
            "description": "Specifies if the order is a new order.",
            "type": "boolean",
            "readOnly": true,
            "example": true
          },
          "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"
                  ]
                }
              }
            }
          }
        }
      },
      "InvoiceCreditMemoAllocationRequest": {
        "type": "object",
        "description": "Allocation request settings.\nCredit memo IDs are not accepted and are selected automatically by the system.",
        "properties": {
          "amount": {
            "type": "number",
            "format": "double",
            "exclusiveMinimum": 0,
            "description": "Optional maximum amount to allocate from customer credit memos to the invoice.\nIf provided, allocation is capped at this value.\nIf omitted, the allocated amount is the lesser of:\n- Invoice unpaid amount.\n- Available allocatable credit memo balance."
          },
          "allocationOrder": {
            "type": "string",
            "description": "Credit memo application order.",
            "enum": [
              "oldest-first",
              "newest-first"
            ],
            "x-enumDescriptions": {
              "oldest-first": "Applies oldest allocatable credit memos first.",
              "newest-first": "Applies newest allocatable credit memos first."
            },
            "default": "oldest-first"
          }
        }
      },
      "InvoiceAppliedCreditMemoAllocation": {
        "type": "object",
        "required": [
          "creditMemoId",
          "amount"
        ],
        "properties": {
          "creditMemoId": {
            "type": "string",
            "description": "ID of the credit memo.",
            "readOnly": true,
            "maxLength": 50,
            "example": "crmm_0YVCNN22TWC3G8H82QNPNVZCHG"
          },
          "amount": {
            "description": "Amount allocated from the credit memo to the invoice.",
            "type": "number",
            "format": "double"
          }
        }
      },
      "InvoiceCreditMemoAllocationResponse": {
        "type": "object",
        "required": [
          "invoiceId",
          "currency",
          "appliedCreditMemos",
          "remainingInvoiceAmount"
        ],
        "properties": {
          "invoiceId": {
            "type": "string",
            "description": "ID of the invoice.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode",
            "readOnly": true
          },
          "appliedCreditMemos": {
            "type": "array",
            "readOnly": true,
            "description": "List of credit memos applied to the invoice and the amount allocated from each.",
            "items": {
              "$ref": "#/components/schemas/InvoiceAppliedCreditMemoAllocation"
            }
          },
          "remainingInvoiceAmount": {
            "description": "Remaining amount due on the invoice after credit memo allocation.",
            "type": "number",
            "readOnly": true,
            "format": "double"
          }
        }
      },
      "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-partially-refunded",
              "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 quote.\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",
              "prepayment",
              "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"
          },
          "quoteId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the related quote.",
            "readOnly": true,
            "maxLength": 50,
            "example": "qt_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",
              "prepayment",
              "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": "Moderate verification requirements. This option is used for sale transactions.",
          "2": "Strict verification requirements. This option is used for credit 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-was-valid-but-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",
          "name-and-dob-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"
          }
        }
      },
      "KycDocumentMatchesVersion": {
        "type": "string",
        "description": "Version of the document matches.",
        "readOnly": true,
        "example": "2.0"
      },
      "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"
          },
          "sex": {
            "description": "MRZ sex code (ICAO 9303).\n`M`, `F`, or `X`.\nNull if not extracted.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[MFX]$",
            "example": "M"
          },
          "mrzChecksumValid": {
            "description": "MRZ check digits validation.\nNull if there is no MRZ, no check data, or a non-standard layout.",
            "type": [
              "boolean",
              "null"
            ],
            "readOnly": true,
            "example": true
          },
          "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, or if the date of birth detected on the document is not matched."
              },
              "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."
              },
              "mrzChecksum": {
                "type": "integer",
                "minimum": 0,
                "maximum": 100,
                "description": "Weight added when MRZ check digits fail validation."
              }
            }
          },
          "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": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "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": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "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-time",
            "example": "2021-01-01T00:00:00+00:00"
          },
          "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": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "score": {
                "$ref": "#/components/schemas/KycDocumentMatchesScore"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              },
              "data": {
                "$ref": "#/components/schemas/KycAddressMatches"
              }
            }
          },
          "parsedData": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "properties": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "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": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "score": {
                "$ref": "#/components/schemas/KycDocumentMatchesScore"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              },
              "data": {
                "$ref": "#/components/schemas/FundsMatches"
              }
            }
          },
          "parsedData": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Parsed data.",
            "properties": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "score": {
                "$ref": "#/components/schemas/KycDocumentMatchesScore"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              },
              "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": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "score": {
                "$ref": "#/components/schemas/KycDocumentMatchesScore"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              },
              "data": {
                "$ref": "#/components/schemas/PurchaseMatches"
              }
            }
          },
          "parsedData": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Parsed data.",
            "properties": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "score": {
                "$ref": "#/components/schemas/KycDocumentMatchesScore"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              },
              "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": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "score": {
                "$ref": "#/components/schemas/KycDocumentMatchesScore"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              },
              "data": {
                "$ref": "#/components/schemas/CreditFileMatches"
              }
            }
          },
          "parsedData": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Parsed data.",
            "properties": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "score": {
                "$ref": "#/components/schemas/KycDocumentMatchesScore"
              },
              "checkList": {
                "$ref": "#/components/schemas/KycDocumentCheckList"
              },
              "data": {
                "$ref": "#/components/schemas/CreditFileMatches"
              }
            }
          },
          "_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"
          }
        ]
      },
      "KycIdentityMatchesOverwrite": {
        "type": "object",
        "description": "Request body for overwriting identity KYC document matches.",
        "allOf": [
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of KYC document matches.\n This value identifies the document match type as `identity-proof`.",
                "type": "string",
                "enum": [
                  "identity-proof"
                ],
                "example": "identity-proof"
              }
            }
          },
          {
            "$ref": "#/components/schemas/KycIdentityMatches"
          }
        ]
      },
      "KycAddressMatchesOverwrite": {
        "type": "object",
        "description": "Request body for overwriting address KYC document matches.",
        "allOf": [
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of KYC document matches.\nThis value identifies the document match type as `address-proof`.",
                "type": "string",
                "enum": [
                  "address-proof"
                ],
                "example": "address-proof"
              }
            }
          },
          {
            "$ref": "#/components/schemas/KycAddressMatches"
          }
        ]
      },
      "KycPurchaseMatchesOverwrite": {
        "type": "object",
        "description": "Request body for overwriting purchase KYC document matches.",
        "allOf": [
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of KYC document matches.\nThis value identifies the document match type as `purchase-proof`.",
                "type": "string",
                "enum": [
                  "purchase-proof"
                ],
                "example": "purchase-proof"
              }
            }
          },
          {
            "$ref": "#/components/schemas/PurchaseMatches"
          }
        ]
      },
      "KycFundsMatchesOverwrite": {
        "type": "object",
        "description": "Request body for overwriting funds KYC document matches.",
        "allOf": [
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of KYC document matches.\nThis value identifies the document match type as `funds-proof`.",
                "type": "string",
                "enum": [
                  "funds-proof"
                ],
                "example": "funds-proof"
              }
            }
          },
          {
            "$ref": "#/components/schemas/FundsMatches"
          }
        ]
      },
      "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
          },
          "fpanLast4": {
            "description": "Last 4 digits of the Funding Primary Account Number (FPAN) of the payment card.\nThis value is only present for payment cards created from digital wallet tokens,\nwhere the FPAN is the physical card number visible to the cardholder,\nas opposed to the Device Primary Account Number (DPAN) used in the digital wallet transaction.",
            "type": [
              "string",
              "null"
            ],
            "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
          },
          "isPayoutable": {
            "description": "Specifies if payouts are supported for cards with this BIN.\nDefaults to `true`.\nThis value is `false` if the BIN does not support payouts.",
            "type": "boolean",
            "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"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "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"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "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",
          "Mollie",
          "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",
          "Quickpay",
          "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",
          "VegaWallet",
          "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"
          }
        },
        "oneOf": [
          {
            "$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": {
        "title": "OneTimeSalePlan",
        "type": "object",
        "description": "Details of the one-time sale plan.\nUse this plan for non-recurring, one-time, sales.",
        "required": [
          "name",
          "currency",
          "productId",
          "pricing"
        ],
        "properties": {
          "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",
            "const": false,
            "description": "Specifies if a plan is a trial that does not have recurring instructions.",
            "readOnly": true
          },
          "recurringInterval": {
            "type": "null",
            "description": "Service interval settings.",
            "readOnly": true
          },
          "trial": {
            "type": "null",
            "description": "Trial configuration setting.",
            "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": {
        "title": "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": [
          "name",
          "currency",
          "productId",
          "pricing",
          "recurringInterval"
        ],
        "properties": {
          "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",
            "const": false,
            "description": "Specifies if a plan is a trial that does not have recurring instructions.",
            "readOnly": true
          },
          "recurringInterval": {
            "description": "Service interval settings.",
            "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
              },
              "sticky": {
                "description": "When enabled, if no usage is reported during a service period,\nthe plan bills the last known reported quantity from a previous period instead of zero.\nThis is suitable for hosted or persistent resources whose usage does not change every period.\nOnly supported with `strategy`: `last`.",
                "type": "boolean",
                "default": false,
                "example": false
              }
            }
          },
          "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": {
        "title": "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": [
          "name",
          "currency",
          "productId",
          "trial"
        ],
        "properties": {
          "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",
            "const": true,
            "description": "Specifies if a plan is a trial that does not have recurring instructions.",
            "readOnly": true
          },
          "recurringInterval": {
            "type": "null",
            "description": "Service interval settings.",
            "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": {
        "oneOf": [
          {
            "allOf": [
              {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID of the plan.",
                    "maxLength": 50,
                    "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X",
                    "readOnly": true
                  }
                }
              },
              {
                "$ref": "#/components/schemas/OneTimeSalePlan"
              }
            ]
          },
          {
            "allOf": [
              {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID of the plan.",
                    "maxLength": 50,
                    "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X",
                    "readOnly": true
                  }
                }
              },
              {
                "$ref": "#/components/schemas/SubscriptionPlan"
              }
            ]
          },
          {
            "allOf": [
              {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID of the plan.",
                    "maxLength": 50,
                    "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X",
                    "readOnly": true
                  }
                }
              },
              {
                "$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"
        ],
        "additionalProperties": false,
        "properties": {
          "id": {
            "description": "ID of the plan.",
            "$ref": "#/components/schemas/ResourceId"
          }
        }
      },
      "FlexiblePlan": {
        "oneOf": [
          {
            "allOf": [
              {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID of the plan.",
                    "maxLength": 50,
                    "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                  }
                }
              },
              {
                "$ref": "#/components/schemas/OneTimeSalePlan"
              }
            ]
          },
          {
            "allOf": [
              {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID of the plan.",
                    "maxLength": 50,
                    "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                  }
                }
              },
              {
                "$ref": "#/components/schemas/SubscriptionPlan"
              }
            ]
          },
          {
            "allOf": [
              {
                "type": "object",
                "required": [
                  "id"
                ],
                "properties": {
                  "id": {
                    "type": "string",
                    "description": "ID of the plan.",
                    "maxLength": 50,
                    "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                  }
                }
              },
              {
                "$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",
          "type"
        ],
        "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
          },
          "quantityFilled": {
            "description": "Number of filled product units.\nThis field is not used for metered billing plans.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "example": 5.125
          },
          "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",
          "type"
        ],
        "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"
                }
              }
            }
          },
          "isNewOrder": {
            "description": "Specifies if the order is a new order.",
            "type": "boolean",
            "readOnly": true,
            "example": true
          },
          "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.\nChange quotes can only be created for orders with `active` or `trial-ended` status.\nFor `trial-ended` orders, use this quote type to convert a trial-only order to a regular recurring 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"
                }
              }
            }
          },
          "isNewOrder": {
            "description": "Specifies if the order is a new order.",
            "type": "boolean",
            "readOnly": true,
            "example": true
          },
          "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": "Policy for managing service periods and trial state of the related order when the quote is accepted.\n\nThe `reset` and `retain` values are deprecated.\nThe deprecated `keepTrial` flag is ignored unless `retain` is used, or this field is omitted.\nIf this field is omitted, this value defaults to `retainRecurring`.\nIf this field is omitted and `keepTrial` is `true`, `renewalPolicy` is set to `retainTrialThenRecurring`.",
                "type": "string",
                "default": "retainRecurring",
                "enum": [
                  "resetToRecurring",
                  "retainRecurring",
                  "retainTrialThenRecurring",
                  "reset",
                  "retain"
                ],
                "x-enumDescriptions": {
                  "resetToRecurring": "Resets the service periods, ends any trial, and converts trial-only items to recurring.",
                  "retainRecurring": "Retains the current service periods, ends any trial, and converts trial-only items to recurring.",
                  "retainTrialThenRecurring": "Retains the trial until it ends, then converts the item to recurring.\nReturns a validation error if the order has no trial.",
                  "reset": "Deprecated.\nUse `resetToRecurring` instead.\nResets the `renewalTime` to a newly calculated value.",
                  "retain": "Deprecated.\nUse `retainRecurring` or `retainTrialThenRecurring` instead.\nRetains the current `renewalTime`."
                }
              },
              "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 `retainRecurring` or `retainTrialThenRecurring`,\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": {
                "deprecated": true,
                "description": "Deprecated.\nUse the `retainTrialThenRecurring` value of `renewalPolicy` instead.\n\nSpecifies if the order must retain its active trial.\nThis field is only applicable if `renewalPolicy` is set to the deprecated value `retain`, or omitted.\nIf `renewalPolicy` is omitted and this field is `true`, `renewalPolicy` is set to `retainTrialThenRecurring`.",
                "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": {
                "description": "Shipping settings of the order.\nIf this value is omitted, the order shipping is not affected.",
                "allOf": [
                  {
                    "$ref": "#/components/schemas/Shipping"
                  }
                ]
              },
              "deliveryAddress": {
                "description": "Delivery address of the order.\nIf this value is `null`, the order delivery address is not affected.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ContactObject"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "billingAddress": {
                "description": "Billing address of the order.\nIf this value is `null`, the order billing address is not affected.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ContactObject"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          },
          "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"
                }
              }
            }
          },
          "isNewOrder": {
            "description": "Specifies if the order is a new order.",
            "type": "boolean",
            "readOnly": true,
            "example": true
          },
          "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": {
                "description": "Shipping settings of the order.\nIf this value is omitted, the order shipping is not affected.",
                "allOf": [
                  {
                    "$ref": "#/components/schemas/Shipping"
                  }
                ]
              },
              "deliveryAddress": {
                "description": "Delivery address of the order.\nIf this value is `null`, the order delivery address is not affected.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ContactObject"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "billingAddress": {
                "description": "Billing address of the order.\nIf this value is `null`, the order billing address is not affected.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ContactObject"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          },
          "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"
      },
      "DigitalWalletCountry": {
        "description": "ISO 3166 alpha-2 country code where the payment is processed.\nThis is often the location for settling the payment.\nConsult with your Payment Service Provider (PSP) to determine the\nappropriate country code.",
        "$ref": "#/components/schemas/Country"
      },
      "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/DigitalWalletCountry"
          }
        }
      },
      "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/DigitalWalletCountry"
          }
        }
      },
      "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.\n\n> **Note:** This field is deprecated. Use the `plan.id` field instead.",
            "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": {
            "oneOf": [
              {
                "$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,
            "default": 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"
          },
          "currentPeriodStart": {
            "description": "Date and time of the current service period start.",
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "currentPeriodEnd": {
            "description": "Date and time of the current service period end.",
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "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"
          },
          "canceledTime": {
            "description": "Date and time when a subscription is canceled.",
            "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",
              "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.\n\n> **Note:** This field is deprecated. Use the `plan.id` field instead.",
            "x-basic": true,
            "type": "string",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X",
            "deprecated": true
          },
          "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"
          },
          "currentPeriodStart": {
            "description": "Date and time of the current service period start.",
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "currentPeriodEnd": {
            "description": "Date and time of the current service period end.",
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "rebillNumber": {
            "description": "Current billing period number.",
            "type": [
              "integer",
              "null"
            ],
            "readOnly": true,
            "x-sortable": true
          },
          "planId": {
            "description": "ID of the plan.\n\n> **Note:** This field is deprecated. Use the `plan.id` field instead.",
            "x-basic": true,
            "type": "string",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X",
            "deprecated": true
          },
          "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"
          },
          "isNewOrder": {
            "description": "Specifies if the order is a new order.",
            "type": "boolean",
            "readOnly": true,
            "example": true
          },
          "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"
                  }
                }
              },
              "payoutRequest": {
                "type": "object",
                "description": "Payout request settings for the website.",
                "properties": {
                  "automaticReadinessEnabled": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether pending payout requests are automatically marked as `ready`.\nWhen this value is `false`, payout requests are created in the `ready` status and automatic transition is not used.\nWhen this value is `true`, payout requests remain in the `pending` status until the pending period elapses and the configured transition time is reached."
                  },
                  "pendingPeriodHours": {
                    "type": "integer",
                    "description": "Minimum number of hours a payout request stays in the `pending` status before it can be automatically set to `ready`.\nRequired when `automaticReadinessEnabled` is `true`.",
                    "minimum": 1,
                    "maximum": 8760,
                    "example": 48
                  },
                  "automaticReadinessTime": {
                    "description": "Time of day when the automatic readiness job processes eligible pending payout requests.\nRequired when `automaticReadinessEnabled` is `true`.\nUse extended ISO-8601 time format (`HH:MM:SS`) with an optional timezone offset.\nWhen the timezone offset is omitted, the server timezone is used.",
                    "allOf": [
                      {
                        "$ref": "#/components/schemas/TimeIso8601Extended"
                      }
                    ],
                    "example": "10:00:00Z"
                  },
                  "automaticReadinessLastExecutedAt": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "format": "date-time",
                    "readOnly": true,
                    "description": "Date and time when the automatic readiness job last completed successfully for this website."
                  }
                }
              }
            }
          },
          "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",
              "null"
            ],
            "x-sortable": true,
            "x-basic": true,
            "example": null,
            "default": null,
            "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 an order is canceled.",
            "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
          },
          "currentPeriodStart": {
            "description": "Date and time of the current service period start.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "currentPeriodEnd": {
            "description": "Date and time of the current service period end.\nIf subscriptions have different recurring settings or the order is not active, providing this field causes the request to be rejected with a conflict.\nThis field is ignored if the order is in trial.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "renewalTime": {
            "description": "Date and time when the next subscription in this recurring order renews.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "isNewOrder": {
            "description": "Specifies if the order is a new order.",
            "type": "boolean",
            "readOnly": true,
            "example": 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
          },
          "isNewOrder": {
            "description": "Specifies if the order is a new order.",
            "type": "boolean",
            "readOnly": true,
            "example": 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": "How the service periods and trial state of the subscription order are managed when its items change.\n\nThe `reset` and `retain` values are deprecated.\nThe deprecated `keepTrial` and `ignoreRecurring` are ignored unless `reset` or `retain` is used.",
            "type": "string",
            "enum": [
              "resetToRecurring",
              "retainRecurring",
              "retainTrialThenRecurring",
              "retainTrialOnly",
              "reset",
              "retain"
            ],
            "x-enumDescriptions": {
              "resetToRecurring": "Resets the service periods, ends any trial, and converts trial-only items to recurring.",
              "retainRecurring": "Retains the current service periods, ends any trial, and converts trial-only items to recurring.",
              "retainTrialThenRecurring": "Retains the trial until it ends, then converts the item to recurring.\nReturns a validation error if the order has no trial.",
              "retainTrialOnly": "Retains the trial and keeps the item as trial-only.\nReturns a validation error if the order is not trial-only.",
              "reset": "Deprecated.\nUse `resetToRecurring` instead.\nResets the `renewalTime` to a newly calculated value.",
              "retain": "Deprecated.\nUse `retainRecurring`, `retainTrialThenRecurring`, or `retainTrialOnly` instead.\nRetains the current `renewalTime`."
            }
          },
          "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 `retainRecurring`, `retainTrialThenRecurring` or `retainTrialOnly`,\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": {
            "deprecated": true,
            "description": "Deprecated.\nUse the `retainTrialThenRecurring` or `retainTrialOnly` value of `renewalPolicy` instead.\n\nSpecifies if the order must retain its active trial.\nThis field is only applicable if `renewalPolicy` is set to the deprecated value `retain`.",
            "type": "boolean",
            "default": false
          },
          "ignoreRecurring": {
            "deprecated": true,
            "description": "Deprecated.\nUse the `retainTrialOnly` value of `renewalPolicy` instead.\n\nSpecifies 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
          }
        }
      },
      "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": "How the service periods and trial state of the subscription order are managed when its items change.\n\nThe `reset` and `retain` values are deprecated.\nThe deprecated `keepTrial` and `ignoreRecurring` are ignored unless `reset` or `retain` is used.",
            "type": "string",
            "enum": [
              "resetToRecurring",
              "retainRecurring",
              "retainTrialThenRecurring",
              "retainTrialOnly",
              "reset",
              "retain"
            ],
            "x-enumDescriptions": {
              "resetToRecurring": "Resets the service periods, ends any trial, and converts trial-only items to recurring.",
              "retainRecurring": "Retains the current service periods, ends any trial, and converts trial-only items to recurring.",
              "retainTrialThenRecurring": "Retains the trial until it ends, then converts the item to recurring.\nReturns a validation error if the order has no trial.",
              "retainTrialOnly": "Retains the trial and keeps the item as trial-only.\nReturns a validation error if the order is not trial-only.",
              "reset": "Deprecated.\nUse `resetToRecurring` instead.\nResets the `renewalTime` to a newly calculated value.",
              "retain": "Deprecated.\nUse `retainRecurring`, `retainTrialThenRecurring`, or `retainTrialOnly` instead.\nRetains the current `renewalTime`."
            }
          },
          "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 `retainRecurring`, `retainTrialThenRecurring` or `retainTrialOnly`,\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": {
            "deprecated": true,
            "description": "Deprecated.\nUse the `retainTrialThenRecurring` or `retainTrialOnly` value of `renewalPolicy` instead.\n\nSpecifies if the order must retain its active trial.\nThis field is only applicable if `renewalPolicy` is set to the deprecated value `retain`.",
            "type": "boolean",
            "default": false
          },
          "ignoreRecurring": {
            "deprecated": true,
            "description": "Deprecated.\nUse the `retainTrialOnly` value of `renewalPolicy` instead.\n\nSpecifies 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 draft 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 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 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"
                }
              }
            }
          },
          "isNewOrder": {
            "description": "Specifies if the order is a new order.",
            "type": "boolean",
            "readOnly": true,
            "example": 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"
          },
          "_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 Device Primary Account Number (DPAN).",
                "type": [
                  "string",
                  "null"
                ],
                "format": "bin",
                "readOnly": true
              },
              "last4": {
                "description": "Last 4 digits of the Device Primary Account Number (DPAN) of the payment card.\nThe DPAN is the tokenized card number used in digital wallet transactions,\nas opposed to the Funding Primary Account Number (FPAN) which is the physical card number visible to the cardholder.",
                "type": "string",
                "readOnly": true
              },
              "fpanLast4": {
                "description": "Last 4 digits of the Funding Primary Account Number (FPAN) of the payment card.\nThe FPAN is the physical card number visible to the cardholder,\nas opposed to the Device Primary Account Number (DPAN) used in digital wallet transactions.",
                "type": [
                  "string",
                  "null"
                ],
                "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
          },
          "walletCurrency": {
            "description": "Currency of the crypto wallet.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "walletNetwork": {
            "description": "Network 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"
          }
        },
        "oneOf": [
          {
            "$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-partially-refunded",
              "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"
              }
            ]
          }
        }
      },
      "AllowedIps": {
        "description": "List of IP addresses that are permitted access.\nPrivate subnets are prohibited.\nTo remove restrictions, set this value to `null`.",
        "type": [
          "array",
          "null"
        ],
        "items": {
          "type": "string",
          "format": "ip"
        },
        "example": [
          "153.12.32.33",
          "201.54.122.0/24",
          "2001:0db8:abcd:0012:0000:0000:0000:ffff",
          "2001:db8:abcd:12::0/64"
        ]
      },
      "ApiKey": {
        "type": "object",
        "description": "API secret Key.",
        "required": [
          "description"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the API key.",
            "maxLength": 50,
            "example": "api_key_0YV7JQMY6ED2FBE58BMFHBWBZH"
          },
          "description": {
            "description": "API key description.",
            "type": "string"
          },
          "type": {
            "description": "Type of API key.",
            "type": "string",
            "default": "secret",
            "enum": [
              "secret",
              "publishable"
            ]
          },
          "acl": {
            "description": "Specify access control list here if creating a restricted API key.\nSend all matching permission with an empty scope to allow all permissions.",
            "$ref": "#/components/schemas/Acl"
          },
          "allowedIps": {
            "$ref": "#/components/schemas/AllowedIps"
          },
          "apiUser": {
            "description": "API user name.",
            "type": "string",
            "readOnly": true
          },
          "secretKey": {
            "description": "Value of the API secret key.",
            "type": "string",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "ChargeTransaction": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the balance transaction.",
            "readOnly": true,
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "type": {
            "description": "Type of balance transaction.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "charge"
            ]
          },
          "parentId": {
            "description": "ID of the parent entry if one exists.\n\nSome types of transactions relate to parent transactions.\nFor example, a `risk-reserve` relates to a `charge`, and a `risk-reserve-release` relates a to `risk-reserve`.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "transactionId": {
            "description": "ID of the related transaction.",
            "$ref": "#/components/schemas/TransactionId"
          },
          "settlementCurrency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "settlementAmount": {
            "x-type": "Money",
            "x-currency-field": "settlementCurrency",
            "x-sortable": true,
            "x-basic": true,
            "description": "Amount of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "settlementTime": {
            "description": "Date and time of the expected settlement.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "settlementRate": {
            "description": "If the settlement currency does not match the transaction currency.\nThis field displays the exchange rate of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "RefundTransaction": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the balance transaction.",
            "readOnly": true,
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "type": {
            "description": "Type of balance transaction.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "refund"
            ]
          },
          "parentId": {
            "description": "ID of the parent entry if one exists.\n\nSome types of transactions relate to parent transactions.\nFor example, a `risk-reserve` relates to a `charge`, and a `risk-reserve-release` relates a to `risk-reserve`.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "transactionId": {
            "description": "ID of the related transaction.",
            "$ref": "#/components/schemas/TransactionId"
          },
          "settlementCurrency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "settlementAmount": {
            "x-type": "Money",
            "x-currency-field": "settlementCurrency",
            "x-sortable": true,
            "x-basic": true,
            "description": "Amount of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "settlementTime": {
            "description": "Date and time of the expected settlement.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "settlementRate": {
            "description": "If the settlement currency does not match the transaction currency.\nThis field displays the exchange rate of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "BuyFeeTransaction": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the balance transaction.",
            "readOnly": true,
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "type": {
            "description": "Type of balance transaction.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "buy-fee"
            ]
          },
          "fee": {
            "type": "object",
            "properties": {
              "name": {
                "description": "Name of the fee.",
                "type": "string"
              }
            }
          },
          "parentId": {
            "description": "ID of the parent entry if one exists.\n\nSome types of transactions relate to parent transactions.\nFor example, a `risk-reserve` relates to a `charge`, and a `risk-reserve-release` relates a to `risk-reserve`.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "transactionId": {
            "description": "ID of the related transaction.",
            "$ref": "#/components/schemas/TransactionId"
          },
          "settlementCurrency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "settlementAmount": {
            "x-type": "Money",
            "x-currency-field": "settlementCurrency",
            "x-sortable": true,
            "x-basic": true,
            "description": "Amount of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "settlementTime": {
            "description": "Date and time of the expected settlement.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "settlementRate": {
            "description": "If the settlement currency does not match the transaction currency.\nThis field displays the exchange rate of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "SellFeeTransaction": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the balance transaction.",
            "readOnly": true,
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "type": {
            "description": "Type of balance transaction.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "sell-fee"
            ]
          },
          "fee": {
            "type": "object",
            "properties": {
              "name": {
                "description": "Name of the fee.",
                "type": "string"
              }
            }
          },
          "parentId": {
            "description": "ID of the parent entry if one exists.\n\nSome types of transactions relate to parent transactions.\nFor example, a `risk-reserve` relates to a `charge`, and a `risk-reserve-release` relates a to `risk-reserve`.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "transactionId": {
            "description": "ID of the related transaction.",
            "$ref": "#/components/schemas/TransactionId"
          },
          "settlementCurrency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "settlementAmount": {
            "x-type": "Money",
            "x-currency-field": "settlementCurrency",
            "x-sortable": true,
            "x-basic": true,
            "description": "Amount of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "settlementTime": {
            "description": "Date and time of the expected settlement.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "settlementRate": {
            "description": "If the settlement currency does not match the transaction currency.\nThis field displays the exchange rate of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "RiskReserveTransaction": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the balance transaction.",
            "readOnly": true,
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "type": {
            "description": "Type of balance transaction.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "risk-reserve"
            ]
          },
          "riskReserve": {
            "type": "object",
            "properties": {
              "releaseTime": {
                "description": "Time of risk reserve release.",
                "type": [
                  "string",
                  "null"
                ],
                "format": "date-time",
                "readOnly": true
              }
            }
          },
          "parentId": {
            "description": "ID of the parent entry if one exists.\n\nSome types of transactions relate to parent transactions.\nFor example, a `risk-reserve` relates to a `charge`, and a `risk-reserve-release` relates a to `risk-reserve`.",
            "type": "string",
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "transactionId": {
            "description": "ID of the related transaction.",
            "$ref": "#/components/schemas/TransactionId"
          },
          "settlementCurrency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "settlementAmount": {
            "x-type": "Money",
            "x-currency-field": "settlementCurrency",
            "x-sortable": true,
            "x-basic": true,
            "description": "Amount of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "settlementTime": {
            "description": "Date and time of the expected settlement.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "settlementRate": {
            "description": "If the settlement currency does not match the transaction currency.\nThis field displays the exchange rate of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "RiskReserveReleaseTransaction": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the balance transaction.",
            "readOnly": true,
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "type": {
            "description": "Type of balance transaction.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "risk-reserve-release"
            ]
          },
          "parentId": {
            "description": "ID of the parent entry if one exists.\n\nSome types of transactions relate to parent transactions.\nFor example, a `risk-reserve` relates to a `charge`, and a `risk-reserve-release` relates a to `risk-reserve`.",
            "type": "string",
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "transactionId": {
            "description": "ID of the related transaction.",
            "$ref": "#/components/schemas/TransactionId"
          },
          "settlementCurrency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "settlementAmount": {
            "x-type": "Money",
            "x-currency-field": "settlementCurrency",
            "x-sortable": true,
            "x-basic": true,
            "description": "Amount of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "settlementTime": {
            "description": "Date and time of the expected settlement.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "settlementRate": {
            "description": "If the settlement currency does not match the transaction currency.\nThis field displays the exchange rate of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "ReverseTransaction": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the balance transaction.",
            "readOnly": true,
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "type": {
            "description": "Type of balance transaction.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "reverse"
            ]
          },
          "parentId": {
            "description": "ID of the parent entry if one exists.\n\nSome types of transactions relate to parent transactions.\nFor example, a `risk-reserve` relates to a `charge`, and a `risk-reserve-release` relates a to `risk-reserve`.",
            "type": "string",
            "maxLength": 50,
            "example": "btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP"
          },
          "transactionId": {
            "description": "ID of the related transaction.",
            "$ref": "#/components/schemas/TransactionId"
          },
          "settlementCurrency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "settlementAmount": {
            "x-type": "Money",
            "x-currency-field": "settlementCurrency",
            "x-sortable": true,
            "x-basic": true,
            "description": "Amount of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "settlementTime": {
            "description": "Date and time of the expected settlement.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "settlementRate": {
            "description": "If the settlement currency does not match the transaction currency.\nThis field displays the exchange rate of the settlement.",
            "type": [
              "number",
              "null"
            ],
            "format": "double"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "BalanceTransaction": {
        "type": "object",
        "title": "Balance transaction",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "charge": "#/components/schemas/ChargeTransaction",
            "refund": "#/components/schemas/RefundTransaction",
            "buy-fee": "#/components/schemas/BuyFeeTransaction",
            "sell-fee": "#/components/schemas/SellFeeTransaction",
            "risk-reserve": "#/components/schemas/RiskReserveTransaction",
            "risk-reserve-release": "#/components/schemas/RiskReserveReleaseTransaction",
            "reverse": "#/components/schemas/ReverseTransaction"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/ChargeTransaction"
          },
          {
            "$ref": "#/components/schemas/RefundTransaction"
          },
          {
            "$ref": "#/components/schemas/BuyFeeTransaction"
          },
          {
            "$ref": "#/components/schemas/SellFeeTransaction"
          },
          {
            "$ref": "#/components/schemas/RiskReserveTransaction"
          },
          {
            "$ref": "#/components/schemas/RiskReserveReleaseTransaction"
          },
          {
            "$ref": "#/components/schemas/ReverseTransaction"
          }
        ]
      },
      "BillingPortal": {
        "type": "object",
        "required": [
          "websiteId",
          "slug",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the billing portal.",
            "readOnly": true,
            "maxLength": 50,
            "example": "bill_prt_0YV7K5TYV5D1P9ZNKDT39KZC3C"
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "slug": {
            "description": "Path segment that is appended to the billing portal URL to help make it human-readable.\nExample: `https://example.com/billing-portal/{slug}`.",
            "type": "string",
            "minLength": 5,
            "maxLength": 100
          },
          "name": {
            "description": "Billing portal name.\nThis name is for internal use and helps you to organize and differentiate billing portals.\nThis value is not displayed to your customers.",
            "type": "string"
          },
          "customDomain": {
            "description": "Custom domain for the billing portal.\nThe default domain is: `portal.secure-payments.app`.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          },
          "features": {
            "description": "Features that can be enabled for the billing portal.",
            "type": "object",
            "properties": {
              "authenticateWithPassword": {
                "description": "Specifies if a customer can authenticate with a password.",
                "type": "boolean",
                "default": true
              },
              "orderCancel": {
                "description": "Specifies if a customer can cancel an order.",
                "type": "boolean",
                "default": true
              },
              "orderAddressEdit": {
                "description": "Specifies if a customer can change an order address.",
                "type": "boolean",
                "default": true
              },
              "paymentInstrumentAdd": {
                "description": "Specifies if a customer can add a new payment instrument.",
                "type": "boolean",
                "default": true
              },
              "paymentInstrumentUpdate": {
                "description": "Specifies if a customer can update their payment instruments.",
                "type": "boolean",
                "default": true
              },
              "paymentInstrumentDeactivate": {
                "description": "Specifies if a customer can disable their payment instruments.",
                "type": "boolean",
                "default": true
              }
            }
          },
          "customization": {
            "description": "Visual customization options for the billing portal.",
            "type": "object",
            "properties": {
              "logoId": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "File ID of the billing portal logo.",
                "maxLength": 50,
                "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
              },
              "colors": {
                "description": "Various colors used in the billing portal.",
                "type": "object",
                "properties": {
                  "primary": {
                    "description": "Primary color for the billing portal in hexadecimal format.",
                    "type": "string",
                    "maxLength": 6,
                    "default": "0044d4"
                  },
                  "secondary": {
                    "description": "Secondary color for the billing portal in hexadecimal format.",
                    "type": "string",
                    "maxLength": 6,
                    "default": "ffffff"
                  }
                }
              },
              "links": {
                "description": "URLs that are displayed in the billing portal.",
                "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"
                  }
                }
              }
            }
          },
          "status": {
            "description": "Status of the billing portal. If the status is `inactive`,\nthe billing portal URL results in a 404 error.",
            "type": "string",
            "enum": [
              "active",
              "inactive"
            ],
            "default": "active"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "BroadcastMessage": {
        "type": "object",
        "required": [
          "startSendingTime",
          "messages"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the broadcast message.",
            "readOnly": true,
            "maxLength": 50,
            "example": "mail_bcst_0YV8XW5EXWDVEAP64XP8CY2X40"
          },
          "filter": {
            "type": [
              "string",
              "null"
            ],
            "description": "Use this filter to select customers during broadcast message processing.\n\nThis field uses the same syntax as the `query` filter,\nbut without the `filter=` prefix. Examples: `firstName:John`, `firstName:John;lastName:Doe`.\n\n> **Important**: Do not URL encode the filter value.",
            "example": "firstName:John;lastName:Doe"
          },
          "title": {
            "type": "string",
            "description": "Title of the message.\nThis title displays in reports.",
            "maxLength": 255
          },
          "messages": {
            "type": "array",
            "description": "List of messages.",
            "minItems": 1,
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "ID of the message."
                },
                "version": {
                  "type": "string",
                  "maxLength": 255,
                  "description": "Version of the message.\nUse this field to distinguish between multiple messages by name and version.\nIf there are no versions, this field is empty."
                },
                "weight": {
                  "type": "integer",
                  "description": "Weight distribution value that is assigned to a template for a split test.\nEach template in a split test can be assigned a weight.\nThe higher the weight value, the more likely the message template is used.\n\nThe split test algorithm does not assess locale when making a weighted template selection.",
                  "minimum": 0,
                  "maximum": 100,
                  "example": 75,
                  "default": 100
                },
                "templates": {
                  "description": "Split test templates.\n\nUse split tests to determine which content is most effective.\nSplit tests send variations of the same message to different customers or leads.\nYou can then send the winning message to the remaining customers or leads.",
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "type": "object",
                    "properties": {
                      "from": {
                        "type": "string",
                        "description": "Email address of the sender.\n\n> **Important:** This value must be a verified email address.\n\nTo verify an email address:\n  1. [Create an email delivery setting](https://www.rebilly.com/catalog/all/email-delivery-settings/postemaildeliverysetting/).\n  In the response, you receive the email and a token.\n  1. [Verify the email delivery](https://www.rebilly.com/catalog/all/email-delivery-settings/putemaildeliverysettingsverification/) by passing the token as the path parameter.",
                        "maxLength": 254,
                        "example": "example@example.com"
                      },
                      "subject": {
                        "type": "string",
                        "description": "Subject of the message.\nThe use of template placeholders is permitted for this field.",
                        "maxLength": 998,
                        "example": "Demonstration subject"
                      },
                      "text": {
                        "type": "string",
                        "description": "Text body of the message.\nTo use content from the `html` field, leave this field empty.\nThe use of template placeholders is permitted for this field.",
                        "example": "Demonstration text"
                      },
                      "html": {
                        "type": "string",
                        "description": "HTML body of the message.\nTo use content from the `text` field, leave this field empty.\nThe use of template placeholders is permitted for this field.",
                        "example": "<p>Demonstration text</p>"
                      },
                      "locale": {
                        "type": "string",
                        "description": "Language locale identifier in [RFC 5646](https://tools.ietf.org/html/rfc5646) format.",
                        "example": "fr-FR"
                      }
                    },
                    "required": [
                      "from",
                      "subject",
                      "text",
                      "html",
                      "locale"
                    ]
                  }
                }
              },
              "required": [
                "templates"
              ]
            }
          },
          "splitTestStartTime": {
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "description": "Date and time when the split test messages are scheduled to send."
          },
          "startSendingTime": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the message is scheduled to send."
          },
          "status": {
            "readOnly": true,
            "type": "string",
            "description": "Status of the broadcast message.",
            "enum": [
              "draft",
              "sending",
              "sent",
              "archived"
            ]
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "PatchBroadcastMessage": {
        "type": "object",
        "properties": {
          "filter": {
            "type": [
              "string",
              "null"
            ],
            "description": "Use this filter to select customers during broadcast message processing.\n\nThis field uses the same syntax as the `query` filter,\nbut without the `filter=` prefix. Examples: `firstName:John`, `firstName:John;lastName:Doe`.\n\n> **Important**: Do not URL encode the filter value.",
            "example": "firstName:John;lastName:Doe"
          },
          "title": {
            "type": "string",
            "description": "Title of the message.\nThis title displays in reports.",
            "maxLength": 255
          },
          "messages": {
            "type": "array",
            "description": "List of messages.",
            "minItems": 1,
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "format": "uuid",
                  "description": "ID of the message."
                },
                "version": {
                  "type": "string",
                  "maxLength": 255,
                  "description": "Version of the message.\nUse this field to distinguish between multiple messages by name and version.\nIf there are no versions, this field is empty."
                },
                "weight": {
                  "type": "integer",
                  "description": "Weight distribution value that is assigned to a template for a split test.\nEach template in a split test can be assigned a weight.\nThe higher the weight value, the more likely the message template is used.\n\nThe split test algorithm does not assess locale when making a weighted template selection.",
                  "minimum": 0,
                  "maximum": 100,
                  "example": 75,
                  "default": 100
                },
                "templates": {
                  "description": "Split test templates.\n\nUse split tests to determine which content is most effective.\nSplit tests send variations of the same message to different customers or leads.\nYou can then send the winning message to the remaining customers or leads.",
                  "type": "array",
                  "minItems": 1,
                  "items": {
                    "type": "object",
                    "properties": {
                      "from": {
                        "type": "string",
                        "description": "Email address of the sender.\n\n> **Important:** This value must be a verified email address.\n\nTo verify an email address:\n  1. [Create an email delivery setting](https://www.rebilly.com/catalog/all/email-delivery-settings/postemaildeliverysetting/).\n  In the response, you receive the email and a token.\n  1. [Verify the email delivery](https://www.rebilly.com/catalog/all/email-delivery-settings/putemaildeliverysettingsverification/) by passing the token as the path parameter.",
                        "maxLength": 254,
                        "example": "example@example.com"
                      },
                      "subject": {
                        "type": "string",
                        "description": "Subject of the message.\nThe use of template placeholders is permitted for this field.",
                        "maxLength": 998,
                        "example": "Demonstration subject"
                      },
                      "text": {
                        "type": "string",
                        "description": "Text body of the message.\nTo use content from the `html` field, leave this field empty.\nThe use of template placeholders is permitted for this field.",
                        "example": "Demonstration text"
                      },
                      "html": {
                        "type": "string",
                        "description": "HTML body of the message.\nTo use content from the `text` field, leave this field empty.\nThe use of template placeholders is permitted for this field.",
                        "example": "<p>Demonstration text</p>"
                      },
                      "locale": {
                        "type": "string",
                        "description": "Language locale identifier in [RFC 5646](https://tools.ietf.org/html/rfc5646) format.",
                        "example": "fr-FR"
                      }
                    },
                    "required": [
                      "from",
                      "subject",
                      "text",
                      "html",
                      "locale"
                    ]
                  }
                }
              },
              "required": [
                "templates"
              ]
            }
          },
          "startSendingTime": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the message is scheduled to send."
          },
          "status": {
            "type": "string",
            "description": "Status of the broadcast message.\nSetting it to `archived` archives the message, but only if it has already been sent.",
            "enum": [
              "draft",
              "archived"
            ]
          }
        }
      },
      "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."
            }
          },
          "coinPurchase": {
            "type": "boolean",
            "readOnly": true,
            "description": "Specifies if the deposit is a coin purchase that credits the coin balance instead of the cash balance.\nDetermined by the deposit amount strategy that is applied to the deposit request."
          },
          "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
              },
              "buttonText": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Localized overrides for the custom amount button label, as a map of locale codes to display strings.\nFor example, `{\"en-US\": \"Other amount\", \"fr\": \"Montant personnalisé\"}`.\nIf this value is `null` or not provided, the default UI translation is used.",
                "additionalProperties": {
                  "type": "string"
                },
                "example": {
                  "en-US": "Other amount",
                  "fr": "Montant personnalisé"
                }
              }
            }
          },
          "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: false\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"
          },
          "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"
          }
        }
      },
      "Cashier": {
        "type": "object",
        "required": [
          "id",
          "customerId",
          "websiteId",
          "redirectUrl",
          "expirationTime",
          "currency",
          "balance",
          "bonusBalance",
          "pendingPayoutTotal",
          "canWithdraw",
          "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.",
            "readOnly": true,
            "example": 1500
          },
          "bonusBalance": {
            "type": "number",
            "format": "double",
            "minimum": 0,
            "description": "Bonus balance available to the customer.",
            "readOnly": true,
            "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.",
            "readOnly": true,
            "example": 100
          },
          "canWithdraw": {
            "type": "boolean",
            "readOnly": true,
            "description": "Specifies if the customer can initiate a withdrawal."
          },
          "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
              },
              "buttonText": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Localized overrides for the custom amount button label, as a map of locale codes to display strings.\nFor example, `{\"en-US\": \"Other amount\", \"fr\": \"Montant personnalisé\"}`.\nIf this value is `null` or not provided, the default UI translation is used.",
                "additionalProperties": {
                  "type": "string"
                },
                "example": {
                  "en-US": "Other amount",
                  "fr": "Montant personnalisé"
                }
              }
            }
          },
          "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
          },
          "coinPurchase": {
            "type": "boolean",
            "description": "Specifies if deposits created from this strategy are coin purchases that credit the coin balance instead of the cash balance.",
            "default": false
          },
          "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"
          }
        }
      },
      "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"
                  ]
                }
              }
            }
          }
        }
      },
      "SmtpAuthorizationNone": {
        "type": "object",
        "required": [
          "type"
        ],
        "properties": {
          "type": {
            "type": "string",
            "enum": [
              "none"
            ],
            "default": "none"
          }
        }
      },
      "SmtpAuthorizationCramMd5": {
        "type": "object",
        "properties": {
          "username": {
            "description": "Authentication username.",
            "type": "string"
          },
          "password": {
            "description": "Authentication password.",
            "type": "string",
            "format": "password"
          },
          "type": {
            "type": "string",
            "enum": [
              "cram-md5"
            ],
            "default": "none"
          }
        },
        "required": [
          "username",
          "password",
          "type"
        ]
      },
      "SmtpAuthorizationLogin": {
        "type": "object",
        "properties": {
          "username": {
            "description": "Authentication username.",
            "type": "string"
          },
          "password": {
            "description": "Authentication password.",
            "type": "string",
            "format": "password"
          },
          "type": {
            "type": "string",
            "enum": [
              "login"
            ],
            "default": "none"
          }
        },
        "required": [
          "username",
          "password",
          "type"
        ]
      },
      "SmtpAuthorizationPlain": {
        "type": "object",
        "properties": {
          "username": {
            "description": "Authentication username.",
            "type": "string"
          },
          "password": {
            "description": "Authentication password.",
            "type": "string",
            "format": "password"
          },
          "type": {
            "type": "string",
            "enum": [
              "plain"
            ],
            "default": "none"
          }
        },
        "required": [
          "username",
          "password",
          "type"
        ]
      },
      "SmtpAuthorization": {
        "type": "object",
        "description": "Authentication type and details.",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "none": "#/components/schemas/SmtpAuthorizationNone",
            "cram-md5": "#/components/schemas/SmtpAuthorizationCramMd5",
            "login": "#/components/schemas/SmtpAuthorizationLogin",
            "plain": "#/components/schemas/SmtpAuthorizationPlain"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/SmtpAuthorizationNone"
          },
          {
            "$ref": "#/components/schemas/SmtpAuthorizationCramMd5"
          },
          {
            "$ref": "#/components/schemas/SmtpAuthorizationLogin"
          },
          {
            "$ref": "#/components/schemas/SmtpAuthorizationPlain"
          }
        ]
      },
      "SmtpCredential": {
        "type": "object",
        "description": "SMTP credential.",
        "required": [
          "host",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "hash": {
            "deprecated": true,
            "type": "string",
            "description": "ID of the credential.\nUse the `id` field instead.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "deactivationTime": {
            "description": "Date and time when the credential is deactivated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "type": {
            "description": "Type of credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "smtp"
            ]
          },
          "host": {
            "type": "string",
            "description": "SMTP host name."
          },
          "port": {
            "type": "integer",
            "description": "SMTP port value.",
            "minimum": 1,
            "maximum": 65535,
            "default": 25
          },
          "encryption": {
            "type": "string",
            "description": "Encryption value.",
            "enum": [
              "none",
              "tls",
              "ssl"
            ],
            "default": "none"
          },
          "auth": {
            "$ref": "#/components/schemas/SmtpAuthorization"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "WebhookAuthorizationNone": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of authorization.",
            "enum": [
              "none"
            ],
            "default": "none"
          }
        },
        "required": [
          "type"
        ]
      },
      "WebhookAuthorizationBasic": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of authorization.",
            "enum": [
              "basic"
            ],
            "default": "none"
          },
          "username": {
            "description": "Username for basic authentication.",
            "type": "string"
          },
          "password": {
            "description": "Password for basic authentication.",
            "type": "string",
            "format": "password"
          }
        },
        "required": [
          "username",
          "password",
          "type"
        ]
      },
      "WebhookAuthorizationDigest": {
        "type": "object",
        "properties": {
          "type": {
            "type": "string",
            "description": "Type of authorization.",
            "enum": [
              "digest"
            ],
            "default": "none"
          },
          "username": {
            "description": "Authentication username.",
            "type": "string"
          },
          "password": {
            "description": "Authentication password.",
            "type": "string",
            "format": "password"
          }
        },
        "required": [
          "username",
          "password",
          "type"
        ]
      },
      "WebhookAuthorization": {
        "type": "object",
        "description": "Authentication type and details.",
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "none": "#/components/schemas/WebhookAuthorizationNone",
            "basic": "#/components/schemas/WebhookAuthorizationBasic",
            "digest": "#/components/schemas/WebhookAuthorizationDigest"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/WebhookAuthorizationNone"
          },
          {
            "$ref": "#/components/schemas/WebhookAuthorizationBasic"
          },
          {
            "$ref": "#/components/schemas/WebhookAuthorizationDigest"
          }
        ]
      },
      "WebhookCredential": {
        "type": "object",
        "description": "Credential for webhook authentication.\nCredentials are associated with a host and contain authentication details.",
        "required": [
          "host",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "hash": {
            "deprecated": true,
            "type": "string",
            "description": "ID of the credential.\nUse the `id` field instead.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "deactivationTime": {
            "description": "Date and time when the credential is deactivated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "type": {
            "description": "Type of credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "webhook"
            ]
          },
          "host": {
            "type": "string",
            "description": "Name of the host.",
            "pattern": "^[A-Za-z0-9-.]+$",
            "example": "app-prod.example.com"
          },
          "auth": {
            "$ref": "#/components/schemas/WebhookAuthorization"
          }
        }
      },
      "ExperianCredential": {
        "type": "object",
        "description": "Experian integration provides identity verification.\nFor more information, see [Experian integration](https://www.rebilly.com/docs/automations/experian-integration/#experian-integration).",
        "required": [
          "username",
          "password",
          "hmacKey",
          "publicKey",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "hash": {
            "deprecated": true,
            "type": "string",
            "description": "ID of the credential.\nUse the `id` field instead.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "deactivationTime": {
            "description": "Date and time when the credential is deactivated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "type": {
            "description": "Type of credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "experian"
            ]
          },
          "username": {
            "type": "string",
            "description": "Username of the Experian account."
          },
          "password": {
            "type": "string",
            "description": "Password of the Experian account.",
            "format": "password"
          },
          "hmacKey": {
            "type": "string",
            "description": "HMAC key that is used to generate the signature for Experian requests.",
            "format": "password",
            "example": "PxOclToLSxW4oAB5N5HSdfoslyEWuvfkLjfHeNG2aZY~"
          },
          "publicKey": {
            "type": "string",
            "description": "HMAC public key that is included in the signature for Experian requests.",
            "example": "8831AA5552FE10CD"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "MailgunCredential": {
        "type": "object",
        "description": "Mailgun credential.",
        "required": [
          "emailFrom",
          "apiKey",
          "domain",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "hash": {
            "deprecated": true,
            "type": "string",
            "description": "ID of the credential.\nUse the `id` field instead.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "deactivationTime": {
            "description": "Date and time when the credential is deactivated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "type": {
            "description": "Type of credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "mailgun"
            ]
          },
          "emailFrom": {
            "type": "string",
            "format": "email",
            "description": "Address from which emails are sent.",
            "minLength": 1,
            "maxLength": 254
          },
          "apiKey": {
            "type": "string",
            "description": "Mailgun API key."
          },
          "domain": {
            "type": "string",
            "description": "Mailgun domain."
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "OAuth2Credential": {
        "type": "object",
        "description": "OAuth2 credential.",
        "required": [
          "code",
          "scopes",
          "service",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "hash": {
            "deprecated": true,
            "type": "string",
            "description": "ID of the credential.\nUse the `id` field instead.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "deactivationTime": {
            "description": "Date and time when the credential is deactivated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "type": {
            "description": "Type of credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "oauth2"
            ]
          },
          "service": {
            "description": "Name of the service to which the OAuth2 credential relates.",
            "type": "string",
            "enum": [
              "google-sheets",
              "intuit-quickbooks"
            ]
          },
          "code": {
            "description": "OAuth2 code provided by the authentication server.",
            "type": "string",
            "example": "2/smAHUUr9jOxw_IOp47Y_dH1r2Y"
          },
          "accessToken": {
            "description": "OAuth2 access token.",
            "readOnly": true,
            "type": "string",
            "example": "S9R4RoGpzaRrJd5MYjZIONQ2MjWSCj7N7Iqp9BXXFIbkh"
          },
          "refreshToken": {
            "description": "OAuth2 refresh token.",
            "readOnly": true,
            "type": "string",
            "example": "2/4DPERp2EiySF6JUIOTS4jM5f0JmLG2gPcpGaWYTGU94"
          },
          "expirationTime": {
            "description": "Date and time when the access token expires.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "format": "date-time"
          },
          "scopes": {
            "description": "List of URLs that are granted OAuth2 access.",
            "type": "array",
            "items": {
              "type": "string"
            },
            "example": [
              "https://www.googleapis.com/auth/drive.metadata.readonly"
            ]
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "PostmarkCredential": {
        "type": "object",
        "description": "Postmark credential.",
        "required": [
          "serverApiToken",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "hash": {
            "deprecated": true,
            "type": "string",
            "description": "ID of the credential.\nUse the `id` field instead.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "deactivationTime": {
            "description": "Date and time when the credential is deactivated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "type": {
            "description": "Type of credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "postmark"
            ]
          },
          "serverApiToken": {
            "type": "string",
            "description": "Postmark server API token.",
            "example": "dd0508z9-2291-6794-3376-z0a70g12eqm9"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "SendGridCredential": {
        "type": "object",
        "description": "SendGrid credential.",
        "required": [
          "apiKey",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "hash": {
            "deprecated": true,
            "type": "string",
            "description": "ID of the credential.\nUse the `id` field instead.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "deactivationTime": {
            "description": "Date and time when the credential is deactivated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "type": {
            "description": "Type of credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "sendgrid"
            ]
          },
          "apiKey": {
            "type": "string",
            "description": "SendGrid API key.",
            "example": "SO.WFbRlSWUQJSb40eny4RuZQ.7liHLZ4l1jaPCgbu02b-aGH-bo4RB8z9fK3aUd1heeL"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "SESCredential": {
        "type": "object",
        "description": "Amazon Web Services (AWS) Simple Email Service (SES) credential.",
        "required": [
          "key",
          "secret",
          "region",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "hash": {
            "deprecated": true,
            "type": "string",
            "description": "ID of the credential.\nUse the `id` field instead.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "deactivationTime": {
            "description": "Date and time when the credential is deactivated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "type": {
            "description": "Type of credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "aws-ses"
            ]
          },
          "key": {
            "type": "string",
            "description": "ID of the AWS access key.",
            "example": "BWITYO4UARGDLMFY6UDP"
          },
          "secret": {
            "type": "string",
            "description": "Secret AWS access key.",
            "example": "8D34yYHOK9+yM7pDnNUO3UTO/5b8Wy/PGNyzTRmG"
          },
          "region": {
            "type": "string",
            "description": "AWS region name.",
            "example": "us-west-2"
          },
          "configurationSetName": {
            "type": "string",
            "description": "Name of configuration set from which emails are sent.",
            "example": "SpecialConfigurationSet"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "TaxJarCredential": {
        "type": "object",
        "description": "TaxJar integration enables you to calculate taxes and create transactions for the Sales Tax AutoFile feature in your TaxJar account.\nFor more information, see [TaxJar integration](https://www.rebilly.com/docs/automations/tax-jar-integration/#taxjar-integration).",
        "required": [
          "apiToken",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "hash": {
            "deprecated": true,
            "type": "string",
            "description": "ID of the credential.\nUse the `id` field instead.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "deactivationTime": {
            "description": "Date and time when the credential is deactivated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "type": {
            "description": "Type of credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "taxjar"
            ]
          },
          "apiToken": {
            "type": "string",
            "description": "TaxJar API token.",
            "format": "password",
            "example": "0ab15e3c1cc608b6f592fbddaddeb8f2"
          },
          "omitFromAddress": {
            "type": "boolean",
            "description": "Specifies if `from_` address fields must be omitted in TaxJar request.\nFor more information, see [TaxJar API guide](https://developers.taxjar.com/api/guides/#when-to-use-from_-address-information).",
            "default": false,
            "example": false
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "AvalaraCredential": {
        "type": "object",
        "description": "Avalara integration enables you to calculate taxes and create transactions in your Avalara account.",
        "required": [
          "licenseKey",
          "accountId",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "hash": {
            "deprecated": true,
            "type": "string",
            "description": "ID of the credential.\nUse the `id` field instead.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "deactivationTime": {
            "description": "Date and time when the credential is deactivated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "type": {
            "description": "Type of credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "avalara"
            ]
          },
          "licenseKey": {
            "type": "string",
            "description": "Avalara license key.",
            "format": "password",
            "example": "0ab15e3c1cc608b6f592fbddaddeb8f2"
          },
          "accountId": {
            "type": "string",
            "description": "ID of the Avalara account.",
            "example": "a1b2c3d4e5f6"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "PlaidCredential": {
        "type": "object",
        "description": "Plaid integration provides customer bank credential verification,\nand simplifies the process of providing credentials for your customers.\nFor more information, see [Plaid integration](https://www.rebilly.com/docs/automations/plaid-integration/).",
        "required": [
          "clientId",
          "secretToken",
          "type"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the credential.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "hash": {
            "deprecated": true,
            "type": "string",
            "description": "ID of the credential.\nUse the `id` field instead.",
            "readOnly": true,
            "maxLength": 36,
            "example": "crd_0YV9Y706QGCB39FQD380G1ZHZH"
          },
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "deactivationTime": {
            "description": "Date and time when the credential is deactivated.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "type": {
            "description": "Type of credential.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "plaid"
            ]
          },
          "websiteId": {
            "type": "string",
            "description": "ID of the website that is assigned to the Plaid account.\nIf this value is not set, credentials are for all websites.",
            "maxLength": 50,
            "example": "web_0YV7DE4Z26DQSA1AC92FBJ7SEG"
          },
          "clientId": {
            "type": "string",
            "description": "ID of the Plaid client.",
            "example": "5efc712byyf502zz11f9bexx"
          },
          "secretToken": {
            "type": "string",
            "description": "Plaid secret token.",
            "format": "password",
            "example": "d184cfdgdb4597dfsa9365f59356b"
          },
          "useStripe": {
            "type": "boolean",
            "description": "Specifies if a Stripe integration is enabled for the Plaid account.\nThis setting enables the creation of Stripe bank account tokens.",
            "default": false,
            "example": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "ServiceCredential": {
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "smtp": "#/components/schemas/SmtpCredential",
            "webhook": "#/components/schemas/WebhookCredential",
            "experian": "#/components/schemas/ExperianCredential",
            "mailgun": "#/components/schemas/MailgunCredential",
            "oauth2": "#/components/schemas/OAuth2Credential",
            "postmark": "#/components/schemas/PostmarkCredential",
            "sendgrid": "#/components/schemas/SendGridCredential",
            "aws-ses": "#/components/schemas/SESCredential",
            "taxjar": "#/components/schemas/TaxJarCredential",
            "avalara": "#/components/schemas/AvalaraCredential",
            "plaid": "#/components/schemas/PlaidCredential"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/SmtpCredential"
          },
          {
            "$ref": "#/components/schemas/WebhookCredential"
          },
          {
            "$ref": "#/components/schemas/ExperianCredential"
          },
          {
            "$ref": "#/components/schemas/MailgunCredential"
          },
          {
            "$ref": "#/components/schemas/OAuth2Credential"
          },
          {
            "$ref": "#/components/schemas/PostmarkCredential"
          },
          {
            "$ref": "#/components/schemas/SendGridCredential"
          },
          {
            "$ref": "#/components/schemas/SESCredential"
          },
          {
            "$ref": "#/components/schemas/TaxJarCredential"
          },
          {
            "$ref": "#/components/schemas/AvalaraCredential"
          },
          {
            "$ref": "#/components/schemas/PlaidCredential"
          }
        ]
      },
      "PostSmtpCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SmtpCredential"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
                "type": "string",
                "enum": [
                  "smtp"
                ],
                "readOnly": false
              }
            }
          }
        ]
      },
      "PostWebhookCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/WebhookCredential"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
                "type": "string",
                "enum": [
                  "webhook"
                ],
                "readOnly": false
              }
            }
          }
        ]
      },
      "PostExperianCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/ExperianCredential"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
                "type": "string",
                "enum": [
                  "experian"
                ],
                "readOnly": false
              }
            }
          }
        ]
      },
      "PostMailgunCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/MailgunCredential"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
                "type": "string",
                "enum": [
                  "mailgun"
                ],
                "readOnly": false
              }
            }
          }
        ]
      },
      "PostOAuth2Credential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/OAuth2Credential"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
                "type": "string",
                "enum": [
                  "oauth2"
                ],
                "readOnly": false
              }
            }
          }
        ]
      },
      "PostPostmarkCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PostmarkCredential"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
                "type": "string",
                "enum": [
                  "postmark"
                ],
                "readOnly": false
              }
            }
          }
        ]
      },
      "PostSendGridCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SendGridCredential"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
                "type": "string",
                "enum": [
                  "sendgrid"
                ],
                "readOnly": false
              }
            }
          }
        ]
      },
      "PostAwsSesCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/SESCredential"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
                "type": "string",
                "enum": [
                  "aws-ses"
                ],
                "readOnly": false
              }
            }
          }
        ]
      },
      "PostTaxJarCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/TaxJarCredential"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
                "type": "string",
                "enum": [
                  "taxjar"
                ],
                "readOnly": false
              }
            }
          }
        ]
      },
      "PostAvalaraCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/AvalaraCredential"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
                "type": "string",
                "enum": [
                  "avalara"
                ],
                "readOnly": false
              }
            }
          }
        ]
      },
      "PostPlaidCredential": {
        "allOf": [
          {
            "$ref": "#/components/schemas/PlaidCredential"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
                "type": "string",
                "enum": [
                  "plaid"
                ],
                "readOnly": false
              }
            }
          }
        ]
      },
      "PatchServiceCredential": {
        "type": "object",
        "required": [
          "status",
          "type"
        ],
        "properties": {
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "type": {
            "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
            "type": "string",
            "enum": [
              "smtp",
              "webhook",
              "mailgun",
              "sendgrid",
              "aws-ses",
              "oauth2",
              "postmark",
              "experian",
              "avalara"
            ]
          }
        }
      },
      "PatchPlaidCredential": {
        "type": "object",
        "description": "Plaid credential.",
        "required": [
          "type"
        ],
        "properties": {
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "websiteId": {
            "type": "string",
            "description": "ID of the website that is assigned to the Plaid account.\nIf this value is not set, credentials are for all websites.",
            "maxLength": 50,
            "example": "web_0YV7DE4Z26DQSA1AC92FBJ7SEG"
          },
          "clientId": {
            "type": "string",
            "description": "ID of the Plaid client.",
            "example": "5efc712byyf502zz11f9bexx"
          },
          "secretToken": {
            "type": "string",
            "description": "Plaid secret token.",
            "format": "password",
            "example": "d184cfdgdb4597dfsa9365f59356b"
          },
          "useStripe": {
            "type": "boolean",
            "description": "Specifies if a Stripe integration is enabled for the Plaid account.\nThis setting enables the creation of Stripe bank account tokens.",
            "default": false,
            "example": true
          },
          "type": {
            "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
            "type": "string",
            "enum": [
              "plaid"
            ]
          }
        }
      },
      "PatchTaxJarCredential": {
        "type": "object",
        "description": "TaxJar credential.",
        "required": [
          "status",
          "type"
        ],
        "properties": {
          "status": {
            "description": "Status of the credential.",
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "deactivated"
            ],
            "x-enumDescriptions": {
              "active": "Credential is active and can be used.",
              "inactive": "Credential is temporarily inactivated and cannot be used until reactivated.",
              "deactivated": "Credential is permanently deactivated and cannot be reactivated."
            }
          },
          "omitFromAddress": {
            "type": "boolean",
            "description": "Specifies if `from_` address fields must be omitted in TaxJar request.\nFor more information, see [TaxJar API guide](https://developers.taxjar.com/api/guides/#when-to-use-from_-address-information).",
            "example": false
          },
          "type": {
            "description": "Type of the credential.\nValue that matches the `{type}` path parameter.\nFor backward compatibility, when this field is absent,\nthe `{type}` path parameter supplies the credential type.",
            "type": "string",
            "enum": [
              "taxjar"
            ]
          }
        }
      },
      "GoogleSpreadsheet": {
        "type": "object",
        "properties": {
          "id": {
            "description": "ID of the Google Spreadsheet.",
            "readOnly": true,
            "type": "string",
            "example": "2ytkMntAC2Ke7aIgpaOBjz9IORRlNRjwFqO7KvyNam3B"
          },
          "name": {
            "readOnly": true,
            "description": "Name of the Google Spreadsheet.",
            "type": "string",
            "example": "Spreadsheet 1"
          }
        }
      },
      "CustomDomain": {
        "type": "object",
        "required": [
          "domain"
        ],
        "properties": {
          "id": {
            "description": "ID of the custom domain.",
            "type": "string",
            "maxLength": 255,
            "readOnly": true
          },
          "domain": {
            "description": "Fully qualified domain name.",
            "type": "string",
            "maxLength": 255
          },
          "isVerified": {
            "description": "True if the domain is verified by Rebilly.",
            "type": "boolean",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "EmailDeliverySetting": {
        "type": "object",
        "required": [
          "from",
          "name"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the email delivery setting.",
            "readOnly": true,
            "maxLength": 50,
            "example": "mail_dst_0YVCNQV8PSCERAJ7N1V4WWPZN2"
          },
          "from": {
            "description": "Email address of the sender.\n\n> **Important:** This email address must be unique within your account.",
            "type": "string",
            "format": "email",
            "maxLength": 254,
            "example": "from-example@rebilly.com"
          },
          "name": {
            "description": "Name of the sender.",
            "type": "string",
            "example": "John Doe"
          },
          "status": {
            "description": "Status of the email message.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "verified"
            ]
          },
          "credentialId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the SMTP or Email Service Provider (ESP) credential.",
            "example": "b120c2ca-6c2b-4690-9dff-3b0d87852dc7"
          },
          "provider": {
            "readOnly": true,
            "description": "Email service provider name.",
            "type": "string",
            "enum": [
              "rebilly",
              "smtp",
              "aws-ses",
              "mailgun",
              "postmark",
              "sendgrid"
            ],
            "example": "rebilly"
          },
          "isDefault": {
            "type": "boolean",
            "description": "Specifies if the email delivery setting is used by default.",
            "default": false
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "EmailMessage": {
        "type": "object",
        "required": [
          "from",
          "to",
          "subject",
          "text",
          "html"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the email message.",
            "readOnly": true,
            "maxLength": 50,
            "example": "mail_msg_0YVCNR8ZRBCVMAX28DP4XRFZVA"
          },
          "status": {
            "description": "Status of the email message.",
            "type": "string",
            "enum": [
              "draft",
              "outbox",
              "sent",
              "failed"
            ],
            "default": "draft"
          },
          "metadata": {
            "description": "Metadata associated with the email message.",
            "type": [
              "object",
              "null"
            ],
            "additionalProperties": {
              "type": "string"
            },
            "example": {
              "eventType": "subscription-canceled"
            }
          },
          "credentialHash": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the SMTP or Email Service Provider (ESP) credential.",
            "example": "b120c2ca-6c2b-4690-9dff-3b0d87852dc7"
          },
          "from": {
            "description": "Email address of the sender.",
            "type": "string",
            "format": "email",
            "maxLength": 254,
            "example": "from-example@rebilly.com"
          },
          "to": {
            "description": "List of email addresses to which the email message is sent.",
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "string",
              "format": "email",
              "maxLength": 254
            },
            "example": [
              "to-example@rebilly.com"
            ]
          },
          "cc": {
            "description": "List of CC email addresses to which the email message is sent.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email",
              "maxLength": 254
            },
            "example": [
              "cc-example@rebilly.com"
            ]
          },
          "bcc": {
            "description": "List of BCC email addresses to which the email message is sent.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email",
              "maxLength": 254
            },
            "example": [
              "cc-example@rebilly.com"
            ]
          },
          "subject": {
            "description": "Subject of the email message.",
            "type": "string",
            "maxLength": 998,
            "example": "Welcome dear customer!"
          },
          "text": {
            "description": "Body of the email message in plain text.",
            "type": "string",
            "example": "Email message text body"
          },
          "html": {
            "description": "Body of the email message in HTML format.",
            "type": "string",
            "example": "<p>Email message html body</p>"
          },
          "attachments": {
            "description": "Attachments of the email message.",
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "resourceType",
                "resourceId"
              ],
              "properties": {
                "resourceType": {
                  "description": "Type of attachment resource.",
                  "type": "string",
                  "example": "invoice"
                },
                "resourceId": {
                  "type": "string",
                  "description": "ID of the attachment resource.",
                  "maxLength": 50,
                  "example": "att_0YV7J787J0DW0918MQQMDHWA7M"
                }
              }
            }
          },
          "responseCode": {
            "type": [
              "integer",
              "null"
            ],
            "description": "Status code returned by a mail service after an attempt to send email.",
            "readOnly": true,
            "example": 250
          },
          "responseBody": {
            "type": [
              "string",
              "null"
            ],
            "description": "Body of response returned by a mail service after an attempt to send email.",
            "readOnly": true
          },
          "initiatedTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date and time when the email is initiated.",
            "format": "date-time",
            "readOnly": true
          },
          "sentTime": {
            "type": [
              "string",
              "null"
            ],
            "description": "Date and time when the email is sent.",
            "format": "date-time",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "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"
        ]
      },
      "EmailNotification": {
        "type": "object",
        "description": "Email notification event.",
        "readOnly": true,
        "properties": {
          "eventType": {
            "$ref": "#/components/schemas/EventType"
          },
          "count": {
            "type": "integer",
            "readOnly": true,
            "description": "Total number of binds with `send-email` actions per event."
          },
          "activeCount": {
            "type": "integer",
            "readOnly": true,
            "description": "Number of active binds with `send-email` actions per event."
          },
          "notifications": {
            "readOnly": true,
            "type": "array",
            "description": "List of notifications.",
            "items": {
              "type": "object",
              "properties": {
                "labels": {
                  "description": "Labels of the notification.",
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "title": {
                  "type": "string",
                  "description": "Title of the notification."
                },
                "isActive": {
                  "type": "boolean",
                  "description": "Specifies if the notification is enabled."
                }
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "SystemEvent": {
        "type": "object",
        "description": "Application event.",
        "readOnly": true,
        "properties": {
          "eventType": {
            "$ref": "#/components/schemas/EventType"
          },
          "title": {
            "description": "Title of the system event.",
            "type": "string"
          },
          "description": {
            "description": "Description of the system event.",
            "type": "string"
          },
          "category": {
            "description": "Category of system event.",
            "type": "string",
            "enum": [
              "billing",
              "payments"
            ]
          },
          "rulesCount": {
            "description": "Total number of rules associated with the system event.\nA rule is a configuration of an event and one or more actions.\nA rule can be configured to stop subsequent rules in the event list from being executed.",
            "type": "integer",
            "readOnly": true
          },
          "bindsCount": {
            "description": "Total number of binds associated with the system event.\nA bind is a configuration of an event and one or more actions.",
            "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",
                    "history",
                    "rules"
                  ]
                }
              }
            }
          }
        }
      },
      "RuleAction": {
        "type": "object",
        "discriminator": {
          "propertyName": "name",
          "mapping": {
            "abandon-scheduled-payments": "#/components/schemas/RuleActionAbandonScheduledPayments",
            "add-risk-score": "#/components/schemas/RuleActionAddRiskScore",
            "adjust-ready-to-pay": "#/components/schemas/RuleActionAdjustReadyToPay",
            "adjust-ready-to-payout": "#/components/schemas/RuleActionAdjustReadyToPayout",
            "blocklist": "#/components/schemas/RuleActionAddBlockList",
            "cancel-scheduled-payments": "#/components/schemas/RuleActionCancelScheduledPayments",
            "create-intuit-quickbooks-balance-transaction-entry": "#/components/schemas/RuleActionCreateIntuitQuickbooksBalanceTransactionEntry",
            "create-intuit-quickbooks-invoice": "#/components/schemas/RuleActionCreateIntuitQuickbooksInvoice",
            "create-intuit-quickbooks-payment": "#/components/schemas/RuleActionCreateIntuitQuickbooksPayment",
            "create-intuit-quickbooks-refund-receipt": "#/components/schemas/RuleActionCreateIntuitQuickbooksRefundReceipt",
            "create-intuit-quickbooks-revenue-recognition-entry": "#/components/schemas/RuleActionCreateIntuitQuickbooksRevenueRecognitionEntry",
            "decline-transaction": "#/components/schemas/RuleActionDeclineTransaction",
            "check-ontario-restriction": "#/components/schemas/RuleActionCheckOntarioRestriction",
            "display-other-choices": "#/components/schemas/RuleActionDisplayOtherChoices",
            "guess-payment-card-expiration": "#/components/schemas/RuleActionGuessPaymentCardExpiration",
            "perform-experian-check": "#/components/schemas/RuleActionPerformExperianCheck",
            "pick-gateway-account": "#/components/schemas/RuleActionPickGatewayAccount",
            "request-kyc": "#/components/schemas/RuleActionRequestKyc",
            "schedule-invoice-retry": "#/components/schemas/RuleActionScheduleInvoiceRetry",
            "schedule-payment": "#/components/schemas/RuleActionSchedulePayment",
            "schedule-reminder": "#/components/schemas/RuleActionScheduleReminder",
            "send-email": "#/components/schemas/RuleActionSendEmail",
            "stop-subscriptions": "#/components/schemas/RuleActionStopSubscriptions",
            "tag-or-untag-customer": "#/components/schemas/RuleActionTagOrUntagCustomer",
            "update-intuit-quickbooks-invoice": "#/components/schemas/RuleActionUpdateIntuitQuickbooksInvoice",
            "void-intuit-quickbooks-invoice": "#/components/schemas/RuleActionVoidIntuitQuickbooksInvoice"
          }
        },
        "properties": {
          "name": {
            "type": "string",
            "description": "Name of the action.",
            "enum": [
              "abandon-scheduled-payments",
              "add-risk-score",
              "adjust-ready-to-pay",
              "adjust-ready-to-payout",
              "blocklist",
              "cancel-scheduled-payments",
              "create-intuit-quickbooks-balance-transaction-entry",
              "create-intuit-quickbooks-invoice",
              "create-intuit-quickbooks-payment",
              "create-intuit-quickbooks-refund-receipt",
              "create-intuit-quickbooks-revenue-recognition-entry",
              "decline-transaction",
              "check-ontario-restriction",
              "display-other-choices",
              "guess-payment-card-expiration",
              "perform-experian-check",
              "pick-gateway-account",
              "remove-reminder",
              "request-kyc",
              "reset-reminder",
              "schedule-invoice-retry",
              "schedule-payment",
              "schedule-reminder",
              "send-email",
              "stop-subscriptions",
              "tag-or-untag-customer",
              "update-intuit-quickbooks-invoice",
              "void-intuit-quickbooks-invoice",
              "trigger-webhook",
              "show-descriptor-disclaimer"
            ]
          },
          "status": {
            "description": "Status of the action.",
            "type": "string",
            "default": "active",
            "enum": [
              "active",
              "inactive"
            ]
          }
        },
        "required": [
          "name"
        ]
      },
      "RuleActionAbandonScheduledPayments": {
        "description": "Abandon scheduled payments for an order that exceeds the configured delinquency period.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          }
        ]
      },
      "RuleActionAddRiskScore": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "description": "Add risk score.",
            "properties": {
              "score": {
                "type": "integer",
                "default": 0
              }
            }
          }
        ]
      },
      "AdjustReadyToPayPaymentCard": {
        "type": "object",
        "title": "Payment card",
        "properties": {
          "paymentMethod": {
            "type": "string",
            "enum": [
              "payment-card"
            ]
          },
          "feature": {
            "type": [
              "string",
              "null"
            ],
            "description": "Name of the feature.",
            "enum": [
              "Apple Pay",
              "Google Pay"
            ]
          }
        }
      },
      "AdjustReadyToPayAch": {
        "type": "object",
        "title": "ACH",
        "properties": {
          "paymentMethod": {
            "type": "string",
            "enum": [
              "ach"
            ]
          },
          "feature": {
            "type": [
              "string",
              "null"
            ],
            "description": "Feature name.",
            "enum": [
              "Plaid"
            ]
          }
        }
      },
      "AdjustReadyToPayPaypal": {
        "type": "object",
        "title": "PayPal",
        "properties": {
          "paymentMethod": {
            "type": "string",
            "enum": [
              "paypal"
            ]
          },
          "feature": {
            "type": [
              "string",
              "null"
            ],
            "description": "Feature name.",
            "enum": [
              "PayPal billing agreement"
            ]
          }
        }
      },
      "AdjustReadyToPayGeneric": {
        "type": "object",
        "title": "Generic",
        "properties": {
          "paymentMethod": {
            "description": "Payment method of the payment instrument.",
            "allOf": [
              {
                "$ref": "#/components/schemas/AlternativePaymentMethods"
              },
              {
                "not": {
                  "enum": [
                    "paypal"
                  ]
                }
              }
            ]
          },
          "feature": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "AdjustPaymentMethod": {
        "type": "object",
        "required": [
          "paymentMethod",
          "feature"
        ],
        "discriminator": {
          "propertyName": "paymentMethod",
          "mapping": {
            "payment-card": "#/components/schemas/AdjustReadyToPayPaymentCard",
            "ach": "#/components/schemas/AdjustReadyToPayAch",
            "paypal": "#/components/schemas/AdjustReadyToPayPaypal",
            "cash": "#/components/schemas/AdjustReadyToPayGeneric",
            "check": "#/components/schemas/AdjustReadyToPayGeneric",
            "AdvCash": "#/components/schemas/AdjustReadyToPayGeneric",
            "Alfa-click": "#/components/schemas/AdjustReadyToPayGeneric",
            "Alipay": "#/components/schemas/AdjustReadyToPayGeneric",
            "AstroPay Card": "#/components/schemas/AdjustReadyToPayGeneric",
            "AstroPay-GO": "#/components/schemas/AdjustReadyToPayGeneric",
            "BankReferenced": "#/components/schemas/AdjustReadyToPayGeneric",
            "bank-transfer": "#/components/schemas/AdjustReadyToPayGeneric",
            "bank-transfer-2": "#/components/schemas/AdjustReadyToPayGeneric",
            "bank-transfer-3": "#/components/schemas/AdjustReadyToPayGeneric",
            "bank-transfer-4": "#/components/schemas/AdjustReadyToPayGeneric",
            "bank-transfer-5": "#/components/schemas/AdjustReadyToPayGeneric",
            "bank-transfer-6": "#/components/schemas/AdjustReadyToPayGeneric",
            "bank-transfer-7": "#/components/schemas/AdjustReadyToPayGeneric",
            "bank-transfer-8": "#/components/schemas/AdjustReadyToPayGeneric",
            "bank-transfer-9": "#/components/schemas/AdjustReadyToPayGeneric",
            "Baloto": "#/components/schemas/AdjustReadyToPayGeneric",
            "Beeline": "#/components/schemas/AdjustReadyToPayGeneric",
            "Belfius-direct-net": "#/components/schemas/AdjustReadyToPayGeneric",
            "bitcoin": "#/components/schemas/AdjustReadyToPayGeneric",
            "Bizum": "#/components/schemas/AdjustReadyToPayGeneric",
            "Boleto": "#/components/schemas/AdjustReadyToPayGeneric",
            "cash-deposit": "#/components/schemas/AdjustReadyToPayGeneric",
            "CASHlib": "#/components/schemas/AdjustReadyToPayGeneric",
            "CashToCode": "#/components/schemas/AdjustReadyToPayGeneric",
            "China UnionPay": "#/components/schemas/AdjustReadyToPayGeneric",
            "Cleo": "#/components/schemas/AdjustReadyToPayGeneric",
            "CODVoucher": "#/components/schemas/AdjustReadyToPayGeneric",
            "Conekta-oxxo": "#/components/schemas/AdjustReadyToPayGeneric",
            "Cupon-de-pagos": "#/components/schemas/AdjustReadyToPayGeneric",
            "cryptocurrency": "#/components/schemas/AdjustReadyToPayGeneric",
            "domestic-cards": "#/components/schemas/AdjustReadyToPayGeneric",
            "echeck": "#/components/schemas/AdjustReadyToPayGeneric",
            "ecoPayz": "#/components/schemas/AdjustReadyToPayGeneric",
            "ecoVoucher": "#/components/schemas/AdjustReadyToPayGeneric",
            "Efecty": "#/components/schemas/AdjustReadyToPayGeneric",
            "EPS": "#/components/schemas/AdjustReadyToPayGeneric",
            "ePay.bg": "#/components/schemas/AdjustReadyToPayGeneric",
            "eZeeWallet": "#/components/schemas/AdjustReadyToPayGeneric",
            "FasterPay": "#/components/schemas/AdjustReadyToPayGeneric",
            "Flexepin": "#/components/schemas/AdjustReadyToPayGeneric",
            "Giropay": "#/components/schemas/AdjustReadyToPayGeneric",
            "Gpaysafe": "#/components/schemas/AdjustReadyToPayGeneric",
            "Google Pay": "#/components/schemas/AdjustReadyToPayGeneric",
            "iDebit": "#/components/schemas/AdjustReadyToPayGeneric",
            "iDEAL": "#/components/schemas/AdjustReadyToPayGeneric",
            "ING-homepay": "#/components/schemas/AdjustReadyToPayGeneric",
            "INOVAPAY-pin": "#/components/schemas/AdjustReadyToPayGeneric",
            "INOVAPAY-wallet": "#/components/schemas/AdjustReadyToPayGeneric",
            "InstaDebit": "#/components/schemas/AdjustReadyToPayGeneric",
            "instant-bank-transfer": "#/components/schemas/AdjustReadyToPayGeneric",
            "InstantPayments": "#/components/schemas/AdjustReadyToPayGeneric",
            "Interac": "#/components/schemas/AdjustReadyToPayGeneric",
            "Interac-online": "#/components/schemas/AdjustReadyToPayGeneric",
            "Interac-eTransfer": "#/components/schemas/AdjustReadyToPayGeneric",
            "invoice": "#/components/schemas/AdjustReadyToPayGeneric",
            "iWallet": "#/components/schemas/AdjustReadyToPayGeneric",
            "Jeton": "#/components/schemas/AdjustReadyToPayGeneric",
            "jpay": "#/components/schemas/AdjustReadyToPayGeneric",
            "Khelocard": "#/components/schemas/AdjustReadyToPayGeneric",
            "Klarna": "#/components/schemas/AdjustReadyToPayGeneric",
            "KNOT": "#/components/schemas/AdjustReadyToPayGeneric",
            "loonie": "#/components/schemas/AdjustReadyToPayGeneric",
            "Matrix": "#/components/schemas/AdjustReadyToPayGeneric",
            "MaxiCash": "#/components/schemas/AdjustReadyToPayGeneric",
            "Megafon": "#/components/schemas/AdjustReadyToPayGeneric",
            "MiFinity-eWallet": "#/components/schemas/AdjustReadyToPayGeneric",
            "miscellaneous": "#/components/schemas/AdjustReadyToPayGeneric",
            "Bancontact": "#/components/schemas/AdjustReadyToPayGeneric",
            "Bancontact-mobile": "#/components/schemas/AdjustReadyToPayGeneric",
            "MTS": "#/components/schemas/AdjustReadyToPayGeneric",
            "MuchBetter": "#/components/schemas/AdjustReadyToPayGeneric",
            "Multibanco": "#/components/schemas/AdjustReadyToPayGeneric",
            "Neosurf": "#/components/schemas/AdjustReadyToPayGeneric",
            "Netbanking": "#/components/schemas/AdjustReadyToPayGeneric",
            "Neteller": "#/components/schemas/AdjustReadyToPayGeneric",
            "Nordea-Solo": "#/components/schemas/AdjustReadyToPayGeneric",
            "OchaPay": "#/components/schemas/AdjustReadyToPayGeneric",
            "online-bank-transfer": "#/components/schemas/AdjustReadyToPayGeneric",
            "Onlineueberweisen": "#/components/schemas/AdjustReadyToPayGeneric",
            "oriental-wallet": "#/components/schemas/AdjustReadyToPayGeneric",
            "OXXO": "#/components/schemas/AdjustReadyToPayGeneric",
            "P24": "#/components/schemas/AdjustReadyToPayGeneric",
            "Pagadito": "#/components/schemas/AdjustReadyToPayGeneric",
            "PagoEffectivo": "#/components/schemas/AdjustReadyToPayGeneric",
            "Pagsmile-deposit-express": "#/components/schemas/AdjustReadyToPayGeneric",
            "Pagsmile-lottery": "#/components/schemas/AdjustReadyToPayGeneric",
            "PayCash": "#/components/schemas/AdjustReadyToPayGeneric",
            "Payeer": "#/components/schemas/AdjustReadyToPayGeneric",
            "PaymentAsia-crypto": "#/components/schemas/AdjustReadyToPayGeneric",
            "Paymero": "#/components/schemas/AdjustReadyToPayGeneric",
            "Perfect-money": "#/components/schemas/AdjustReadyToPayGeneric",
            "Piastrix": "#/components/schemas/AdjustReadyToPayGeneric",
            "plaid-account": "#/components/schemas/AdjustReadyToPayGeneric",
            "PayTabs": "#/components/schemas/AdjustReadyToPayGeneric",
            "Paysafecard": "#/components/schemas/AdjustReadyToPayGeneric",
            "Paysafecash": "#/components/schemas/AdjustReadyToPayGeneric",
            "Pay4Fun": "#/components/schemas/AdjustReadyToPayGeneric",
            "Paynote": "#/components/schemas/AdjustReadyToPayGeneric",
            "PinPay": "#/components/schemas/AdjustReadyToPayGeneric",
            "phone": "#/components/schemas/AdjustReadyToPayGeneric",
            "PhonePe": "#/components/schemas/AdjustReadyToPayGeneric",
            "POLi": "#/components/schemas/AdjustReadyToPayGeneric",
            "PostFinance-card": "#/components/schemas/AdjustReadyToPayGeneric",
            "PostFinance-e-finance": "#/components/schemas/AdjustReadyToPayGeneric",
            "QIWI": "#/components/schemas/AdjustReadyToPayGeneric",
            "QPay": "#/components/schemas/AdjustReadyToPayGeneric",
            "QQPay": "#/components/schemas/AdjustReadyToPayGeneric",
            "rapyd-checkout": "#/components/schemas/AdjustReadyToPayGeneric",
            "Resurs": "#/components/schemas/AdjustReadyToPayGeneric",
            "SafetyPay": "#/components/schemas/AdjustReadyToPayGeneric",
            "SEPA": "#/components/schemas/AdjustReadyToPayGeneric",
            "Skrill": "#/components/schemas/AdjustReadyToPayGeneric",
            "Skrill Rapid Transfer": "#/components/schemas/AdjustReadyToPayGeneric",
            "SMSVoucher": "#/components/schemas/AdjustReadyToPayGeneric",
            "Sofort": "#/components/schemas/AdjustReadyToPayGeneric",
            "SparkPay": "#/components/schemas/AdjustReadyToPayGeneric",
            "swift-dbt": "#/components/schemas/AdjustReadyToPayGeneric",
            "Tele2": "#/components/schemas/AdjustReadyToPayGeneric",
            "Terminaly-RF": "#/components/schemas/AdjustReadyToPayGeneric",
            "ToditoCash-card": "#/components/schemas/AdjustReadyToPayGeneric",
            "Trustly": "#/components/schemas/AdjustReadyToPayGeneric",
            "UPayCard": "#/components/schemas/AdjustReadyToPayGeneric",
            "UPI": "#/components/schemas/AdjustReadyToPayGeneric",
            "USD-coin": "#/components/schemas/AdjustReadyToPayGeneric",
            "VCreditos": "#/components/schemas/AdjustReadyToPayGeneric",
            "VenusPoint": "#/components/schemas/AdjustReadyToPayGeneric",
            "voucher": "#/components/schemas/AdjustReadyToPayGeneric",
            "voucher-2": "#/components/schemas/AdjustReadyToPayGeneric",
            "voucher-3": "#/components/schemas/AdjustReadyToPayGeneric",
            "voucher-4": "#/components/schemas/AdjustReadyToPayGeneric",
            "Webmoney": "#/components/schemas/AdjustReadyToPayGeneric",
            "Webpay": "#/components/schemas/AdjustReadyToPayGeneric",
            "Webpay-2": "#/components/schemas/AdjustReadyToPayGeneric",
            "Webpay Card": "#/components/schemas/AdjustReadyToPayGeneric",
            "WeChat Pay": "#/components/schemas/AdjustReadyToPayGeneric",
            "XPay-P2P": "#/components/schemas/AdjustReadyToPayGeneric",
            "XPay-QR": "#/components/schemas/AdjustReadyToPayGeneric",
            "Yandex-money": "#/components/schemas/AdjustReadyToPayGeneric",
            "Zotapay": "#/components/schemas/AdjustReadyToPayGeneric",
            "Zimpler": "#/components/schemas/AdjustReadyToPayGeneric"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/AdjustReadyToPayPaymentCard"
          },
          {
            "$ref": "#/components/schemas/AdjustReadyToPayAch"
          },
          {
            "$ref": "#/components/schemas/AdjustReadyToPayPaypal"
          },
          {
            "$ref": "#/components/schemas/AdjustReadyToPayGeneric"
          }
        ]
      },
      "RuleActionAdjustReadyToPay": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "description": "Adjust ready to pay.",
            "properties": {
              "prioritizeActivePaymentInstruments": {
                "type": "boolean",
                "default": false,
                "description": "Specifies if the payment methods associated to with the customer's active payment instruments are displayed at the top of the list.\nIf this value is set to `true`, these payment methods appear at the top."
              },
              "paymentMethods": {
                "type": "array",
                "description": "Ordered list of payment methods allowed.\nIf no value is provided, no payment methods are allowed.",
                "items": {
                  "$ref": "#/components/schemas/AdjustPaymentMethod"
                }
              }
            }
          }
        ]
      },
      "AdjustReadyToPayoutGeneric": {
        "type": "object",
        "title": "Generic",
        "properties": {
          "paymentMethod": {
            "description": "Payment method of the payment instrument.",
            "$ref": "#/components/schemas/AlternativePaymentMethods"
          }
        }
      },
      "AdjustReadyToPayoutPaymentMethod": {
        "type": "object",
        "required": [
          "paymentMethod"
        ],
        "discriminator": {
          "propertyName": "paymentMethod",
          "mapping": {
            "payment-card": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "ach": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "paypal": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "cash": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "check": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "AdvCash": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Alfa-click": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Alipay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "AstroPay Card": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "AstroPay-GO": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "BankReferenced": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "bank-transfer": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "bank-transfer-2": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "bank-transfer-3": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "bank-transfer-4": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "bank-transfer-5": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "bank-transfer-6": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "bank-transfer-7": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "bank-transfer-8": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "bank-transfer-9": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Baloto": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Beeline": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Belfius-direct-net": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "bitcoin": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Bizum": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Boleto": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "cash-deposit": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "CASHlib": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "CashToCode": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "China UnionPay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Cleo": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "CODVoucher": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Conekta-oxxo": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Cupon-de-pagos": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "cryptocurrency": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "domestic-cards": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "echeck": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "ecoPayz": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "ecoVoucher": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Efecty": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "EPS": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "ePay.bg": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "eZeeWallet": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "FasterPay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Flexepin": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Giropay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Gpaysafe": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Google Pay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "iDebit": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "iDEAL": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "ING-homepay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "INOVAPAY-pin": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "INOVAPAY-wallet": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "InstaDebit": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "instant-bank-transfer": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "InstantPayments": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Interac": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Interac-online": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Interac-eTransfer": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "invoice": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "iWallet": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Jeton": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "jpay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Khelocard": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Klarna": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "KNOT": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "loonie": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Matrix": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "MaxiCash": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Megafon": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "MiFinity-eWallet": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "miscellaneous": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Bancontact": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Bancontact-mobile": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "MTS": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "MuchBetter": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Multibanco": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Neosurf": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Netbanking": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Neteller": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Nordea-Solo": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "OchaPay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "online-bank-transfer": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Onlineueberweisen": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "oriental-wallet": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "OXXO": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "P24": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Pagadito": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "PagoEffectivo": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Pagsmile-deposit-express": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Pagsmile-lottery": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "PayCash": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Payeer": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "PaymentAsia-crypto": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Paymero": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Perfect-money": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Piastrix": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "plaid-account": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "PayTabs": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Paysafecard": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Paysafecash": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Pay4Fun": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Paynote": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "PinPay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "phone": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "PhonePe": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "POLi": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "PostFinance-card": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "PostFinance-e-finance": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "QIWI": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "QPay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "QQPay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "rapyd-checkout": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Resurs": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "SafetyPay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "SEPA": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Skrill": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Skrill Rapid Transfer": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "SMSVoucher": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Sofort": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "SparkPay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "swift-dbt": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Tele2": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Terminaly-RF": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "ToditoCash-card": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Trustly": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "UPayCard": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "UPI": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "USD-coin": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "VCreditos": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "VenusPoint": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "voucher": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "voucher-2": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "voucher-3": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "voucher-4": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Webmoney": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Webpay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Webpay-2": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Webpay Card": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "WeChat Pay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "XPay-P2P": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "XPay-QR": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Yandex-money": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Zotapay": "#/components/schemas/AdjustReadyToPayoutGeneric",
            "Zimpler": "#/components/schemas/AdjustReadyToPayoutGeneric"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/AdjustReadyToPayoutGeneric"
          }
        ]
      },
      "RuleActionAdjustReadyToPayout": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "description": "Adjust ready to payout.",
            "properties": {
              "prioritizeActivePaymentInstruments": {
                "type": "boolean",
                "default": false,
                "description": "Specifies if payment methods that are associated with the customer's active payment instruments are displayed at the top of the list.\nIf this value is set to `true`, these payment methods appear at the top."
              },
              "paymentMethods": {
                "type": "array",
                "description": "Ordered list of allowed payment methods.\nIf no value is provided, no payment methods are allowed.",
                "items": {
                  "$ref": "#/components/schemas/AdjustReadyToPayoutPaymentMethod"
                }
              }
            }
          }
        ]
      },
      "RuleActionAddBlockList": {
        "description": "Add customer data to blocklist.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "customer-id",
                  "email",
                  "fingerprint",
                  "ip-address",
                  "payment-card"
                ]
              },
              "ttl": {
                "type": "integer",
                "description": "Blocklist TTL.\nThe default value is zero, which means the blocklist record does not expire.",
                "default": 0
              }
            },
            "required": [
              "type"
            ]
          }
        ]
      },
      "RuleActionCancelScheduledPayments": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "skipStartedServicePeriod": {
                "type": "boolean",
                "description": "Skip invoices with started service period.",
                "default": false
              }
            }
          }
        ]
      },
      "RuleActionCreateIntuitQuickbooksBalanceTransactionEntry": {
        "description": "Create an Intuit QuickBooks balance transaction entry.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "debitAccount": {
                "description": "ID of the debit QuickBooks account.",
                "type": "string"
              },
              "creditAccount": {
                "description": "ID of the credit QuickBooks account.",
                "type": "string"
              },
              "description": {
                "description": "QuickBooks balance transaction entry description.\n\nFor example, `Balance transaction of type {{ balanceTransaction.type }} for transaction #{{ transaction.id }}`.",
                "type": "string"
              },
              "credentialHash": {
                "type": "string",
                "description": "ID of the OAuth2 credential."
              }
            },
            "required": [
              "credentialHash",
              "debitAccount",
              "creditAccount",
              "description"
            ]
          }
        ]
      },
      "RuleActionCreateIntuitQuickbooksInvoice": {
        "description": "Create an Intuit QuickBooks invoice.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "unearnedRevenueAccount": {
                "description": "ID of the unearned revenue QuickBooks account.",
                "type": "string"
              },
              "taxesAccount": {
                "description": "ID of the taxes QuickBooks account.\nIf this field is supplied, taxes are represented as separate line items instead of an integrated tax field.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "discountsAccount": {
                "description": "ID of the discounts QuickBooks account.\nIf this field is not set, `unearnedRevenueAccount` is used for discounts.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "department": {
                "description": "ID of the QuickBooks department.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "template": {
                "type": "object",
                "properties": {
                  "itemName": {
                    "description": "Name of the line item.",
                    "type": "string",
                    "default": "{{ item.plan.id | default: item.product.id | default: item.description }}"
                  },
                  "itemDescription": {
                    "description": "Description of the line item.",
                    "type": "string",
                    "default": "{{ item.product.description | default: item.description }}"
                  },
                  "itemSku": {
                    "description": "SKU of the line item.",
                    "type": "string",
                    "default": "{{ item.plan.id | default: item.product.id | default: item.id }}"
                  },
                  "itemLineDescription": {
                    "description": "Description of the line item.",
                    "type": "string",
                    "default": "{{ item.plan.id | default: item.product.id | default: item.description }}{% if item.periodStartTime and item.periodEndTime %} ({{ item.periodStartTime | datetime: \"M jS, Y\" }} – {{ item.periodEndTime | datetime: \"M jS, Y\" }}){% endif %}"
                  },
                  "taxName": {
                    "description": "Name of the tax item name.\nThis value is used when the `taxesAccount` field is configured.",
                    "type": "string",
                    "default": "{{ tax.description }}"
                  },
                  "taxDescription": {
                    "description": "Description of the tax item.",
                    "type": "string",
                    "default": "{{ tax.description }} This value is used when the `taxesAccount` field is configured."
                  },
                  "taxSku": {
                    "description": "SKU of the tax item.",
                    "type": "string",
                    "default": "tax"
                  },
                  "taxLineDescription": {
                    "description": "Description of the tax line.\nThis value is used when the `taxesAccount` field is configured.",
                    "type": "string",
                    "default": "{{ tax.description }}{% if item %} for {{ item.plan.id | default: item.description }}{% if item.periodStartTime and item.periodEndTime %} ({{ item.periodStartTime | datetime: \"M jS, Y\" }} – {{ item.periodEndTime | datetime: \"M jS, Y\" }}){% else %} for multiple items{% endif %}{% endif %}"
                  }
                }
              },
              "credentialHash": {
                "type": "string",
                "description": "ID of the OAuth2 credential."
              },
              "customerDisplayName": {
                "description": "Customer display name in QuickBooks. Duplicate names are mapped to a single QuickBooks customer.\n\nEvent placeholders could be used as follows:\n- Organization name: `{{ invoice.customer.primaryAddress.organization }}`;\n- Full customer name: `{{ invoice.customer.firstName }} {{ invoice.customer.lastName }}`;\n- Customer ID: `{{ invoice.customer.id }}`.",
                "type": "string"
              }
            },
            "required": [
              "credentialHash",
              "customerDisplayName",
              "unearnedRevenueAccount",
              "customerDisplayName"
            ]
          }
        ]
      },
      "RuleActionCreateIntuitQuickbooksPayment": {
        "description": "Create an Intuit QuickBooks payment.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "depositAccount": {
                "description": "ID of the deposit QuickBooks account.",
                "type": "string"
              },
              "credentialHash": {
                "type": "string",
                "description": "ID of the OAuth2 credential."
              }
            },
            "required": [
              "credentialHash",
              "depositAccount"
            ]
          }
        ]
      },
      "RuleActionCreateIntuitQuickbooksRefundReceipt": {
        "description": "Create an Intuit QuickBooks refund receipt.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "depositAccount": {
                "description": "ID of the deposit QuickBooks account.",
                "type": "string"
              },
              "department": {
                "description": "ID of the QuickBooks department.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "credentialHash": {
                "type": "string",
                "description": "ID of the OAuth2 credential."
              }
            },
            "required": [
              "credentialHash",
              "depositAccount"
            ]
          }
        ]
      },
      "RuleActionCreateIntuitQuickbooksRevenueRecognitionEntry": {
        "description": "Create an Intuit QuickBooks revenue recognition entry.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "debitAccount": {
                "description": "ID of the debit QuickBooks account.",
                "type": "string"
              },
              "creditAccount": {
                "description": "ID of the credit QuickBooks account.",
                "type": "string"
              },
              "description": {
                "description": "QuickBooks revenue recognition entry description.\n\nFor example, `Revenue recognition for invoice #{{ invoice.id }} item #{{ item.id }} – {{ item.description }}`.",
                "type": "string"
              },
              "credentialHash": {
                "type": "string",
                "description": "ID of the OAuth2 credential."
              }
            },
            "required": [
              "credentialHash",
              "debitAccount",
              "creditAccount",
              "description"
            ]
          }
        ]
      },
      "RuleActionDeclineTransaction": {
        "description": "Decline transaction.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          }
        ]
      },
      "RuleActionCheckOntarioRestriction": {
        "description": "Decline transactions not conforming to the Ontario restrictions.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          }
        ]
      },
      "RuleActionDisplayOtherChoices": {
        "description": "Display other choices.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "choices": {
                "type": "array",
                "minItems": 1,
                "items": {
                  "type": "object",
                  "properties": {
                    "langIso": {
                      "description": "Language in ISO 639-1 code format.",
                      "type": "string"
                    },
                    "content": {
                      "type": "string"
                    }
                  },
                  "required": [
                    "langIso",
                    "content"
                  ]
                }
              }
            },
            "required": [
              "choices"
            ]
          }
        ]
      },
      "RuleActionGuessPaymentCardExpiration": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          }
        ]
      },
      "RuleActionPerformExperianCheck": {
        "description": "Perform Experian ProveID check on the customer.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "experianCredentialHash": {
                "description": "Hash of the Experian credential to use for performing the check.",
                "type": "string",
                "example": "58816e40-387e-4834-982f-fa1855a75f64"
              },
              "tagOnApprove": {
                "description": "Tag ID that should be used to tag the customer when the identity matches Experian records.",
                "type": "string"
              },
              "tagOnReject": {
                "description": "Tag ID that should be used to tag the customer when the identity doesn't match Experian records.",
                "type": "string"
              },
              "tagOnUnknown": {
                "description": "Tag ID that should be used to tag the customer when the identity is not found in Experian records or further analysis needed.",
                "type": "string"
              }
            },
            "required": [
              "experianCredentialHash"
            ]
          }
        ]
      },
      "GatewayAccountPickInstruction": {
        "type": "object",
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "gateway-account-weights": "#/components/schemas/PickInstructionGatewayAccountWeights",
            "gateway-acquirer-weights": "#/components/schemas/PickInstructionGatewayAcquirerWeights"
          }
        },
        "properties": {
          "strategy": {
            "type": "string",
            "enum": [
              "weighted-random",
              "round-robin"
            ],
            "description": "Controls the picking strategy for gateway accounts.\nThe weighted-random strategy picks based on weighted-random every time.\nThe round-robin strategy tries a weighted-random different gateway account for consecutive attempts from same payment instrument.",
            "default": "weighted-random"
          },
          "method": {
            "type": "string",
            "enum": [
              "gateway-account-weights",
              "gateway-acquirer-weights"
            ]
          }
        },
        "required": [
          "method"
        ]
      },
      "PickInstructionGatewayAccountWeights": {
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccountPickInstruction"
          },
          {
            "type": "object",
            "properties": {
              "weightedList": {
                "type": "array",
                "uniqueItems": true,
                "minimum": 0,
                "items": {
                  "type": "object",
                  "properties": {
                    "gatewayAccountId": {
                      "type": "string",
                      "description": "Unique resource ID.",
                      "maxLength": 50,
                      "example": "gw_acc_0YVCXMF26DDNKAERE5NW727S34"
                    },
                    "weight": {
                      "type": "integer",
                      "minimum": 0
                    }
                  },
                  "required": [
                    "gatewayAccountId",
                    "weight"
                  ]
                },
                "example": [
                  {
                    "gatewayAccountId": "my_gateway_account_1",
                    "weight": 80
                  },
                  {
                    "gatewayAccountId": "my_gateway_account_2",
                    "weight": 20
                  }
                ]
              }
            },
            "required": [
              "weightedList"
            ]
          }
        ]
      },
      "PickInstructionGatewayAcquirerWeights": {
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccountPickInstruction"
          },
          {
            "type": "object",
            "properties": {
              "weightedList": {
                "type": "array",
                "uniqueItems": true,
                "minimum": 0,
                "items": {
                  "type": "object",
                  "properties": {
                    "gatewayName": {
                      "$ref": "#/components/schemas/GatewayName"
                    },
                    "acquirerName": {
                      "$ref": "#/components/schemas/AcquirerName"
                    },
                    "weight": {
                      "type": "integer",
                      "minimum": 0
                    }
                  },
                  "required": [
                    "gatewayName",
                    "acquirerName",
                    "weight"
                  ]
                },
                "example": [
                  {
                    "gatewayName": "TestProcessor",
                    "acquirerName": "AIB",
                    "weight": 80
                  },
                  {
                    "gatewayName": "TestProcessor",
                    "acquirerName": "B+S",
                    "weight": 20
                  }
                ]
              }
            },
            "required": [
              "weightedList"
            ]
          }
        ]
      },
      "RuleActionPickGatewayAccount": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "pickInstruction": {
                "$ref": "#/components/schemas/GatewayAccountPickInstruction"
              }
            },
            "required": [
              "pickInstruction"
            ]
          }
        ]
      },
      "RuleActionRequestKyc": {
        "description": "Request KYC page to verify customer identity.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "documents": {
                "type": "array",
                "description": "Documents to request from the customer.",
                "minItems": 1,
                "items": {
                  "$ref": "#/components/schemas/KycRequestDocument"
                }
              },
              "excludePolicy": {
                "type": "string",
                "description": "Specifies who should be excluded from the verification.",
                "enum": [
                  "customers-with-accepted-document",
                  "customers-with-document",
                  "none"
                ],
                "default": "customers-with-accepted-document"
              },
              "isMandatory": {
                "type": "boolean",
                "description": "Is the verification mandatory.",
                "default": true
              },
              "promptPolicy": {
                "type": "string",
                "description": "When to prompt, before or after processing the transaction.",
                "enum": [
                  "before-transaction-process",
                  "after-transaction-process"
                ],
                "default": "before-transaction-process"
              },
              "rejectedBeforeTransactionProcessPolicy": {
                "type": "string",
                "description": "What to do if verification is before transaction processing, and is rejected.",
                "enum": [
                  "process-transaction",
                  "decline",
                  "use-alternate-gateway"
                ],
                "default": "decline"
              },
              "alternateGatewayAccountIfRejected": {
                "type": "string",
                "description": "Gateway account to use if use-alternate-gateway is selected for rejectedBeforeTransactionProcessPolicy."
              },
              "rejectedAfterTransactionProcessPolicy": {
                "type": "string",
                "description": "What to do if verification is after transaction processing, and is rejected.",
                "enum": [
                  "proceed"
                ],
                "default": "proceed"
              },
              "optionalPolicy": {
                "type": "string",
                "description": "What to do if verification is optional.",
                "enum": [
                  "allow-bypass",
                  "allow-use-alternate-gateway"
                ],
                "default": "allow-bypass"
              },
              "alternateGatewayAccountIfOptional": {
                "type": "string",
                "description": "Gateway account to use if allow-use-alternate-gateway is selected for optionalPolicy."
              },
              "bypassCurrencyToDisplay": {
                "description": "Currency three letter code to display on the bypass link, if optional.",
                "type": "string",
                "default": "USD"
              }
            },
            "required": [
              "documents",
              "excludePolicy",
              "isMandatory",
              "promptPolicy",
              "rejectedBeforeTransactionProcessPolicy",
              "rejectedAfterTransactionProcessPolicy",
              "optionalPolicy"
            ]
          }
        ]
      },
      "RuleActionScheduleInvoiceRetry": {
        "description": "Schedule an invoice retry.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "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": "Policy on the attempt finishes.",
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "change-subscription-renewal-time"
                  ]
                }
              },
              "afterRetryEndPolicies": {
                "description": "Policy on the retry ends.",
                "type": "array",
                "items": {
                  "type": "string",
                  "enum": [
                    "abandon-invoice",
                    "cancel-subscription"
                  ]
                }
              },
              "overrideRetryInstruction": {
                "description": "Specifies whether to replace the existing retry.",
                "type": "boolean"
              }
            },
            "required": [
              "attempts",
              "afterAttemptPolicies",
              "afterRetryEndPolicies",
              "overrideRetryInstruction"
            ]
          }
        ]
      },
      "SchedulingMethodAuto": {
        "type": "object",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "enum": [
              "auto"
            ]
          }
        }
      },
      "ScheduleInstruction": {
        "type": "object",
        "description": "Specifies when the instruction is performed.",
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "auto": "#/components/schemas/SchedulingMethodAuto",
            "date-interval": "#/components/schemas/SchedulingMethodDateInterval",
            "day-of-month": "#/components/schemas/SchedulingMethodDayOfMonth",
            "day-of-week": "#/components/schemas/SchedulingMethodDayOfWeek",
            "day-and-month-of-year": "#/components/schemas/SchedulingMethodDayAndMonthOfYear",
            "immediately": "#/components/schemas/SchedulingMethodImmediately",
            "intelligent": "#/components/schemas/SchedulingMethodIntelligent"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/SchedulingMethodAuto"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodDateInterval"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodDayOfMonth"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodDayOfWeek"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodDayAndMonthOfYear"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodImmediately"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodIntelligent"
          }
        ]
      },
      "RuleActionSchedulePayment": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "description": "Calculation instruction of scheduled time for payment.",
            "properties": {
              "scheduleInstruction": {
                "$ref": "#/components/schemas/ScheduleInstruction"
              },
              "amountPolicy": {
                "type": "string",
                "enum": [
                  "invoice-amount-due"
                ]
              }
            },
            "required": [
              "scheduleInstruction",
              "amountPolicy"
            ]
          }
        ]
      },
      "ReminderScheduleInstruction": {
        "type": "object",
        "description": "Calculation instruction of the scheduled time.",
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "date-interval": "#/components/schemas/SchedulingMethodDateInterval",
            "day-of-month": "#/components/schemas/SchedulingMethodDayOfMonth",
            "day-of-week": "#/components/schemas/SchedulingMethodDayOfWeek"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/SchedulingMethodDateInterval"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodDayOfMonth"
          },
          {
            "$ref": "#/components/schemas/SchedulingMethodDayOfWeek"
          }
        ]
      },
      "RuleActionScheduleReminder": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "role": {
                "type": "string",
                "enum": [
                  "all",
                  "renewal",
                  "trial-end"
                ],
                "description": "Specifies the types of events that the reminder is applicable to.\nThe `renewal` and `trial-end` options are only available for order events.\nOther events must use the `all` option."
              },
              "schedule": {
                "type": "object",
                "description": "Collection of schedule instructions.",
                "properties": {
                  "instructions": {
                    "type": "array",
                    "items": {
                      "$ref": "#/components/schemas/ReminderScheduleInstruction"
                    }
                  },
                  "chronology": {
                    "type": "string",
                    "enum": [
                      "before",
                      "after"
                    ]
                  }
                },
                "required": [
                  "instructions",
                  "chronology"
                ]
              }
            },
            "required": [
              "role"
            ]
          }
        ]
      },
      "RulesEmailNotification": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "format": "uuid",
            "description": "ID of the message."
          },
          "version": {
            "type": "string",
            "description": "Version number of the message.\nUse this field to distinguish between multiple messages by name and version number.\nIf there are no versions, this field is empty."
          },
          "weight": {
            "type": "integer",
            "description": "Weight distribution value that is assigned to a template for a split test.\nEach template in a split test can be assigned a weight.\nThe higher the weight value, the more likely the message template is used.\n\nThe split test algorithm does not assess locale when making a weighted template selection.",
            "minimum": 0,
            "maximum": 100,
            "example": 75,
            "default": 100
          },
          "templates": {
            "description": "Array of message templates with language locale identifiers in [RFC 5646](https://tools.ietf.org/html/rfc5646) format.\nA language is selected based on the customer's locale.\n\nIf no locale is configured for the customer, `en-US` (US English) is used.\n\nIf no template is available in the customer's locale,\na template locale is selected using a closest match algorithm.\n\nIf your email message templates are localized into more than one language,\nset a customer locale.\n\nInvalid placeholders render as empty strings.\nFor example, `Hello {{invalid.placeholder}}!` is rendered as `Hello !`.",
            "type": "array",
            "minItems": 1,
            "items": {
              "type": "object",
              "required": [
                "locale",
                "subject",
                "text",
                "html",
                "from",
                "to"
              ],
              "properties": {
                "locale": {
                  "type": "string",
                  "description": "Language locale identifier in [RFC 5646](https://tools.ietf.org/html/rfc5646) format.",
                  "example": "fr-FR"
                },
                "from": {
                  "type": "string",
                  "description": "Email address of the sender.\n\n> **Important:** This value must be a verified email address.\n\nTo verify an email address:\n  1. [Create an email delivery setting](https://www.rebilly.com/catalog/all/email-delivery-settings/postemaildeliverysetting/).\n    In the response, you receive the email and a token.\n  1. [Verify the email delivery](https://www.rebilly.com/catalog/all/email-delivery-settings/putemaildeliverysettingsverification/) by passing the token as the path parameter.\n\nTemplate placeholders are permitted.\nIf a placeholder does not resolve to a verified `from` address,\nthe default verified `from` address is used.",
                  "maxLength": 254,
                  "example": "example@example.com"
                },
                "to": {
                  "type": "array",
                  "description": "List of email addresses to which the email message is sent.\nTemplate placeholders are permitted.\nIf a placeholder does not resolve to an email address,\nthe address is not added.",
                  "minItems": 1,
                  "items": {
                    "type": "string",
                    "maxLength": 254,
                    "example": "{{ invoice.customer.email }}"
                  }
                },
                "cc": {
                  "type": "array",
                  "description": "List of CC email addresses to which the email message is sent.\nTemplate placeholders are permitted.\nIf a placeholder does not resolve to an email address,\nthe address is not added.",
                  "items": {
                    "type": "string",
                    "maxLength": 254,
                    "example": "{{ invoice.customer.email }}"
                  }
                },
                "bcc": {
                  "type": "array",
                  "description": "List of BCC email addresses to which the email message is sent.\nTemplate placeholders are permitted.\nIf a placeholder does not resolve to an email address,\nthe address is not added.",
                  "items": {
                    "type": "string",
                    "maxLength": 254,
                    "example": "{{ invoice.customer.email }}"
                  }
                },
                "subject": {
                  "type": "string",
                  "description": "Subject of the message.\nThe use of template placeholders is permitted for this field.",
                  "maxLength": 998,
                  "example": "Demonstration subject"
                },
                "text": {
                  "type": "string",
                  "description": "Text body of the message.\nTo use content from the `html` field, leave this field empty.\nThe use of template placeholders is permitted for this field.",
                  "example": "Demonstration text"
                },
                "html": {
                  "type": "string",
                  "description": "HTML body of the message.\nTo use content from the `text` field, leave this field empty.\nThe use of template placeholders is permitted for this field.",
                  "example": "<p>Demonstration text</p>"
                },
                "editor": {
                  "type": "string",
                  "description": "Source of the message.\nThis value is required for the email editor.\nThis value is not used for sending emails.\nIt is used by the editor to reproduce the message for future updates.",
                  "example": "<div class=\"block\">Demonstration text</div>"
                },
                "attachments": {
                  "description": "Attachments of the email message.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "resourceType",
                      "resourceId"
                    ],
                    "properties": {
                      "resourceType": {
                        "type": "string",
                        "description": "Type of the attachment resource.",
                        "example": "customer"
                      },
                      "resourceId": {
                        "type": "string",
                        "description": "ID of the attachment resource.\nTemplate placeholders are permitted.",
                        "maxLength": 50,
                        "example": "cus_0YV7DDSDD1C8DA64KHH2W33CPF"
                      }
                    }
                  }
                }
              },
              "example": {
                "locale": "fr-FR",
                "from": "example@example.com",
                "to": [
                  "{{ invoice.customer.email }}"
                ],
                "subject": "Sujet de démonstration",
                "text": "Texte de démonstration",
                "html": "<p>Texte de démonstration</p>",
                "editor": "<div class=\"block\">Texte de démonstration</div>"
              }
            }
          }
        },
        "required": [
          "templates"
        ]
      },
      "RuleActionSendEmail": {
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "format": "uuid",
                "description": "ID of the action."
              },
              "title": {
                "type": "string",
                "description": "Title of the messages (this title appears in reports)."
              },
              "emails": {
                "type": "array",
                "description": "List of messages.",
                "minItems": 1,
                "items": {
                  "$ref": "#/components/schemas/RulesEmailNotification"
                }
              },
              "splitTestStartTime": {
                "type": "string",
                "format": "date-time",
                "description": "Split test start time."
              }
            },
            "required": [
              "emails"
            ]
          }
        ]
      },
      "RuleActionStopSubscriptions": {
        "description": "Stop active subscriptions.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          }
        ]
      },
      "RuleActionTagOrUntagCustomer": {
        "description": "Tag or untag a customer with a specified list of tags.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "addingTags": {
                "description": "List of tag ID customer should be tagged with.",
                "type": "array",
                "maxItems": 1000,
                "items": {
                  "type": "string"
                }
              },
              "removingTags": {
                "description": "List of tag ID customer should be untagged from.",
                "type": "array",
                "maxItems": 1000,
                "items": {
                  "type": "string"
                }
              }
            },
            "required": [
              "addingTags",
              "removingTags"
            ]
          }
        ]
      },
      "RuleActionUpdateIntuitQuickbooksInvoice": {
        "description": "Update an Intuit QuickBooks invoice.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "unearnedRevenueAccount": {
                "description": "ID of the unearned revenue QuickBooks account.",
                "type": "string"
              },
              "taxesAccount": {
                "description": "ID of the taxes QuickBooks account.\nIf this field is supplied, taxes are represented as separate line items instead of an integrated tax field.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "discountsAccount": {
                "description": "ID of the discounts QuickBooks account.\nIf this field is not set, `unearnedRevenueAccount` is used for discounts.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "department": {
                "description": "ID of the QuickBooks department.",
                "type": [
                  "string",
                  "null"
                ]
              },
              "template": {
                "type": "object",
                "properties": {
                  "itemName": {
                    "description": "Name of the line item.",
                    "type": "string",
                    "default": "{{ item.plan.id | default: item.product.id | default: item.description }}"
                  },
                  "itemDescription": {
                    "description": "Description of the line item.",
                    "type": "string",
                    "default": "{{ item.product.description | default: item.description }}"
                  },
                  "itemSku": {
                    "description": "SKU of the line item.",
                    "type": "string",
                    "default": "{{ item.plan.id | default: item.product.id | default: item.id }}"
                  },
                  "itemLineDescription": {
                    "description": "Description of the line item.",
                    "type": "string",
                    "default": "{{ item.plan.id | default: item.product.id | default: item.description }}{% if item.periodStartTime and item.periodEndTime %} ({{ item.periodStartTime | datetime: \"M jS, Y\" }} – {{ item.periodEndTime | datetime: \"M jS, Y\" }}){% endif %}"
                  },
                  "taxName": {
                    "description": "Name of the tax item name.\nThis value is used when the `taxesAccount` field is configured.",
                    "type": "string",
                    "default": "{{ tax.description }}"
                  },
                  "taxDescription": {
                    "description": "Description of the tax item.",
                    "type": "string",
                    "default": "{{ tax.description }} This value is used when the `taxesAccount` field is configured."
                  },
                  "taxSku": {
                    "description": "SKU of the tax item.",
                    "type": "string",
                    "default": "tax"
                  },
                  "taxLineDescription": {
                    "description": "Description of the tax line.\nThis value is used when the `taxesAccount` field is configured.",
                    "type": "string",
                    "default": "{{ tax.description }}{% if item %} for {{ item.plan.id | default: item.description }}{% if item.periodStartTime and item.periodEndTime %} ({{ item.periodStartTime | datetime: \"M jS, Y\" }} – {{ item.periodEndTime | datetime: \"M jS, Y\" }}){% else %} for multiple items{% endif %}{% endif %}"
                  }
                }
              },
              "credentialHash": {
                "type": "string",
                "description": "ID of the OAuth2 credential."
              }
            },
            "required": [
              "credentialHash",
              "unearnedRevenueAccount"
            ]
          }
        ]
      },
      "RuleActionVoidIntuitQuickbooksInvoice": {
        "description": "Void an Intuit QuickBooks invoice.",
        "allOf": [
          {
            "$ref": "#/components/schemas/RuleAction"
          },
          {
            "type": "object",
            "properties": {
              "credentialHash": {
                "type": "string",
                "description": "ID of the OAuth2 credential."
              }
            },
            "required": [
              "credentialHash"
            ]
          }
        ]
      },
      "Bind": {
        "type": "object",
        "description": "Rule information.",
        "properties": {
          "id": {
            "description": "ID of the rule.",
            "$ref": "#/components/schemas/ResourceId"
          },
          "name": {
            "description": "Name of the rule.",
            "type": "string"
          },
          "labels": {
            "description": "Labels of the rule.",
            "type": "array",
            "uniqueItems": true,
            "example": [
              "test-rule",
              "category:foo"
            ],
            "items": {
              "type": "string",
              "pattern": "[a-zA-Z][a-zA-Z0-9:-]*"
            }
          },
          "status": {
            "description": "Status of the rule.",
            "type": "string",
            "default": "active",
            "enum": [
              "active",
              "inactive"
            ]
          },
          "filter": {
            "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).",
            "type": "string"
          },
          "actions": {
            "description": "Actions that execute when an event occurs.",
            "type": "array",
            "uniqueItems": true,
            "items": {
              "$ref": "#/components/schemas/RuleAction"
            }
          }
        },
        "required": [
          "name",
          "actions"
        ]
      },
      "Rule": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/components/schemas/Bind"
          },
          {
            "type": "object",
            "properties": {
              "final": {
                "description": "Specifies if the rule stops subsequent rules in the event list from being executed.",
                "type": "boolean",
                "default": true
              }
            }
          }
        ]
      },
      "RuleSet": {
        "type": "object",
        "description": "Ruleset for a specific event.",
        "properties": {
          "version": {
            "description": "Version of the ruleset.",
            "type": "integer",
            "readOnly": true
          },
          "binds": {
            "type": "array",
            "description": "Binds always execute, regardless of rule based events.\nA bind is a configuration of an event and one or more actions.",
            "items": {
              "$ref": "#/components/schemas/Bind"
            }
          },
          "rules": {
            "type": "array",
            "description": "Rules can be configured to stop subsequent rules in the event list from being executed.\nA rule is a configuration of an event and one or more actions.",
            "items": {
              "$ref": "#/components/schemas/Rule"
            }
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        },
        "required": [
          "rules"
        ]
      },
      "RulesEngineTimeline": {
        "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": [
              "timeline-comment-created",
              "ruleset-created",
              "ruleset-changed"
            ]
          },
          "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"
          }
        }
      },
      "RuleSetHistoryItem": {
        "type": "object",
        "description": "Version of ruleset.",
        "readOnly": true,
        "properties": {
          "version": {
            "description": "Version of the ruleset.",
            "type": "integer"
          },
          "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",
                    "history",
                    "rules"
                  ]
                }
              }
            }
          }
        }
      },
      "RuleSetVersion": {
        "type": "object",
        "description": "Version of ruleset.",
        "readOnly": true,
        "properties": {
          "version": {
            "description": "Version of the ruleset.",
            "type": "integer"
          },
          "binds": {
            "type": "array",
            "description": "Binds always execute, regardless of rule based events.\nA bind is a configuration of an event and one or more actions.",
            "items": {
              "$ref": "#/components/schemas/Bind"
            }
          },
          "rules": {
            "type": "array",
            "description": "Rules can be configured to stop subsequent rules in the event list from being executed.\nA rule is a configuration of an event and one or more actions.",
            "items": {
              "$ref": "#/components/schemas/Rule"
            }
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "RuleSetDraft": {
        "type": "object",
        "description": "Draft ruleset for specific event.",
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the draft rule set.",
            "maxLength": 50,
            "example": "rule_dft_0YVDN3FN43CEQ8CQ93Y0H00ZQ7"
          },
          "baseVersion": {
            "type": "integer",
            "minimum": 0,
            "description": "Ruleset version on which the draft ruleset is based.\nGenerally, a draft ruleset is cloned from an existing ruleset.\nUse this field to determine if the active ruleset changed since the draft creation.\n`0` denotes a draft ruleset that is not created from an existing ruleset.\nThe value of this field is informational only, it is not assigned to the active ruleset."
          },
          "binds": {
            "type": "array",
            "description": "Binds always execute, regardless of rule based events.\nA rule is a configuration of an event and one or more actions.",
            "items": {
              "$ref": "#/components/schemas/Bind"
            }
          },
          "rules": {
            "type": "array",
            "description": "Rule can be configured to stop subsequent rules in the event list from being executed.\nA rule is a configuration of an event and one or more actions.",
            "items": {
              "$ref": "#/components/schemas/Rule"
            }
          },
          "author": {
            "description": "Author of the draft.",
            "readOnly": true,
            "type": "object",
            "properties": {
              "id": {
                "description": "ID of the author.",
                "type": "string",
                "$ref": "#/components/schemas/ResourceId"
              },
              "name": {
                "description": "First and last name of the author.",
                "type": "string"
              }
            }
          },
          "name": {
            "type": "string",
            "description": "Name of the draft."
          },
          "description": {
            "type": "string",
            "description": "Detailed description of the drafted ruleset."
          },
          "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",
                    "user"
                  ]
                }
              }
            }
          }
        },
        "required": [
          "rules",
          "name",
          "baseVersion"
        ]
      },
      "ForgotPassword": {
        "type": "object",
        "required": [
          "email"
        ],
        "properties": {
          "email": {
            "description": "Email address to which a reset password link is sent.",
            "type": "string",
            "format": "email"
          }
        }
      },
      "GatewayAccount": {
        "description": "Gateway account details.",
        "type": "object",
        "required": [
          "gatewayName",
          "method",
          "acceptedCurrencies"
        ],
        "discriminator": {
          "propertyName": "gatewayName",
          "mapping": {
            "A1Gateway": "#/components/schemas/A1Gateway",
            "ACI": "#/components/schemas/ACI",
            "Adyen": "#/components/schemas/Adyen",
            "Aera": "#/components/schemas/Aera",
            "Aircash": "#/components/schemas/Aircash",
            "Airpay": "#/components/schemas/Airpay",
            "Airwallex": "#/components/schemas/Airwallex",
            "AmazonPay": "#/components/schemas/AmazonPay",
            "AmexVPC": "#/components/schemas/AmexVPC",
            "Antom": "#/components/schemas/Antom",
            "ApcoPay": "#/components/schemas/ApcoPay",
            "AsiaPay": "#/components/schemas/AsiaPay",
            "AsiaPaymentGateway": "#/components/schemas/AsiaPaymentGateway",
            "AstroPayCard": "#/components/schemas/AstroPayCard",
            "AuthorizeNet": "#/components/schemas/AuthorizeNet",
            "Awepay": "#/components/schemas/Awepay",
            "Bambora": "#/components/schemas/Bambora",
            "BankSEND": "#/components/schemas/BankSEND",
            "BitPay": "#/components/schemas/BitPay",
            "BlueSnap": "#/components/schemas/BlueSnap",
            "BraintreePayments": "#/components/schemas/BraintreePayments",
            "Buckaroo": "#/components/schemas/Buckaroo",
            "BVNK": "#/components/schemas/BVNK",
            "CASHlib": "#/components/schemas/CASHlib",
            "CODVoucher": "#/components/schemas/CODVoucher",
            "Coinbase": "#/components/schemas/Coinbase",
            "CoinGate": "#/components/schemas/CoinGate",
            "CoinPayments": "#/components/schemas/CoinPayments",
            "Cardknox": "#/components/schemas/Cardknox",
            "Cashflows": "#/components/schemas/Cashflows",
            "Cashterminal": "#/components/schemas/Cashterminal",
            "CashToCode": "#/components/schemas/CashToCode",
            "CauriPayment": "#/components/schemas/CauriPayment",
            "Cayan": "#/components/schemas/Cayan",
            "CCAvenue": "#/components/schemas/CCAvenue",
            "Chase": "#/components/schemas/Chase",
            "CheckoutCom": "#/components/schemas/CheckoutCom",
            "Chillstock": "#/components/schemas/Chillstock",
            "Circle": "#/components/schemas/Circle",
            "Citadel": "#/components/schemas/Citadel",
            "Clearhaus": "#/components/schemas/Clearhaus",
            "Cleo": "#/components/schemas/Cleo",
            "Conekta": "#/components/schemas/Conekta",
            "Coppr": "#/components/schemas/Coppr",
            "Credorax": "#/components/schemas/Credorax",
            "Cryptomus": "#/components/schemas/Cryptomus",
            "Cryptonator": "#/components/schemas/Cryptonator",
            "CyberSource": "#/components/schemas/CyberSource",
            "DataCash": "#/components/schemas/DataCash",
            "Dengi": "#/components/schemas/Dengi",
            "Dimoco": "#/components/schemas/Dimoco",
            "dLocal": "#/components/schemas/dLocal",
            "Dragonphoenix": "#/components/schemas/Dragonphoenix",
            "Dropayment": "#/components/schemas/Dropayment",
            "Directa24": "#/components/schemas/Directa24",
            "EasyPayDirect": "#/components/schemas/EasyPayDirect",
            "EBANX": "#/components/schemas/EBANX",
            "EPG": "#/components/schemas/EPG",
            "EPro": "#/components/schemas/EPro",
            "EcorePay": "#/components/schemas/EcorePay",
            "Elavon": "#/components/schemas/Elavon",
            "EMS": "#/components/schemas/EMS",
            "ePay": "#/components/schemas/ePay",
            "Euteller": "#/components/schemas/Euteller",
            "Ezeebill": "#/components/schemas/Ezeebill",
            "eZeeWallet": "#/components/schemas/eZeeWallet",
            "ezyEFT": "#/components/schemas/ezyEFT",
            "FinTecSystems": "#/components/schemas/FinTecSystems",
            "Finrax": "#/components/schemas/Finrax",
            "Flexepin": "#/components/schemas/Flexepin",
            "Forte": "#/components/schemas/Forte",
            "FundSend": "#/components/schemas/FundSend",
            "gate2way": "#/components/schemas/gate2way",
            "GET": "#/components/schemas/GET",
            "Gigadat": "#/components/schemas/Gigadat",
            "GlobalOne": "#/components/schemas/GlobalOne",
            "GoCardless": "#/components/schemas/GoCardless",
            "Gooney": "#/components/schemas/Gooney",
            "Gpaysafe": "#/components/schemas/Gpaysafe",
            "Greenbox": "#/components/schemas/Greenbox",
            "HiPay": "#/components/schemas/HiPay",
            "iCashOne": "#/components/schemas/iCashOne",
            "ICEPAY": "#/components/schemas/ICEPAY",
            "INOVAPAY": "#/components/schemas/INOVAPAY",
            "Ilixium": "#/components/schemas/Ilixium",
            "IMerchant": "#/components/schemas/IMerchant",
            "Ingenico": "#/components/schemas/Ingenico",
            "Inovio": "#/components/schemas/Inovio",
            "InstaDebit": "#/components/schemas/InstaDebit",
            "Intuit": "#/components/schemas/Intuit",
            "IpayOptions": "#/components/schemas/IpayOptions",
            "Isx": "#/components/schemas/Isx",
            "JetPay": "#/components/schemas/JetPay",
            "Jeton": "#/components/schemas/Jeton",
            "JPMOrbital": "#/components/schemas/JPMOrbital",
            "Khelocard": "#/components/schemas/Khelocard",
            "Klarna": "#/components/schemas/Klarna",
            "Konnektive": "#/components/schemas/Konnektive",
            "Kushki": "#/components/schemas/Kushki",
            "LaCore": "#/components/schemas/LaCore",
            "Limepay": "#/components/schemas/Limepay",
            "Loonio": "#/components/schemas/Loonio",
            "loonie": "#/components/schemas/loonie",
            "LPG": "#/components/schemas/LPG",
            "MaxiCash": "#/components/schemas/MaxiCash",
            "MercadoPago": "#/components/schemas/MercadoPago",
            "MiFinity": "#/components/schemas/MiFinity",
            "MobilePay": "#/components/schemas/MobilePay",
            "Mollie": "#/components/schemas/Mollie",
            "Moneris": "#/components/schemas/Moneris",
            "Monolo": "#/components/schemas/Monolo",
            "MonRem": "#/components/schemas/MonRem",
            "MtaPay": "#/components/schemas/MtaPay",
            "MuchBetter": "#/components/schemas/MuchBetter",
            "MuchBetterGateway": "#/components/schemas/MuchBetterGateway",
            "MyFatoorah": "#/components/schemas/MyFatoorah",
            "Naewe": "#/components/schemas/Naewe",
            "Neosurf": "#/components/schemas/Neosurf",
            "NMI": "#/components/schemas/NMI",
            "Netbanking": "#/components/schemas/Netbanking",
            "Neteller": "#/components/schemas/Neteller",
            "NGenius": "#/components/schemas/NGenius",
            "NinjaWallet": "#/components/schemas/NinjaWallet",
            "NordikCoin": "#/components/schemas/NordikCoin",
            "NOWPayments": "#/components/schemas/NOWPayments",
            "NuaPay": "#/components/schemas/NuaPay",
            "OchaPay": "#/components/schemas/OchaPay",
            "OmniMatrix": "#/components/schemas/OmniMatrix",
            "Onlineueberweisen": "#/components/schemas/Onlineueberweisen",
            "OnRamp": "#/components/schemas/OnRamp",
            "Orbital": "#/components/schemas/Orbital",
            "Pagadito": "#/components/schemas/Pagadito",
            "Pagsmile": "#/components/schemas/Pagsmile",
            "Panamerican": "#/components/schemas/Panamerican",
            "PandaGateway": "#/components/schemas/PandaGateway",
            "ParamountCommerce": "#/components/schemas/ParamountCommerce",
            "ParamountEft": "#/components/schemas/ParamountEft",
            "ParamountInterac": "#/components/schemas/ParamountInterac",
            "Pay4Fun": "#/components/schemas/Pay4Fun",
            "Paybilt": "#/components/schemas/Paybilt",
            "PayCash": "#/components/schemas/PayCash",
            "PayClub": "#/components/schemas/PayClub",
            "Paycly": "#/components/schemas/Paycly",
            "PayCom": "#/components/schemas/PayCom",
            "PayEcards": "#/components/schemas/PayEcards",
            "Paynote": "#/components/schemas/Paynote",
            "PayPal": "#/components/schemas/PayPal",
            "Payeezy": "#/components/schemas/Payeezy",
            "Payflow": "#/components/schemas/Payflow",
            "PayGlocal": "#/components/schemas/PayGlocal",
            "PaymentAsia": "#/components/schemas/PaymentAsia",
            "PaymenTechnologies": "#/components/schemas/PaymenTechnologies",
            "PaymentsOS": "#/components/schemas/PaymentsOS",
            "Paymero": "#/components/schemas/Paymero",
            "Payper": "#/components/schemas/Payper",
            "Payr": "#/components/schemas/Payr",
            "PayRedeem": "#/components/schemas/PayRedeem",
            "PayRetailers": "#/components/schemas/PayRetailers",
            "Paysafe": "#/components/schemas/Paysafe",
            "Paysafecard": "#/components/schemas/Paysafecard",
            "Paysafecash": "#/components/schemas/Paysafecash",
            "PayTabs": "#/components/schemas/PayTabs",
            "PayU": "#/components/schemas/PayU",
            "PayULatam": "#/components/schemas/PayULatam",
            "Payvision": "#/components/schemas/Payvision",
            "PayXpert": "#/components/schemas/PayXpert",
            "PharosPayments": "#/components/schemas/PharosPayments",
            "Piastrix": "#/components/schemas/Piastrix",
            "Pin4Pay": "#/components/schemas/Pin4Pay",
            "Plugnpay": "#/components/schemas/Plugnpay",
            "PostFinance": "#/components/schemas/PostFinance",
            "Powertranz": "#/components/schemas/Powertranz",
            "PSiGate": "#/components/schemas/PSiGate",
            "PPRO": "#/components/schemas/PPRO",
            "Prosa": "#/components/schemas/Prosa",
            "Quickpay": "#/components/schemas/Quickpay",
            "Rapyd": "#/components/schemas/Rapyd",
            "RPN": "#/components/schemas/RPN",
            "Realex": "#/components/schemas/Realex",
            "Realtime": "#/components/schemas/Realtime",
            "Redsys": "#/components/schemas/Redsys",
            "Rotessa": "#/components/schemas/Rotessa",
            "Safecharge": "#/components/schemas/Safecharge",
            "SaltarPay": "#/components/schemas/SaltarPay",
            "SMSVoucher": "#/components/schemas/SMSVoucher",
            "Sofort": "#/components/schemas/Sofort",
            "Sagepay": "#/components/schemas/Sagepay",
            "SeamlessChex": "#/components/schemas/SeamlessChex",
            "SecureTrading": "#/components/schemas/SecureTrading",
            "SecurionPay": "#/components/schemas/SecurionPay",
            "Skrill": "#/components/schemas/Skrill",
            "SmartInvoice": "#/components/schemas/SmartInvoice",
            "SparkPay": "#/components/schemas/SparkPay",
            "Splitit": "#/components/schemas/Splitit",
            "StaticGateway": "#/components/schemas/StaticGateway",
            "STPMexico": "#/components/schemas/STPMexico",
            "Stripe": "#/components/schemas/Stripe",
            "Tabby": "#/components/schemas/Tabby",
            "Telr": "#/components/schemas/Telr",
            "TestProcessor": "#/components/schemas/TestProcessor",
            "ToditoCash": "#/components/schemas/ToditoCash",
            "Triple000": "#/components/schemas/Triple000",
            "Truevo": "#/components/schemas/Truevo",
            "TrustsPay": "#/components/schemas/TrustsPay",
            "Trustly": "#/components/schemas/Trustly",
            "TWINT": "#/components/schemas/TWINT",
            "Txn": "#/components/schemas/Txn",
            "Unlimit": "#/components/schemas/Unlimit",
            "UPayCard": "#/components/schemas/UPayCard",
            "USAePay": "#/components/schemas/USAePay",
            "VantivLitle": "#/components/schemas/VantivLitle",
            "VCreditos": "#/components/schemas/VCreditos",
            "VegaWallet": "#/components/schemas/VegaWallet",
            "Viva": "#/components/schemas/Viva",
            "Wallet88": "#/components/schemas/Wallet88",
            "Walpay": "#/components/schemas/Walpay",
            "WesternUnion": "#/components/schemas/WesternUnion",
            "Wirecard": "#/components/schemas/Wirecard",
            "WorldlineAtosFrankfurt": "#/components/schemas/WorldlineAtosFrankfurt",
            "Worldpay": "#/components/schemas/Worldpay",
            "Zotapay": "#/components/schemas/Zotapay",
            "eMerchantPay": "#/components/schemas/eMerchantPay",
            "ecoPayz": "#/components/schemas/ecoPayz",
            "ecoPayzTurkey": "#/components/schemas/ecoPayzTurkey",
            "iCanPay": "#/components/schemas/iCanPay",
            "iCheque": "#/components/schemas/iCheque",
            "iDebit": "#/components/schemas/iDebit",
            "vegaaH": "#/components/schemas/vegaaH",
            "XPay": "#/components/schemas/XPay",
            "Zimpler": "#/components/schemas/Zimpler"
          }
        },
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the payment gateway account.",
            "readOnly": true,
            "maxLength": 50,
            "example": "gw_acc_0YVCXMF26DDNKAERE5NW727S34"
          },
          "gatewayName": {
            "$ref": "#/components/schemas/GatewayName"
          },
          "acquirerName": {
            "default": "Other",
            "allOf": [
              {
                "$ref": "#/components/schemas/AcquirerName"
              }
            ]
          },
          "method": {
            "$ref": "#/components/schemas/PaymentMethod"
          },
          "acceptedCurrencies": {
            "description": "Accepted currencies.\nThis is an array of ISO 4217 currency codes.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "paymentCardSchemes": {
            "description": "Accepted payment card brands.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentCardBrand"
            }
          },
          "status": {
            "description": "Status of the gateway account.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "pending",
              "closed"
            ]
          },
          "merchantCategoryCode": {
            "description": "Merchant category code of the payment gateway account.",
            "type": "string",
            "pattern": "^[0-9]{4}$",
            "default": "0000"
          },
          "dccMarkup": {
            "description": "Dynamic currency conversion markup in basis points.\nThis value cannot be `0` if the `dccForceCurrency` field is empty.",
            "type": [
              "integer",
              "null"
            ],
            "minimum": -10000,
            "maximum": 10000
          },
          "dccForceCurrency": {
            "type": [
              "string",
              "null"
            ],
            "description": "Forces Dynamic Currency Conversion (DCC) to the specified currency on each sale.\nTo disable forced DCC, leave this field empty."
          },
          "dccForceConfirmation": {
            "type": "boolean",
            "default": false,
            "description": "Specifies whether a confirmation step is required when `dccForceCurrency` is set."
          },
          "dccForceRounding": {
            "type": "boolean",
            "default": false,
            "description": "Specifies that DCC quote amounts must be rounded half up to the nearest whole number."
          },
          "descriptor": {
            "description": "Gateway account descriptor value.",
            "type": [
              "string",
              "null"
            ]
          },
          "cityField": {
            "description": "Gateway account city field.\nThis value is also known as a line 2 descriptor.",
            "type": [
              "string",
              "null"
            ]
          },
          "excludedDccQuoteCurrencies": {
            "description": "Excluded Dynamic Currency Conversion (DCC) quote currencies.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "monthlyLimit": {
            "description": "Monthly limit on the amount money that the gateway account can process.",
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "minimum": 0
          },
          "approvalWindowTtl": {
            "description": "Allotted time, in seconds, in which an offsite transaction must be approved before it is automatically `abandoned`.",
            "type": "integer",
            "default": 3600,
            "minimum": 300,
            "maximum": 16777215
          },
          "reconciliationWindowEnabled": {
            "description": "Specifies that if a transaction is not reconciled within the `reconciliationWindowTtl` time, the transaction is marked as `abandoned`.",
            "type": "boolean",
            "default": false
          },
          "reconciliationWindowTtl": {
            "description": "Allotted time, in seconds, in which a reconciliation must occur before it is automatically `abandoned`.",
            "type": [
              "integer",
              "null"
            ],
            "minimum": 300,
            "maximum": 16777215
          },
          "threeDSecure": {
            "description": "Specifies if a gateway account allows 3D Secure.",
            "type": "boolean",
            "default": false
          },
          "dynamicDescriptor": {
            "description": "Specifies if a gateway allows dynamic descriptors.",
            "type": "boolean",
            "default": false
          },
          "digitalWallets": {
            "$ref": "#/components/schemas/DigitalWallets"
          },
          "isDown": {
            "description": "Specifies if a gateway is in a downtime period.",
            "type": "boolean",
            "readOnly": true
          },
          "additionalFilters": {
            "description": "Additional filters used to determine if the gateway account can be selected to process a transaction.\n\nFor example, the filter may place a maximum amount value on transaction.\nIf a transaction exceeds this value, the gateway account is not used.\n\nFor more information see,\n[Using filters](https://www.rebilly.com/docs/dev-docs/search-filters).",
            "type": [
              "string",
              "null"
            ],
            "example": "amount:1..100;bin:411111,444433"
          },
          "timeout": {
            "description": "Gateway account request timeout, in seconds.",
            "type": [
              "integer",
              "null"
            ],
            "minimum": 10,
            "maximum": 120
          },
          "token": {
            "description": "Gateway account token.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "example": "TwiX3f92k4AiBE27BzTbQ38hHjicBz_w"
          },
          "sticky": {
            "description": "Specifies if all future payments by the customer's payment instrument 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": "boolean",
            "default": true
          },
          "setupInstruction": {
            "type": "string",
            "default": "do-nothing",
            "description": "Creates zero, one, or more child transactions such as `authorize` and `void`.\nThe transactions are linked to the `setup` transaction by the `parentTransactionId` relationship.",
            "enum": [
              "authorize",
              "authorize-and-void",
              "sca",
              "do-nothing"
            ],
            "x-enumDescriptions": {
              "authorize": "Creates an `authorize` transaction in the amount and currency of the request.",
              "authorize-and-void": "Creates an `authorize` transaction followed by a `void`, if the `authorize` is approved.\nIf the request amount is $0, then a $1 authorize is created. Otherwise the request amount is used.",
              "sca": "Uses Strong Customer Authentication (SCA) without an `authorize` transaction.\nSCA includes 3DS, and specific wallet behavior,\nsuch as setting up a billing agreement with PayPal.",
              "do-nothing": "Does nothing except return an approved `setup` transaction.\nThis is the default behavior."
            }
          },
          "readyToPayoutInstruction": {
            "type": "string",
            "default": "none",
            "description": "Defines the mode of gateway payout behaviour for the [Ready to payout](https://www.rebilly.com/catalog/all/storefront-purchases/storefrontpostreadytopayout) operation.",
            "enum": [
              "all",
              "covered-payout",
              "approved-payment",
              "none"
            ],
            "x-enumDescriptions": {
              "all": "Payout any amount from this gateway.",
              "covered-payout": "Payout from this gateway if it previously processed a payment for the same,\nor a greater, amount.",
              "approved-payment": "Payout any amount from this gateway if it processed an earlier payment.\nThe customer must have a previously approved transaction,\nin the same currency, on this gateway.",
              "none": "Do not allow any payouts with this gateway. This is the default value, merchants must opt into payouts."
            }
          },
          "transactionEmailAliasTemplate": {
            "description": "Email address template used in place of a customer's real email address when sending transaction data to a processor.\nUse `{{customerId}}` as a placeholder for the customer's ID.\nWhen empty, the customer's real email address is used.",
            "type": [
              "string",
              "null"
            ],
            "example": "{{customerId}}@receipts.example.com"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "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",
                    "onBoardingUrl",
                    "dynamicIpnUrl",
                    "staticIpnUrl"
                  ]
                }
              }
            }
          }
        }
      },
      "A1Gateway": {
        "description": "A1Gateway gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "A1Gateway credentials object.",
                "properties": {
                  "accountId": {
                    "type": "string",
                    "description": "ID of the A1Gateway account."
                  },
                  "password": {
                    "type": "string",
                    "description": "A1Gateway password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "accountId",
                  "password"
                ]
              }
            }
          }
        ]
      },
      "ThreeDSecureIO3dsServer": {
        "description": "ThreeDSecureIO 3DS Server configuration.\nAt least one of the Acquirer merchant ID and BIN fields from the same provider (Amex ID and BIN, JCB ID and BIN, Discover ID and BIN, Mastercard ID and BIN, or Visa ID and BIN) must be provided.",
        "type": "object",
        "required": [
          "name",
          "merchantName",
          "merchantCountry",
          "merchantUrl",
          "transactionType"
        ],
        "properties": {
          "name": {
            "type": "string",
            "description": "Merchant plug-in name.",
            "enum": [
              "ThreeDSecureIO3dsServer"
            ]
          },
          "acquirerMerchantIdVisa": {
            "type": "string",
            "description": "Merchant ID (MID) of the Visa acquirer.\nAt least one pair of ID and BIN fields from the same provider must be provided.",
            "maxLength": 35
          },
          "acquirerMerchantIdMastercard": {
            "type": "string",
            "description": "Merchant ID (MID) of the Mastercard acquirer.\nAt least one pair of ID and BIN fields from the same provider must be provided.",
            "maxLength": 35
          },
          "acquirerMerchantIdAmex": {
            "type": "string",
            "description": "Merchant ID (MID) of the American Express acquirer.\nAt least one pair of ID and BIN fields from the same provider must be provided.",
            "maxLength": 35
          },
          "acquirerMerchantIdDiscover": {
            "type": "string",
            "description": "Merchant ID (MID) of the Discover/Diners acquirer.\nAt least one pair of ID and BIN fields from the same provider must be provided.",
            "maxLength": 35
          },
          "acquirerMerchantIdJcb": {
            "type": "string",
            "description": "Merchant ID (MID) of the JCB acquirer.\nAt least one pair of ID and BIN fields from the same provider must be provided.",
            "maxLength": 35
          },
          "merchantName": {
            "type": "string",
            "description": "Name of the merchant.",
            "maxLength": 40
          },
          "merchantAcquirerBinVisa": {
            "type": "string",
            "description": "BIN of the Visa acquirer.\nAt least one pair of ID and BIN fields from the same provider must be provided.",
            "minLength": 6,
            "maxLength": 11
          },
          "merchantAcquirerBinMastercard": {
            "type": "string",
            "description": "BIN of the Mastercard acquirer.\nAt least one pair of ID and BIN fields from the same provider must be provided.",
            "minLength": 6,
            "maxLength": 11
          },
          "merchantAcquirerBinAmex": {
            "type": "string",
            "description": "BIN of the American Express acquirer.\nAt least one pair of ID and BIN fields from the same provider must be provided.",
            "minLength": 6,
            "maxLength": 11
          },
          "merchantAcquirerBinDiscover": {
            "type": "string",
            "description": "BIN of the Discover/Diners acquirer.\nAt least one pair of ID and BIN fields from the same provider must be provided.",
            "minLength": 6,
            "maxLength": 11
          },
          "merchantAcquirerBinJcb": {
            "type": "string",
            "description": "BIN of the JCB acquirer.\nAt least one pair of ID and BIN fields from the same provider must be provided.",
            "minLength": 6,
            "maxLength": 11
          },
          "merchantCountry": {
            "type": "string",
            "description": "Merchant country in ISO Alpha-2 code format.",
            "maxLength": 2,
            "example": "US"
          },
          "merchantUrl": {
            "type": "string",
            "description": "URL of the merchant's website.",
            "maxLength": 2048
          },
          "transactionType": {
            "type": "string",
            "enum": [
              "01",
              "03",
              "10",
              "11",
              "28"
            ],
            "description": "Identifies the type of transaction that is being authenticated.",
            "x-enumDescriptions": {
              "1": "Goods/Service purchase.",
              "3": "Check acceptance.",
              "10": "Account funding.",
              "11": "Quasi-Cash transaction. Indicates the type of 3RI request.",
              "28": "Prepaid activation and load."
            }
          },
          "declineNotEnrolled": {
            "type": "boolean",
            "description": "Specifies whether to decline transactions if a payment card is not enrolled.",
            "default": false
          },
          "forceChallenge": {
            "type": "boolean",
            "description": "Specifies if the 3D Secure authentication must be forced into challenge flow.",
            "default": false
          }
        }
      },
      "ACI": {
        "description": "ACI gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "ACI credentials object.",
                "properties": {
                  "entityId": {
                    "type": "string"
                  },
                  "accessToken": {
                    "type": "string",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "entityId",
                  "accessToken"
                ]
              },
              "settings": {
                "type": "object",
                "description": "ACI settings object.",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "ACI custom server URL."
                  }
                }
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Adyen": {
        "description": "Adyen gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Adyen credentials object.",
                "properties": {
                  "merchantAccount": {
                    "type": "string",
                    "description": "Adyen merchant account."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Adyen API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "hmacKey": {
                    "type": "string",
                    "description": "Adyen HMAC key to verify IPN signature.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantAccount",
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Adyen settings object.",
                "properties": {
                  "store": {
                    "type": "string",
                    "description": "E-commerce or point-of-sale store that is processing the payment.",
                    "minLength": 1,
                    "maxLength": 16
                  },
                  "url": {
                    "type": "string",
                    "description": "Adyen post URL."
                  },
                  "splitPayments": {
                    "type": "array",
                    "description": "Adyen split payments.",
                    "items": {
                      "type": "object",
                      "properties": {
                        "percentage": {
                          "description": "Percentage of the transaction amount.",
                          "type": "number",
                          "format": "double",
                          "minimum": 0,
                          "maximum": 100,
                          "example": 0.5
                        },
                        "commissionAmount": {
                          "description": "Fixed commission amount in minor units.",
                          "type": "number",
                          "format": "integer",
                          "example": 100
                        },
                        "currency": {
                          "$ref": "#/components/schemas/CurrencyCode"
                        },
                        "account": {
                          "description": "ID of the balance account where the split amount is sent.",
                          "type": "string"
                        },
                        "merchantCountry": {
                          "description": "Two-letter ISO 3166 alpha-2 code of the merchant's country.",
                          "type": "string",
                          "example": "US"
                        },
                        "type": {
                          "description": "Account type of the split payment.",
                          "type": "string",
                          "enum": [
                            "BalanceAccount",
                            "Commission",
                            "Remainder",
                            "PaymentFee"
                          ]
                        }
                      }
                    }
                  },
                  "totalTaxRate": {
                    "type": "number",
                    "format": "double",
                    "description": "Total tax percentage as a decimal.\nUse this field to calculate the total tax amount to send with level 2 enhanced scheme data.",
                    "example": 5.5,
                    "minimum": 0.01,
                    "maximum": 100
                  },
                  "enableMoto": {
                    "type": "boolean",
                    "description": "Specifies whether to use Mail Order Telephone Order (MOTO).",
                    "default": false,
                    "example": false
                  },
                  "riskProfile": {
                    "type": "string",
                    "description": "Adyen risk profile."
                  },
                  "levelTwoThreeDataCustomField": {
                    "type": "string",
                    "description": "Name of the transaction custom field that holds the Level 2/3 data."
                  },
                  "mastercardDpaId": {
                    "type": "string",
                    "description": "ID of the Digital Payment Application (DPA) for Mastercard Secure Card on File (SCOF)."
                  },
                  "mastercardServiceId": {
                    "type": "string",
                    "description": "ID of the Mastercard Secure Card on File (SCOF) service."
                  }
                },
                "required": [
                  "url"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Aera": {
        "description": "Aera gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Aera credentials object.",
                "properties": {
                  "clientId": {
                    "type": "string"
                  },
                  "apiKey": {
                    "type": "string",
                    "format": "password",
                    "writeOnly": true
                  },
                  "ipnSecret": {
                    "type": "string",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "clientId",
                  "apiKey",
                  "ipnSecret"
                ]
              }
            }
          }
        ]
      },
      "Aircash": {
        "description": "Aircash gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Aircash credentials object.",
                "properties": {
                  "partnerId": {
                    "type": "string",
                    "description": "ID of the Aircash partner."
                  },
                  "privateKey": {
                    "writeOnly": true,
                    "type": "string",
                    "description": "Private key of the Aircash partner.",
                    "format": "password",
                    "x-multiline": true
                  },
                  "privateKeyPassword": {
                    "writeOnly": true,
                    "type": "string",
                    "description": "Private key password of the Aircash partner.",
                    "format": "password"
                  }
                },
                "required": [
                  "partnerId",
                  "privateKey",
                  "privateKeyPassword"
                ]
              }
            }
          }
        ]
      },
      "Airpay": {
        "description": "Airpay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Airpay credentials object.",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Airpay username."
                  },
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Airpay merchant."
                  },
                  "password": {
                    "writeOnly": true,
                    "type": "string",
                    "description": "Airpay password.",
                    "format": "password"
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Airpay API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "username",
                  "merchantId",
                  "password",
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "Airwallex": {
        "description": "Airwallex gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Airwallex credentials object.",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "Airwallex client ID."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Airwallex API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "clientId",
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Airwallex settings object.",
                "properties": {
                  "deviceIdCustomField": {
                    "type": "string",
                    "description": "Name of the transaction custom field that holds the device ID."
                  }
                }
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "AmazonPay": {
        "description": "AmazonPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the AmazonPay merchant."
                  },
                  "storeId": {
                    "type": "string",
                    "description": "ID of the AmazonPay store."
                  },
                  "publicKeyId": {
                    "type": "string",
                    "description": "ID of the AmazonPay public key."
                  },
                  "privateKey": {
                    "description": "ID of the AmazonPay private key.",
                    "type": "string",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  }
                },
                "required": [
                  "privateKey",
                  "storeId",
                  "publicKeyId",
                  "merchantId"
                ]
              }
            }
          }
        ]
      },
      "AmexVPC": {
        "description": "AmexVPC gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "AmexVPC credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the AmexVPC merchant."
                  },
                  "accessCode": {
                    "type": "string",
                    "description": "AmexVPC access Code.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "user": {
                    "type": "string",
                    "description": "AmexVPC account user.\nThis field is used for refund, void, and capture transactions."
                  },
                  "password": {
                    "type": "string",
                    "description": "AmexVPC account password.\nThis field is used for refund, void, and capture transactions.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "accessCode",
                  "user",
                  "password"
                ]
              },
              "settings": {
                "type": "object",
                "description": "AmexVPC settings object.",
                "properties": {
                  "url": {
                    "type": "string",
                    "description": "Virtual payment client URL."
                  }
                },
                "required": [
                  "url"
                ]
              }
            }
          }
        ]
      },
      "Antom": {
        "description": "Antom gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Antom credentials object.",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "Antom client ID."
                  },
                  "privateKey": {
                    "type": "string",
                    "description": "Antom private key.",
                    "format": "password",
                    "writeOnly": true,
                    "x-multiline": true
                  }
                },
                "required": [
                  "clientId",
                  "privateKey"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "ApcoPay": {
        "description": "ApcoPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "ApcoPay credentials object.",
                "properties": {
                  "profileID": {
                    "type": "string",
                    "description": "ID of the ApcoPay profile."
                  },
                  "secretWord": {
                    "type": "string",
                    "description": "ApcoPay secret word.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "MerchantID": {
                    "type": "string",
                    "description": "ID of the ApcoPay merchant."
                  },
                  "MerchantPassword": {
                    "type": "string",
                    "description": "ApcoPay merchant password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "profileID",
                  "secretWord",
                  "MerchantID",
                  "MerchantPassword"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "method": {
                    "type": "string",
                    "description": "ApcoPay method.",
                    "enum": [
                      "AFTERPAY",
                      "BANCONTACT",
                      "CREDITCLICK",
                      "FLEXEPIN",
                      "IDEAL",
                      "JPAY",
                      "OCTAPAY",
                      "ONLINEUBERWEISEN",
                      "ORIENTALWALLET",
                      "VENUSPOINT",
                      "ZIMPLER"
                    ]
                  }
                },
                "required": [
                  "method"
                ]
              }
            }
          }
        ]
      },
      "AsiaPay": {
        "description": "AsiaPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "AsiaPay credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "AsiaPay merchant number."
                  },
                  "loginId": {
                    "type": "string",
                    "description": "AsiaPay login ID."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "AsiaPay secret key for hash.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "password": {
                    "type": "string",
                    "description": "AsiaPay password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "loginId",
                  "password",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "baseUrl": {
                    "type": "string",
                    "description": "Base URL for AsiaPay API."
                  }
                },
                "required": [
                  "baseUrl"
                ]
              }
            }
          }
        ]
      },
      "AsiaPaymentGateway": {
        "description": "AsiaPaymentGateway gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "AsiaPaymentGateway credentials object.",
                "properties": {
                  "merchantNumber": {
                    "type": "string",
                    "description": "AsiaPaymentGateway merchant number."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "AsiaPaymentGateway secret key for hash.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantNumber",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "use3DSEndpoint": {
                    "type": "boolean",
                    "description": "Specifies whether to use a 3DS endpoint."
                  }
                }
              }
            }
          }
        ]
      },
      "AstroPayCard": {
        "description": "AstroPay Card gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "AstroPay Card credentials object.",
                "properties": {
                  "x_login": {
                    "type": "string",
                    "description": "AstroPay Card login."
                  },
                  "x_tran_key": {
                    "type": "string",
                    "description": "AstroPay Card transaction key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secret_key": {
                    "type": "string",
                    "description": "AstroPay Card secret key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "api_key": {
                    "type": "string",
                    "description": "OneTouch Astropay API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "x_login",
                  "x_tran_key",
                  "secret_key"
                ]
              },
              "settings": {
                "type": "object",
                "description": "AstroPay Card settings object.",
                "properties": {
                  "oneTouchApi": {
                    "type": "boolean",
                    "description": "Specifies whether to use a OneTouch AstroPay API.",
                    "default": false
                  },
                  "useOneTouchSdk": {
                    "type": "boolean",
                    "description": "Specifies whether to use the OneTouch AstroPay SDK.",
                    "default": false
                  },
                  "merchantName": {
                    "type": "string",
                    "description": "Displayed merchant name for AstroPay OneTouch."
                  },
                  "merchantLogoUrl": {
                    "type": "string",
                    "description": "Displayed merchant logo for AstroPay OneTouch."
                  }
                }
              }
            }
          }
        ]
      },
      "AuthorizeNet": {
        "description": "AuthorizeNet gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "apiLoginId": {
                    "type": "string",
                    "description": "ID of the AuthorizeNet API login."
                  },
                  "transactionKey": {
                    "description": "AuthorizeNet transaction key.",
                    "type": "string",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiLoginId",
                  "transactionKey"
                ]
              }
            }
          }
        ]
      },
      "Awepay": {
        "description": "Awepay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Awepay credentials object.",
                "properties": {
                  "sid": {
                    "type": "string",
                    "description": "ID of the Awepay site."
                  },
                  "rcode": {
                    "type": "string",
                    "description": "Awepay rcode.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "Awepay secret key for the P2P REST API.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Awepay API key for REST API.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "publicKey": {
                    "type": "string",
                    "description": "Awepay public key for REST API.",
                    "x-multiline": true
                  },
                  "privateKey": {
                    "type": "string",
                    "description": "Awepay private key for REST API.",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  }
                },
                "required": [
                  "sid",
                  "rcode"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Awepay setting.",
                "properties": {
                  "useP2pRest": {
                    "type": "boolean",
                    "description": "Specifies whether to use the P2P REST API."
                  },
                  "useRestApi": {
                    "type": "boolean",
                    "description": "Specifies whether to use REST API."
                  },
                  "methodType": {
                    "type": "string",
                    "description": "Awepay method type."
                  }
                }
              }
            }
          }
        ]
      },
      "Bambora": {
        "description": "Bambora gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Bambora merchant."
                  },
                  "apiPasscode": {
                    "type": "string",
                    "description": "Bambora API passcode.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "apiPasscode"
                ]
              }
            }
          }
        ]
      },
      "BankSEND": {
        "description": "BankSEND gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "BankSEND credentials object.",
                "properties": {
                  "merchantId": {
                    "description": "ID of the BankSEND merchant.",
                    "type": "string"
                  },
                  "merchantToken": {
                    "type": "string",
                    "format": "password",
                    "description": "BankSEND merchant token.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "merchantToken"
                ]
              }
            }
          }
        ]
      },
      "BitPay": {
        "description": "BitPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "BitPay credentials object.",
                "properties": {
                  "token": {
                    "type": "string",
                    "description": "BitPay merchant API token.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "token"
                ]
              }
            }
          }
        ]
      },
      "BlueSnap": {
        "description": "BlueSnap gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "BlueSnap credentials object.",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "API username of the BlueSnap merchant."
                  },
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the BlueSnap merchant."
                  },
                  "password": {
                    "type": "string",
                    "description": "API password of the BlueSnap merchant.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "dataProtectionKey": {
                    "type": "string",
                    "description": "Data protection key of the BlueSnap merchant.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "enableMoto": {
                    "type": "boolean",
                    "description": "Specifies whether to use Mail Order Telephone Order (MOTO).",
                    "default": false
                  },
                  "salesTaxAmount": {
                    "type": "number",
                    "format": "double",
                    "description": "Sales tax amount as a decimal to send with level 2/3 data.",
                    "example": 0.06
                  },
                  "metadataCustomField": {
                    "type": "string",
                    "description": "Name of the transaction custom field that holds the BlueSnap transaction metadata."
                  }
                }
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "BraintreePayments": {
        "description": "BraintreePayments gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "publicKey": {
                    "type": "string",
                    "description": "BraintreePayments public key."
                  },
                  "privateKey": {
                    "type": "string",
                    "description": "BraintreePayments private key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the BraintreePayments merchant.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantAccountId": {
                    "type": "string",
                    "description": "ID of the BraintreePayments merchant account.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "publicKey",
                  "privateKey",
                  "merchantId",
                  "merchantAccountId"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Buckaroo": {
        "description": "Buckaroo gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Buckaroo credentials object.",
                "properties": {
                  "schemeKey": {
                    "type": "string",
                    "description": "Scheme key."
                  },
                  "websiteKey": {
                    "type": "string",
                    "description": "Website key."
                  },
                  "secretKey": {
                    "description": "Secret key.",
                    "type": "string",
                    "format": "password"
                  }
                },
                "required": [
                  "websiteKey",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "useSepaRecurring": {
                    "type": "boolean",
                    "description": "Specifies whether to use SEPA as recurring method.",
                    "default": false
                  }
                }
              }
            }
          }
        ]
      },
      "BVNK": {
        "description": "BVNK gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "BVNK credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "Merchant ID of the BVNK merchant."
                  },
                  "hawkAuthId": {
                    "type": "string",
                    "description": "HAWK auth ID.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "hawkAuthKey": {
                    "type": "string",
                    "description": "HAWK auth key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "hawkAuthId",
                  "hawkAuthKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "BVNK settings object.",
                "properties": {
                  "payoutCurrency": {
                    "type": "string",
                    "description": "Cryptocurrency of the payout."
                  },
                  "payoutNetwork": {
                    "type": "string",
                    "description": "Blockchain network to use for the payout."
                  },
                  "destinationTagCustomField": {
                    "type": "string",
                    "description": "Name of the customer custom field that holds payout destination tag for XRP."
                  }
                }
              }
            }
          }
        ]
      },
      "CASHlib": {
        "description": "CASHlib gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "CASHlib credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "CASHlib API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the CASHlib merchant."
                  }
                },
                "required": [
                  "apiKey",
                  "merchantId"
                ]
              }
            }
          }
        ]
      },
      "CODVoucher": {
        "description": "CODVoucher gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "CODVoucher credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "CODVoucher API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiSecret": {
                    "type": "string",
                    "description": "CODVoucher API secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey",
                  "apiSecret"
                ]
              }
            }
          }
        ]
      },
      "AmountAdjustmentTolerance": {
        "type": "integer",
        "description": "Tolerance percentage for the settled amount.",
        "minimum": 0,
        "maximum": 5,
        "example": 5
      },
      "Coinbase": {
        "description": "Coinbase gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Coinbase credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Coinbase settings object.",
                "required": [
                  "tolerancePercentage"
                ],
                "properties": {
                  "tolerancePercentage": {
                    "$ref": "#/components/schemas/AmountAdjustmentTolerance"
                  }
                }
              }
            }
          }
        ]
      },
      "CoinGate": {
        "description": "CoinGate gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "authToken": {
                    "type": "string",
                    "format": "password",
                    "description": "Authentication token.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "authToken"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "targetCurrency": {
                    "description": "Currency to which the received cryptocurrency is converted.\nThis field defaults to the transaction currency.",
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 3,
                    "example": "USD"
                  },
                  "tolerancePercentage": {
                    "$ref": "#/components/schemas/AmountAdjustmentTolerance"
                  },
                  "adjustAmount": {
                    "type": "boolean",
                    "description": "Specifies whether to adjust the amount that is received from the downstream gateway.",
                    "default": false,
                    "example": false
                  }
                }
              }
            }
          }
        ]
      },
      "CoinPayments": {
        "description": "CoinPayments gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "CoinPayments credentials object.",
                "required": [
                  "publicKey",
                  "privateKey",
                  "ipnSecret"
                ],
                "properties": {
                  "publicKey": {
                    "type": "string",
                    "description": "CoinPayments public key."
                  },
                  "privateKey": {
                    "type": "string",
                    "format": "password",
                    "description": "CoinPayments private key.",
                    "writeOnly": true
                  },
                  "ipnSecret": {
                    "type": "string",
                    "format": "password",
                    "description": "CoinPayments IPN secret.",
                    "writeOnly": true
                  },
                  "merchantId": {
                    "type": "string",
                    "format": "password",
                    "description": "ID of the CoinPayments merchant.",
                    "writeOnly": true
                  },
                  "clientId": {
                    "type": "string",
                    "description": "CoinPayments client ID required for API (version 2)."
                  },
                  "clientSecret": {
                    "type": "string",
                    "format": "password",
                    "description": "CoinPayments client secret required for API (version 2).",
                    "writeOnly": true
                  }
                }
              },
              "settings": {
                "type": "object",
                "properties": {
                  "useCallbackAddress": {
                    "type": "boolean",
                    "description": "Specifies if the callback address payment type must be used."
                  },
                  "useV2Api": {
                    "type": "boolean",
                    "description": "Specifies if the CoinPayments API (version 2) must be used.\nThis requires both CoinPayments client ID and secret to be provided."
                  },
                  "apiUrl": {
                    "type": "string",
                    "description": "URL of the CoinPayments API (version 2).",
                    "default": "https://api.coinpayments.com"
                  }
                }
              }
            }
          }
        ]
      },
      "Cardknox": {
        "description": "Cardknox gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "xKey": {
                    "type": "string",
                    "description": "Cardknox xKey.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "xKey"
                ]
              }
            }
          }
        ]
      },
      "Cashflows": {
        "description": "Cashflows gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "authId": {
                    "type": "string",
                    "description": "ID of the Cashflows authentication."
                  },
                  "authPassword": {
                    "type": "string",
                    "description": "ID of the Cashflows authentication password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "authPassword",
                  "authId"
                ]
              }
            }
          }
        ]
      },
      "Cashterminal": {
        "description": "Cashterminal gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "secretKey": {
                    "description": "Cashterminal secret key.",
                    "type": "string",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "CashToCode": {
        "description": "CashToCode gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "CashToCode credentials object.",
                "properties": {
                  "cashToCodeUsername": {
                    "type": "string",
                    "description": "CashToCode credentials username."
                  },
                  "cashToCodePassword": {
                    "type": "string",
                    "description": "CashToCode credentials password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantUsername": {
                    "type": "string",
                    "description": "Merchant credentials username."
                  },
                  "merchantPassword": {
                    "type": "string",
                    "description": "Merchant credentials password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "mid": {
                    "type": "string",
                    "description": "CashToCode Merchant Identifier Number (MID) or brand name."
                  }
                },
                "required": [
                  "cashToCodeUsername",
                  "cashToCodePassword",
                  "merchantUsername",
                  "merchantPassword"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "baseUrl": {
                    "type": "string",
                    "description": "Base API URL."
                  },
                  "skipAmountSelection": {
                    "type": "boolean",
                    "description": "Specifies whether to skip the amount selection screen.",
                    "default": false
                  },
                  "amounts": {
                    "type": "array",
                    "description": "Amounts for which transactions are processed.",
                    "items": {
                      "type": "number",
                      "format": "double",
                      "minimum": 0
                    }
                  }
                }
              }
            }
          }
        ]
      },
      "CauriPayment": {
        "description": "CauriPayment gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "CauriPayment credentials object.",
                "properties": {
                  "publicKey": {
                    "type": "string",
                    "description": "CauriPayment merchant public key."
                  },
                  "privateKey": {
                    "type": "string",
                    "description": "CauriPayment merchant private key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "publicKey",
                  "privateKey"
                ]
              }
            }
          }
        ]
      },
      "Cayan": {
        "description": "Cayan gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantSiteId": {
                    "type": "string",
                    "description": "ID of the Cayan merchant site."
                  },
                  "merchantName": {
                    "type": "string",
                    "description": "Cayan merchant name."
                  },
                  "merchantKey": {
                    "type": "string",
                    "description": "Cayan merchant key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantSiteId",
                  "merchantName",
                  "merchantKey"
                ]
              }
            }
          }
        ]
      },
      "CCAvenue": {
        "description": "CCAvenue gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "CCAvenue credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the CCAvenue merchant."
                  },
                  "accessCode": {
                    "type": "string",
                    "description": "CCAvenue access code.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "workingKey": {
                    "type": "string",
                    "description": "CCAvenue working key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "accessCode",
                  "workingKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "useStandingInstructionApi": {
                    "description": "Specifies whether to use the Standing Instruction API.",
                    "type": "boolean",
                    "default": false
                  }
                }
              }
            }
          }
        ]
      },
      "Chase": {
        "description": "Chase gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Chase NetConnect username."
                  },
                  "password": {
                    "type": "string",
                    "description": "Chase NetConnect password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "coNumber": {
                    "type": "string",
                    "description": "Chase CO number used for delimited file reports."
                  },
                  "divisionId": {
                    "type": "string",
                    "description": "ID of the Chase division."
                  },
                  "partialAuth": {
                    "type": "boolean",
                    "description": "Specifies whether to support partial authentications.",
                    "default": false
                  }
                },
                "required": [
                  "username",
                  "password",
                  "coNumber",
                  "divisionId",
                  "partialAuth"
                ]
              }
            }
          }
        ]
      },
      "CheckoutCom": {
        "description": "Checkout.com gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Checkout.com credentials object.",
                "properties": {
                  "secretKey": {
                    "type": "string",
                    "format": "password",
                    "description": "Checkout.com secret API key.\nGenerate this key in the Checkout.com dashboard under Developers->API keys section.",
                    "writeOnly": true
                  },
                  "signatureKey": {
                    "type": "string",
                    "format": "password",
                    "description": "Checkout.com webhook signature key.\nGenerate this key in the Checkout.com dashboard under Developers->Webhooks section.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "markAsWaitingGatewayOnPendingPayout": {
                    "type": "boolean",
                    "description": "Specifies whether to mark pending payouts as 'waiting-gateway/unknown' instead of 'approved'.",
                    "default": false
                  },
                  "subEntityIdWebsiteCustomField": {
                    "type": "string",
                    "description": "Name of the website custom field that holds the sub-entity ID."
                  },
                  "processingChannelId": {
                    "type": "string",
                    "description": "Checkout.com processing channel ID.\nCheckout.com secret API key can be configured with a default processing channel ID.\nOtherwise the processing channel ID needs to be set."
                  }
                }
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Chillstock": {
        "description": "Chillstock gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Chillstock credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "Merchant ID (MID)."
                  },
                  "privateKey": {
                    "type": "string",
                    "description": "Chillstock private key.",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  },
                  "publicKey": {
                    "type": "string",
                    "description": "Chillstock public key."
                  }
                },
                "required": [
                  "merchantId",
                  "privateKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "sandbox": {
                    "type": "boolean",
                    "description": "Specifies if the gateway account is forced to sandbox mode.",
                    "default": false
                  }
                }
              }
            }
          }
        ]
      },
      "Circle": {
        "description": "Circle gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Circle credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "format": "password",
                    "description": "Circle API key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "Citadel": {
        "description": "Citadel gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Citadel credentials object.",
                "properties": {
                  "storeName": {
                    "type": "string",
                    "description": "Citadel store name."
                  },
                  "storeId": {
                    "type": "string",
                    "description": "ID of the Citadel store."
                  },
                  "username": {
                    "type": "string",
                    "description": "Citadel username."
                  },
                  "password": {
                    "type": "string",
                    "description": "Citadel password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "storeName",
                  "storeId",
                  "username",
                  "password"
                ]
              }
            }
          }
        ]
      },
      "Clearhaus": {
        "description": "Clearhaus gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Clearhaus API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "Cleo": {
        "description": "Cleo gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Cleo credentials object.",
                "properties": {
                  "accessToken": {
                    "type": "string",
                    "description": "Cleo access token.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "accessToken"
                ]
              }
            }
          }
        ]
      },
      "Conekta": {
        "description": "Conekta gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Conekta credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Conekta private API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Conekta settings object.",
                "properties": {
                  "baseUrl": {
                    "type": "string",
                    "description": "Base API URL."
                  }
                }
              }
            }
          }
        ]
      },
      "Coppr": {
        "description": "Coppr gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Coppr credentials object.",
                "properties": {
                  "organizationId": {
                    "type": "string",
                    "description": "ID of the Coppr organization."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Coppr API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "organizationId",
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Coppr settings object.",
                "properties": {
                  "rebillyPublishableKey": {
                    "type": "string",
                    "description": "Rebilly publishable API key.\nIf this value is provided, a payment token is created for each transaction.\nTo obtain an API key, see [Manage API keys](https://www.rebilly.com/docs/dev-docs/api-keys/#manage-api-keys)."
                  }
                }
              }
            }
          }
        ]
      },
      "Credorax": {
        "description": "Credorax gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Credorax merchant."
                  },
                  "merchantMd5Signature": {
                    "type": "string",
                    "description": "Credorax MD5 signature.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "merchantMd5Signature"
                ]
              }
            }
          }
        ]
      },
      "Cryptomus": {
        "description": "Cryptomus gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Cryptomus credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string"
                  },
                  "apiKey": {
                    "type": "string",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "refundAddress": {
                    "type": "string",
                    "description": "Address where the refund is sent."
                  }
                }
              }
            }
          }
        ]
      },
      "Cryptonator": {
        "description": "Cryptonator gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Cryptonator credentials object.",
                "properties": {
                  "merchant_id": {
                    "type": "string",
                    "description": "ID of the Cryptonator merchant."
                  },
                  "secret": {
                    "type": "string",
                    "description": "Cryptonator secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchant_id",
                  "secret"
                ]
              }
            }
          }
        ]
      },
      "CyberSource": {
        "description": "CyberSource gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "CyberSource credentials object.",
                "properties": {
                  "accessKey": {
                    "type": "string",
                    "description": "CyberSource access key."
                  },
                  "profileId": {
                    "type": "string",
                    "description": "ID of the CyberSource profile."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "CyberSource secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "accessKey",
                  "profileId",
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "DataCash": {
        "description": "DataCash gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "client": {
                    "type": "string",
                    "description": "DataCash client."
                  },
                  "password": {
                    "type": "string",
                    "description": "DataCash password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "reportGroup": {
                    "type": "string",
                    "description": "DataCash report group."
                  },
                  "reportUser": {
                    "type": "string",
                    "description": "DataCash report user."
                  },
                  "reportPassword": {
                    "type": "string",
                    "description": "DataCash report password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "visaPayoutsClient": {
                    "type": "string",
                    "description": "DataCash client for Visa OCT (Original Credit Transfer) payouts."
                  },
                  "visaPayoutsPassword": {
                    "type": "string",
                    "description": "DataCash password for Visa OCT (Original Credit Transfer) payouts.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "masterCardPayoutsClient": {
                    "type": "string",
                    "description": "DataCash client for MasterCard OCT (Original Credit Transfer) payouts."
                  },
                  "masterCardPayoutsPassword": {
                    "type": "string",
                    "description": "DataCash password for MasterCard OCT (Original Credit Transfer) payouts.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "client",
                  "password"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Datacash settings object.",
                "properties": {
                  "policy": {
                    "type": "integer",
                    "description": "Policy.",
                    "minimum": 0,
                    "maximum": 7,
                    "default": 2
                  },
                  "delay": {
                    "type": "integer",
                    "description": "Automatic capture delay in hours.",
                    "minimum": 0,
                    "default": 0
                  }
                }
              }
            }
          }
        ]
      },
      "Dengi": {
        "description": "Dengi gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "projectId": {
                    "type": "string",
                    "description": "ID of the Dengi project."
                  },
                  "publicKey": {
                    "type": "string",
                    "description": "Dengi public key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "refundKey": {
                    "type": "string",
                    "description": "Dengi refund key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "projectId",
                  "publicKey",
                  "refundKey"
                ]
              }
            }
          }
        ]
      },
      "Dimoco": {
        "description": "Dimoco gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Dimoc merchant."
                  },
                  "orderId": {
                    "type": "string",
                    "description": "ID of the Dimoc project."
                  },
                  "password": {
                    "type": "string",
                    "format": "password",
                    "description": "ID of the Dimoc project.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "orderId",
                  "password"
                ]
              }
            }
          }
        ]
      },
      "dLocal": {
        "description": "dLocal gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "xLogin": {
                    "type": "string",
                    "description": "dLocal login."
                  },
                  "xTransKey": {
                    "type": "string",
                    "description": "dLocal transKey."
                  },
                  "secretKey": {
                    "type": "string",
                    "format": "password",
                    "description": "dLocal secret key.",
                    "writeOnly": true
                  },
                  "xPayoutLogin": {
                    "type": "string",
                    "description": "dLocal payout login."
                  },
                  "xPayoutTransKey": {
                    "type": "string",
                    "description": "dLocal payout transKey."
                  },
                  "payoutSecretKey": {
                    "type": "string",
                    "format": "password",
                    "description": "dLocal payout secret key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "xLogin",
                  "xTransKey",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "dLocal settings object.",
                "properties": {
                  "createInstallmentPlan": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether to create an installment plan and use it for payment."
                  },
                  "customerDocumentCustomField": {
                    "type": "string",
                    "description": "Name of the transaction custom field that holds the customer document.\nUse this setting to skip the intermediate step of collecting the customer document for payment card transactions."
                  }
                }
              }
            }
          }
        ]
      },
      "Dragonphoenix": {
        "description": "Dragonphoenix gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Dragonphoenix credentials object.",
                "properties": {
                  "sid": {
                    "type": "string",
                    "description": "ID of the Dragonphoenix site."
                  },
                  "rcode": {
                    "type": "string",
                    "description": "Dragonphoenix rcode.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "sid",
                  "rcode"
                ]
              }
            }
          }
        ]
      },
      "Dropayment": {
        "description": "Dropayment gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Dropayment credentials object.",
                "properties": {
                  "login": {
                    "type": "string",
                    "description": "Dropayment login."
                  },
                  "endpointId": {
                    "type": "string",
                    "description": "ID of the Dropayment end point."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "Dropayment secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "login",
                  "endpointId",
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "Directa24Banks": {
        "type": "string",
        "enum": [
          "AA",
          "AL",
          "AZ",
          "B",
          "BAB",
          "BB",
          "BC",
          "BE",
          "BL",
          "BM",
          "BN",
          "BP",
          "BQ",
          "BU",
          "BV",
          "BW",
          "BX",
          "BZ",
          "CA",
          "CE",
          "CI",
          "CU",
          "EF",
          "EN",
          "EY",
          "FA",
          "FB",
          "FC",
          "GC",
          "GG",
          "HC",
          "I",
          "IA",
          "IB",
          "JM",
          "LC",
          "LE",
          "LL",
          "MC",
          "ME",
          "MD",
          "MP",
          "MT",
          "NB",
          "OM",
          "OX",
          "PC",
          "PH",
          "PL",
          "SB",
          "SC",
          "SE",
          "SF",
          "SM",
          "SS",
          "ST",
          "SU",
          "TC",
          "TK",
          "TG",
          "TR",
          "TY",
          "RY",
          "UB",
          "UI",
          "UL",
          "US",
          "VD",
          "VI",
          "WA",
          "WP",
          "WU",
          "XA"
        ]
      },
      "Directa24": {
        "description": "Directa24 gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Directa24 credentials object.",
                "properties": {
                  "x_login": {
                    "type": "string",
                    "description": "Directa24 login."
                  },
                  "x_tran_key": {
                    "type": "string",
                    "description": "Directa24 transaction key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secret_key": {
                    "type": "string",
                    "description": "Directa24 secret key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "web_pay_login": {
                    "type": "string",
                    "description": "Directa24 web pay status login."
                  },
                  "web_pay_tran_key": {
                    "type": "string",
                    "description": "Directa24 web pay status password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "cashout_login": {
                    "type": "string",
                    "description": "Directa24 cashout login."
                  },
                  "cashout_password": {
                    "type": "string",
                    "description": "Directa24 cashout password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "chargebackAccessKey": {
                    "type": "string",
                    "description": "Directa24 chargeback access key (email)."
                  },
                  "chargebackSecretKey": {
                    "type": "string",
                    "description": "Directa24 chargeback secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "x_login",
                  "x_tran_key",
                  "secret_key",
                  "web_pay_login",
                  "web_pay_tran_key"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Directa24 settings object.",
                "properties": {
                  "banks": {
                    "type": "array",
                    "description": "List of banks that is displayed to customers.",
                    "items": {
                      "$ref": "#/components/schemas/Directa24Banks"
                    }
                  },
                  "skipStep": {
                    "type": "boolean",
                    "description": "Specifies whether to skip the enter user personal information step."
                  },
                  "useV3Api": {
                    "type": "boolean",
                    "description": "Specifies whether to use Directa24 API version 3."
                  },
                  "storeIdNumber": {
                    "type": "boolean",
                    "description": "Specifies whether to store the customer ID number for future use."
                  }
                }
              }
            }
          }
        ]
      },
      "EasyPayDirect": {
        "description": "EasyPayDirect gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "EasyPayDirect credentials object.",
                "properties": {
                  "secretKey": {
                    "type": "string",
                    "description": "API secret key of the EasyPayDirect account.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "EBANX": {
        "description": "EBANX gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "EBANX credentials object.",
                "properties": {
                  "integrationKey": {
                    "type": "string",
                    "description": "EBANX integration key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "integrationKey"
                ]
              }
            }
          }
        ]
      },
      "EPG": {
        "description": "EPG gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "EPG credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the merchant."
                  },
                  "productId": {
                    "type": "string",
                    "description": "ID of the product.",
                    "maxLength": 50,
                    "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
                  },
                  "merchantPassword": {
                    "type": "string",
                    "description": "Merchant password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantKey": {
                    "type": "string",
                    "description": "Merchant key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "productId",
                  "merchantPassword",
                  "merchantKey"
                ]
              }
            }
          }
        ]
      },
      "EPro": {
        "description": "EPro gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "EPro credentials object.",
                "properties": {
                  "apiSecretKey": {
                    "type": "string",
                    "description": "EPro secret API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiSecretKey"
                ]
              }
            }
          }
        ]
      },
      "EcorePay": {
        "description": "EcorePay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "accountId": {
                    "type": "string",
                    "description": "ID of the EcorePay account."
                  },
                  "accountAuth": {
                    "type": "string",
                    "description": "EcorePay account authentication.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "accountId",
                  "accountAuth"
                ]
              }
            }
          }
        ]
      },
      "Elavon": {
        "description": "Elavon gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Elavon credentials object.",
                "properties": {
                  "ssl_merchant_id": {
                    "type": "string",
                    "description": "ID of the Elavon merchant."
                  },
                  "ssl_user_id": {
                    "type": "string",
                    "description": "ID of the Elavon user."
                  },
                  "ssl_pin": {
                    "type": "string",
                    "description": "Elavon pin.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "ssl_merchant_id",
                  "ssl_user_id",
                  "ssl_pin"
                ]
              }
            }
          }
        ]
      },
      "EMS": {
        "description": "EMS e-Commerce (XML) API gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "settings": {
                "type": "object",
                "description": "EMS settings object.",
                "properties": {
                  "delay": {
                    "type": "integer",
                    "description": "Automatic capture delay in hours."
                  }
                }
              },
              "credentials": {
                "type": "object",
                "description": "EMS credentials object.",
                "properties": {
                  "storeId": {
                    "type": "string",
                    "description": "ID of the EMS store."
                  },
                  "userId": {
                    "type": "string",
                    "description": "ID of the EMS account."
                  },
                  "password": {
                    "type": "string",
                    "format": "password",
                    "description": "EMS password.",
                    "writeOnly": true
                  },
                  "privateKey": {
                    "type": "string",
                    "format": "password",
                    "description": "Private key.",
                    "x-multiline": true,
                    "writeOnly": true
                  },
                  "privateKeyPassword": {
                    "type": "string",
                    "format": "password",
                    "description": "Private key password.",
                    "writeOnly": true
                  },
                  "clientCertificate": {
                    "type": "string",
                    "description": "Client certificate.",
                    "x-multiline": true
                  },
                  "clientCertificatePassword": {
                    "type": "string",
                    "format": "password",
                    "description": "Client certificate password.",
                    "writeOnly": true
                  },
                  "serverCertificate": {
                    "type": "string",
                    "description": "Server certificate.",
                    "x-multiline": true
                  },
                  "merchantName": {
                    "type": "string",
                    "description": "Merchant name for SFTP reconciliation."
                  },
                  "sftpUsername": {
                    "type": "string",
                    "description": "SFTP reconciliation username."
                  },
                  "sftpPassword": {
                    "type": "string",
                    "format": "password",
                    "description": "SFTP reconciliation password.",
                    "writeOnly": true
                  },
                  "sftpPrivateKey": {
                    "type": "string",
                    "format": "password",
                    "description": "SFTP reconciliation private key.",
                    "x-multiline": true,
                    "writeOnly": true
                  },
                  "sftpKeyPassphrase": {
                    "type": "string",
                    "format": "password",
                    "description": "Passphrase of the SFTP private key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "storeId",
                  "userId",
                  "password",
                  "privateKey",
                  "privateKeyPassword",
                  "clientCertificate",
                  "clientCertificatePassword",
                  "serverCertificate"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "ePay": {
        "description": "ePay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "ePay credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the ePay merchant."
                  },
                  "secretKey": {
                    "type": "string",
                    "format": "password",
                    "description": "ePay secret key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "Euteller": {
        "description": "Euteller gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Euteller credentials object.",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Euteller username."
                  },
                  "password": {
                    "type": "string",
                    "format": "password",
                    "description": "Euteller password.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              }
            }
          }
        ]
      },
      "Ezeebill": {
        "description": "Ezeebill gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Ezeebill credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "Merchant ID (MID) of the Ezeebill gateway."
                  },
                  "accessId": {
                    "type": "string",
                    "description": "Access ID of the Ezeebill gateway.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "terminalId": {
                    "type": "string",
                    "description": "Terminal ID of the Ezeebill gateway."
                  },
                  "operatorId": {
                    "type": "string",
                    "description": "Operator ID of the Ezeebill gateway."
                  },
                  "password": {
                    "type": "string",
                    "description": "API access operator password of the Ezeebill gateway.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "hashKey": {
                    "type": "string",
                    "description": "Hash key of the Ezeebill gateway.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "accessId",
                  "terminalId",
                  "operatorId",
                  "password",
                  "hashKey"
                ]
              }
            }
          }
        ]
      },
      "eZeeWallet": {
        "description": "eZeeWallet gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "eZeeWallet credentials object.",
                "properties": {
                  "apiUsername": {
                    "type": "string",
                    "description": "eZeeWallet API username.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiPassword": {
                    "type": "string",
                    "description": "eZeeWallet API password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiUsername",
                  "apiPassword"
                ]
              }
            }
          }
        ]
      },
      "ezyEFT": {
        "description": "ezyEFT gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "ezyEFT credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the ezyEFT merchant."
                  },
                  "merchantToken": {
                    "type": "string",
                    "format": "password",
                    "description": "ezyEFT merchant token.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "merchantToken"
                ]
              }
            }
          }
        ]
      },
      "FinTecSystems": {
        "description": "FinTecSystems gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "FinTecSystems credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "FinTecSystems API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "FinTecSystems settings object.",
                "properties": {
                  "recipientIBAN": {
                    "type": "string",
                    "description": "IBAN of the recipient account."
                  },
                  "recipientBIC": {
                    "type": "string",
                    "description": "BIC of the recipient account."
                  },
                  "recipientCountry": {
                    "type": "string",
                    "description": "Two letter country code.",
                    "enum": [
                      "AT",
                      "CH",
                      "DE"
                    ]
                  },
                  "recipientHolder": {
                    "type": "string",
                    "description": "Account holder of the recipient account."
                  }
                },
                "required": [
                  "recipientIBAN",
                  "recipientBIC",
                  "recipientHolder",
                  "recipientCountry"
                ]
              }
            }
          }
        ]
      },
      "Finrax": {
        "description": "Finrax gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Finrax credentials object.",
                "properties": {
                  "businessId": {
                    "type": "string",
                    "description": "ID of the Finrax business."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Finrax API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiSecret": {
                    "type": "string",
                    "description": "Finrax API secret.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "publicKey": {
                    "type": "string",
                    "description": "Finrax public key.\nThis value is used to verify IPN signature.",
                    "x-multiline": true
                  }
                },
                "required": [
                  "businessId",
                  "apiKey",
                  "apiSecret"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Finrax settings object.",
                "required": [
                  "tolerancePercentage"
                ],
                "properties": {
                  "tolerancePercentage": {
                    "$ref": "#/components/schemas/AmountAdjustmentTolerance"
                  }
                }
              }
            }
          }
        ]
      },
      "Flexepin": {
        "description": "Flexepin gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Flexepin API key."
                  },
                  "apiSecret": {
                    "type": "string",
                    "description": "Flexepin API secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey",
                  "apiSecret"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Flexepin settings object.",
                "properties": {
                  "adjustAmountFromVoucher": {
                    "type": "boolean",
                    "description": "Specifies whether to adjust the amount or currency based on a Flexepin voucher.",
                    "default": false,
                    "example": false
                  }
                }
              }
            }
          }
        ]
      },
      "Forte": {
        "description": "Forte gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "accountId": {
                    "type": "string",
                    "description": "ID of the Forte account."
                  },
                  "locationId": {
                    "type": "string",
                    "description": "ID of the Forte location."
                  },
                  "apiAccessId": {
                    "type": "string",
                    "description": "ID of the Forte API access.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiSecretKey": {
                    "type": "string",
                    "description": "Forte API secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "accountId",
                  "locationId",
                  "apiAccessId",
                  "apiSecretKey"
                ]
              }
            }
          }
        ]
      },
      "FundSend": {
        "description": "FundSend gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "ID of the FundSend client."
                  },
                  "secretWord": {
                    "type": "string",
                    "description": "FundSend secret word.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "clientId",
                  "secretWord"
                ]
              }
            }
          }
        ]
      },
      "gate2way": {
        "description": "gate2way gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "gate2way credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "API key of gate2way account.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiSecret": {
                    "type": "string",
                    "description": "API secret of gate2way account.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey",
                  "apiSecret"
                ]
              }
            }
          }
        ]
      },
      "GET": {
        "description": "GET gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "accountId": {
                    "type": "string",
                    "description": "ID of the GET account."
                  }
                },
                "required": [
                  "accountId"
                ]
              }
            }
          }
        ]
      },
      "Gigadat": {
        "description": "Gigadat gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Gigadat credentials object.",
                "properties": {
                  "campaignId": {
                    "type": "string",
                    "description": "ID of the Gigadat campaign."
                  },
                  "accessToken": {
                    "type": "string",
                    "description": "Gigadat access token.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "securityToken": {
                    "type": "string",
                    "description": "Gigadat security token.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "campaignId",
                  "accessToken",
                  "securityToken"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "sandbox": {
                    "type": "boolean",
                    "description": "Specifies if the gateway account is in sandbox mode.",
                    "default": false
                  },
                  "methodType": {
                    "type": "string",
                    "description": "Specifies whether the Gigadat method type is enforced as CPI or ETI, regardless of the payment method associated with the gateway account.",
                    "enum": [
                      "CPI",
                      "ETI"
                    ]
                  },
                  "autodepositLookup": {
                    "type": "boolean",
                    "description": "Perform Autodeposit lookup before a payout.",
                    "default": false
                  },
                  "autodepositLookupInterval": {
                    "type": "integer",
                    "description": "Number of days to suppress Autodeposit lookup."
                  },
                  "bypassAutodepositLookup": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether to proceed with the payout regardless of the Autodeposit lookup result."
                  }
                },
                "required": [
                  "sandbox"
                ]
              }
            }
          }
        ]
      },
      "GlobalOne": {
        "description": "GlobalOne gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "terminalId": {
                    "type": "string",
                    "description": "ID of the GlobalOne terminal."
                  },
                  "sharedSecret": {
                    "type": "string",
                    "description": "GlobalOne shared secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "terminalId",
                  "sharedSecret"
                ]
              }
            }
          }
        ]
      },
      "GoCardless": {
        "description": "GoCardless gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "GoCardless API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "Gooney": {
        "description": "Gooney gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Gooney credentials object.",
                "properties": {
                  "apiUser": {
                    "type": "string",
                    "description": "Gooney API user."
                  },
                  "apiPassword": {
                    "type": "string",
                    "description": "Gooney API password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Gooney API key."
                  },
                  "apiSecret": {
                    "type": "string",
                    "description": "Gooney API secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiUser",
                  "apiPassword",
                  "apiKey",
                  "apiSecret"
                ]
              }
            }
          }
        ]
      },
      "Gpaysafe": {
        "description": "Gpaysafe gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Gpaysafe apiKey."
                  }
                },
                "required": [
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "Greenbox": {
        "description": "Greenbox gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Greenbox credentials object.",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "ID of the Greenbox client."
                  },
                  "locationId": {
                    "type": "string",
                    "description": "ID of the Greenbox location."
                  },
                  "clientSecret": {
                    "type": "string",
                    "description": "Greenbox client secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "clientId",
                  "clientSecret",
                  "locationId"
                ]
              }
            }
          }
        ]
      },
      "HiPay": {
        "description": "HiPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "HiPay credentials object.",
                "properties": {
                  "apiUsername": {
                    "type": "string",
                    "description": "HiPay API user name."
                  },
                  "apiPassword": {
                    "type": "string",
                    "description": "HiPay API password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiUsername",
                  "apiPassword"
                ]
              }
            }
          }
        ]
      },
      "iCashOne": {
        "description": "Configuration object for the iCashOne gateway.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Credentials object for the iCashOne gateway.",
                "properties": {
                  "apiKey": {
                    "writeOnly": true,
                    "format": "password",
                    "type": "string",
                    "description": "API key for the iCashOne API."
                  },
                  "secretKey": {
                    "writeOnly": true,
                    "format": "password",
                    "type": "string",
                    "description": "Secret key for the iCashOne API."
                  }
                },
                "required": [
                  "apiKey",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Settings object for the iCashOne gateway.",
                "properties": {
                  "merchantName": {
                    "type": "string",
                    "description": "Merchant name to be displayed on the checkout page."
                  }
                }
              }
            }
          }
        ]
      },
      "ICEPAY": {
        "description": "ICEPAY gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "ICEPAY credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the ICEPAY merchant.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "ICEPAY API secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "INOVAPAY": {
        "description": "INOVAPAY gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "INOVAPAY credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "INOVAPAY API key."
                  },
                  "apiSecret": {
                    "type": "string",
                    "description": "INOVAPAY API secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey",
                  "apiSecret"
                ]
              }
            }
          }
        ]
      },
      "Ilixium": {
        "description": "Ilixium gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Ilixium credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Ilixium merchant."
                  },
                  "accountId": {
                    "type": "string",
                    "description": "ID of the Ilixium account."
                  },
                  "digestPassword": {
                    "type": "string",
                    "description": "Ilixium digest password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "sftpUsername": {
                    "type": "string",
                    "description": "SFTP username."
                  },
                  "sftpPrivateKey": {
                    "type": "string",
                    "description": "SFTP private key.",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  },
                  "sftpKeyPassphrase": {
                    "type": "string",
                    "format": "password",
                    "description": "Passphrase of the SFTP private key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "accountId",
                  "digestPassword"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Ilixium settings object.",
                "properties": {
                  "useIpFrame": {
                    "type": "boolean",
                    "description": "Specifies whether to force Ilixium to process using Ip Frame."
                  },
                  "useCreditEndpoint": {
                    "type": "boolean",
                    "description": "Specifies whether to use a previous approval credit endpoint for payouts."
                  },
                  "useStandaloneCreditEndpoint": {
                    "type": "boolean",
                    "description": "Specifies whether to use a standalone (token) credit endpoint for payouts."
                  },
                  "platform": {
                    "type": "string",
                    "description": "Direct API platform.",
                    "default": "itix",
                    "enum": [
                      "itix",
                      "tpg"
                    ]
                  },
                  "usePaceCreditEndpoint": {
                    "type": "boolean",
                    "description": "Specifies whether to use PACE API endpoint for payouts."
                  }
                }
              },
              "threeDSecureServer": {
                "type": "object",
                "description": "Ilixium 3DS server.",
                "properties": {
                  "name": {
                    "description": "Name of the merchant plug-in.",
                    "type": "string",
                    "enum": [
                      "Ilixium3dsServer"
                    ]
                  }
                }
              }
            }
          }
        ]
      },
      "IMerchant": {
        "description": "IMerchant gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Credentials of the IMerchant gateway.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "IMerchant API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Ingenico": {
        "description": "Ingenico gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Ingenico merchant."
                  },
                  "apiKeyId": {
                    "type": "string",
                    "description": "ID of the Ingenico API key."
                  },
                  "apiSecretKey": {
                    "type": "string",
                    "description": "Ingenico API secret key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "skipFraudService": {
                    "type": "boolean",
                    "description": "Ingenico skip fraud service."
                  }
                },
                "required": [
                  "merchantId",
                  "apiKeyId",
                  "apiSecretKey"
                ]
              }
            }
          }
        ]
      },
      "Inovio": {
        "description": "Inovio gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Inovio credentials object.",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Inovio username."
                  },
                  "password": {
                    "type": "string",
                    "description": "Inovio password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Inovio settings object.",
                "properties": {
                  "websiteId": {
                    "type": "string",
                    "description": "ID of the Inovio website.",
                    "maxLength": 50,
                    "example": "web_0YV7DE4Z26DQSA1AC92FBJ7SEG"
                  },
                  "merchantAccountId": {
                    "type": "string",
                    "description": "ID of the Inovio merchant account."
                  },
                  "productId": {
                    "type": "string",
                    "description": "ID of the Inovio product.",
                    "maxLength": 50,
                    "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
                  }
                },
                "required": [
                  "websiteId",
                  "merchantAccountId",
                  "productId"
                ]
              }
            }
          }
        ]
      },
      "InstaDebit": {
        "description": "InstaDebit gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "InstaDebit credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "InstaDebit merchant account number."
                  },
                  "password": {
                    "type": "string",
                    "description": "InstaDebit merchant account password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "password"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "merchantSubId": {
                    "type": "integer",
                    "description": "Sub ID of the merchant or organization."
                  }
                }
              }
            }
          }
        ]
      },
      "Intuit": {
        "description": "Intuit gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "Intuit client_id key."
                  },
                  "clientSecret": {
                    "type": "string",
                    "description": "Intuit client_secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "clientId",
                  "clientSecret"
                ]
              }
            }
          }
        ]
      },
      "IpayOptions": {
        "description": "Ipay Options gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Ipay Options credentials object.",
                "properties": {
                  "sid": {
                    "type": "string",
                    "description": "ID of the Ipay Options website."
                  },
                  "rcode": {
                    "type": "string",
                    "description": "Ipay Options rcode.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "sid",
                  "rcode"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Ipay Options settings object.",
                "properties": {
                  "extraStep": {
                    "type": "boolean",
                    "description": "Specifies whether to display an extra step where the user must enter their email and DNI number."
                  },
                  "subdomain": {
                    "type": "string",
                    "description": "Subdomain to use when sending request to IpayOptions.",
                    "enum": [
                      "miglite",
                      "w88asiapay"
                    ]
                  },
                  "platform": {
                    "type": "string",
                    "description": "Platform which IpayOptions processes.",
                    "enum": [
                      "SOAP",
                      "TxHandler",
                      "SecureHosted"
                    ]
                  },
                  "cardType": {
                    "type": "string",
                    "description": "Manually set the card_type for iDEAL.",
                    "enum": [
                      "ideal",
                      "idealqr",
                      "sofort"
                    ]
                  }
                }
              }
            }
          }
        ]
      },
      "Isx": {
        "description": "Isx gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Isx credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Isx API merchant."
                  },
                  "workflow": {
                    "type": "string",
                    "description": "Isx workflow."
                  },
                  "apiClient": {
                    "type": "string",
                    "description": "Isx API client."
                  },
                  "apiToken": {
                    "type": "string",
                    "description": "Isx API token.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "workflow",
                  "apiClient",
                  "apiToken"
                ]
              }
            }
          }
        ]
      },
      "JetPay": {
        "description": "JetPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "TerminalID": {
                    "type": "string",
                    "description": "ID of the JetPay terminal."
                  }
                },
                "required": [
                  "TerminalID"
                ]
              }
            }
          }
        ]
      },
      "Jeton": {
        "description": "Jeton gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Jeton API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secret": {
                    "type": "string",
                    "description": "Jeton secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "method": {
                    "type": "string",
                    "description": "Jeton method.",
                    "enum": [
                      "CHECKOUT",
                      "DIRECT",
                      "QR",
                      "JETGO"
                    ]
                  }
                },
                "required": [
                  "method"
                ]
              }
            }
          }
        ]
      },
      "JPMOrbital": {
        "description": "JPMOrbital gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the JPMOrbital merchant."
                  },
                  "username": {
                    "type": "string",
                    "description": "Username of the JPMOrbital merchant."
                  },
                  "password": {
                    "type": "string",
                    "description": "Password of the JPMOrbital merchant.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "username",
                  "password"
                ]
              }
            }
          }
        ]
      },
      "Khelocard": {
        "description": "Khelocard gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Credentials object.",
                "required": [
                  "merchantId",
                  "referrer",
                  "apiKey",
                  "apiSecret"
                ],
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Khelocard merchant."
                  },
                  "referrer": {
                    "type": "string",
                    "description": "Referrer URL registered at Khelocard.",
                    "format": "uri"
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Khelocard API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiSecret": {
                    "type": "string",
                    "description": "Khelocard API secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                }
              }
            }
          }
        ]
      },
      "Klarna": {
        "description": "Klarna gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Credentials object.",
                "required": [
                  "username",
                  "password"
                ],
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Klarna API username."
                  },
                  "password": {
                    "type": "string",
                    "description": "Klarna API password.",
                    "format": "password",
                    "writeOnly": true
                  }
                }
              },
              "settings": {
                "type": "object",
                "description": "Settings object.",
                "required": [
                  "region"
                ],
                "properties": {
                  "region": {
                    "type": "string",
                    "description": "Klarna API region.",
                    "enum": [
                      "EU",
                      "NA",
                      "OC"
                    ]
                  },
                  "usePayNowStandalone": {
                    "type": "boolean",
                    "description": "Specifies whether to use the Klarna Pay Now Standalone method.",
                    "default": false,
                    "example": false
                  }
                }
              }
            }
          }
        ]
      },
      "Konnektive": {
        "description": "Konnektive gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Credentials object.",
                "required": [
                  "loginId",
                  "password"
                ],
                "properties": {
                  "loginId": {
                    "type": "string",
                    "description": "ID of the Konnektive API login."
                  },
                  "password": {
                    "type": "string",
                    "description": "Konnektive API password.",
                    "format": "password",
                    "writeOnly": true
                  }
                }
              },
              "settings": {
                "type": "object",
                "description": "Settings object.",
                "required": [
                  "campaignId",
                  "productId"
                ],
                "properties": {
                  "campaignId": {
                    "type": "string",
                    "description": "Konnektive campaign ID for which the order is being placed."
                  },
                  "productId": {
                    "type": "string",
                    "description": "Konnektive campaign product ID for which the order is being placed.",
                    "maxLength": 50,
                    "example": "prod_0YV7DES3WPC5J8JD8QTVNZBZNZ"
                  }
                }
              }
            }
          }
        ]
      },
      "Kushki": {
        "description": "Kushki gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Kushki credentials object.",
                "properties": {
                  "privateKey": {
                    "writeOnly": true,
                    "format": "password",
                    "type": "string",
                    "description": "Kushki private API key."
                  }
                },
                "required": [
                  "privateKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Kushki settings object.",
                "properties": {
                  "sandbox": {
                    "type": "boolean",
                    "description": "Specifies if the gateway account is in sandbox mode.",
                    "default": false
                  }
                }
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "LaCore": {
        "description": "LaCore gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "LaCore credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the LaCore merchant."
                  },
                  "username": {
                    "type": "string",
                    "description": "Username of the LaCore merchant."
                  },
                  "password": {
                    "type": "string",
                    "description": "Password of the LaCore merchant.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "username",
                  "password"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Limepay": {
        "description": "Limepay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "xLogin": {
                    "type": "string",
                    "description": "Limepay login."
                  },
                  "xTransKey": {
                    "type": "string",
                    "description": "Limepay transKey."
                  },
                  "secretKey": {
                    "type": "string",
                    "format": "password",
                    "description": "Limepay secret key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "xLogin",
                  "xTransKey",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Limepay settings object.",
                "properties": {
                  "storeDocumentId": {
                    "type": "boolean",
                    "description": "Specifies whether to store the document ID."
                  }
                }
              }
            }
          }
        ]
      },
      "Loonio": {
        "description": "Loonio gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Loonio credentials object.",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Username of the merchant."
                  },
                  "password": {
                    "type": "string",
                    "description": "Password of the merchant.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "accountId": {
                    "type": "string",
                    "description": "Account ID of the merchant."
                  }
                },
                "required": [
                  "username",
                  "password",
                  "accountId"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "loonie": {
        "description": "loonie gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "loonie credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the loonie merchant."
                  },
                  "merchantToken": {
                    "type": "string",
                    "format": "password",
                    "description": "loonie merchant token.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "merchantToken"
                ]
              }
            }
          }
        ]
      },
      "LPG": {
        "description": "LPG gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "LPG credentials object.",
                "properties": {
                  "publicKey": {
                    "type": "string",
                    "description": "LPG public API key."
                  },
                  "secureKey": {
                    "type": "string",
                    "description": "LPG secure API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "payoutUsername": {
                    "type": "string",
                    "description": "LPG payout account username.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "payoutPassword": {
                    "type": "string",
                    "description": "LPG payout account password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "publicKey",
                  "secureKey"
                ]
              }
            }
          }
        ]
      },
      "MaxiCash": {
        "description": "MaxiCash gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "MaxiCash credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the MaxiCash API merchant."
                  },
                  "password": {
                    "type": "string",
                    "description": "MaxiCash API password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "password"
                ]
              }
            }
          }
        ]
      },
      "MercadoPago": {
        "description": "MercadoPago gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "MercadoPago credentials object.",
                "properties": {
                  "publicKey": {
                    "type": "string",
                    "description": "MercadoPago public key."
                  },
                  "accessToken": {
                    "type": "string",
                    "description": "MercadoPago access token.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "publicKey",
                  "accessToken"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Settings object.",
                "properties": {
                  "collectDeviceId": {
                    "type": "boolean",
                    "description": "Specifies collect and send device ID to MercadoPago.",
                    "default": false,
                    "example": false
                  }
                }
              }
            }
          }
        ]
      },
      "MiFinity": {
        "description": "MiFinity gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "MiFinity credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "format": "password",
                    "description": "MiFinity API key.",
                    "writeOnly": true
                  },
                  "mifinityAccountNumber": {
                    "type": "string",
                    "format": "password",
                    "description": "MiFinity account number.",
                    "writeOnly": true
                  },
                  "accountHolderId": {
                    "type": "string",
                    "description": "ID of the MiFinity account holder."
                  },
                  "brandId": {
                    "type": "string",
                    "description": "Three-digit ID provided by MiFinity which indicates through which brand the call made."
                  }
                },
                "required": [
                  "apiKey",
                  "mifinityAccountNumber",
                  "accountHolderId"
                ]
              }
            }
          }
        ]
      },
      "MobilePay": {
        "description": "MobilePay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantSerialNumber": {
                    "type": "string",
                    "description": "Serial number of the MobilePay merchant."
                  },
                  "subscriptionKey": {
                    "type": "string",
                    "description": "Subscription key of the MobilePay merchant."
                  },
                  "clientId": {
                    "type": "string",
                    "description": "ID of the MobilePay client."
                  },
                  "clientSecret": {
                    "type": "string",
                    "description": "MobilePay client secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantSerialNumber",
                  "subscriptionKey",
                  "clientId",
                  "clientSecret"
                ]
              }
            }
          }
        ]
      },
      "Mollie": {
        "description": "Mollie gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Mollie credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Mollie API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "Moneris": {
        "description": "Moneris gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "apiToken": {
                    "type": "string",
                    "description": "Moneris API token.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "storeId": {
                    "type": "string",
                    "description": "ID of the Moneris store."
                  }
                },
                "required": [
                  "storeId",
                  "apiToken"
                ]
              }
            }
          }
        ]
      },
      "Monolo": {
        "description": "Monolo gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Monolo credentials object.",
                "properties": {
                  "businessId": {
                    "type": "string",
                    "description": "ID of the Monolo merchant account."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Monolo API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secret": {
                    "type": "string",
                    "description": "Monolo secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "businessId",
                  "apiKey",
                  "secret"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Monolo settings object.",
                "properties": {
                  "payoutCurrency": {
                    "type": "string",
                    "description": "Cryptocurrency of the payout."
                  },
                  "payoutNetwork": {
                    "type": "string",
                    "description": "Blockchain network to use for the payout."
                  },
                  "destinationTagCustomField": {
                    "type": "string",
                    "description": "Name of the customer custom field that holds payout destination tag for XRP."
                  }
                }
              }
            }
          }
        ]
      },
      "MonRem": {
        "description": "MonRem gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "MonRem credentials object.",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "Client ID of the MonRem."
                  },
                  "username": {
                    "type": "string",
                    "description": "Username of the MonRem."
                  },
                  "password": {
                    "type": "string",
                    "description": "Password of the MonRem.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "clientSecret": {
                    "type": "string",
                    "description": "Client secret of the MonRem.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "clientId",
                  "username",
                  "password",
                  "clientSecret"
                ]
              }
            }
          }
        ]
      },
      "MtaPay": {
        "description": "MTA Pay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "accountId": {
                    "type": "string",
                    "description": "ID of the MTA Pay account."
                  },
                  "partyId": {
                    "type": "string",
                    "description": "ID of the MTA Pay party."
                  },
                  "md5key": {
                    "type": "string",
                    "description": "MTA Pay MD5 key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "accountId",
                  "partyId",
                  "md5key"
                ]
              },
              "settings": {
                "type": "object",
                "description": "MTA Pay settings object.",
                "properties": {
                  "goods": {
                    "type": "string",
                    "description": "MTA Pay goods."
                  },
                  "mobilePay": {
                    "type": "string",
                    "description": "MTA Pay mobile pay parameter."
                  }
                },
                "required": [
                  "mobilePay",
                  "goods"
                ]
              }
            }
          }
        ]
      },
      "MuchBetter": {
        "description": "MuchBetter gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "MuchBetter credentials object.",
                "properties": {
                  "merchantAccountId": {
                    "type": "string",
                    "description": "ID of the MuchBetter merchant account."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "MuchBetter API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantAccountId",
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "MuchBetter settings object.",
                "properties": {
                  "brandName": {
                    "type": "string",
                    "description": "MuchBetter brand name used for reporting and logo."
                  },
                  "hasPhoneNumberRequest": {
                    "type": "boolean",
                    "description": "Specifies whether to request phone a number before submitting the request to MuchBetter.",
                    "default": false
                  }
                }
              }
            }
          }
        ]
      },
      "MuchBetterGateway": {
        "description": "MuchBetterGateway gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "MuchBetterGateway credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "MuchBetterGateway API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "MuchBetterGateway secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "MuchBetter settings object.",
                "properties": {
                  "hasPhoneNumberRequest": {
                    "type": "boolean",
                    "description": "Specifies whether to request phone a number before submitting the request to MuchBetterGateway.",
                    "default": false
                  }
                }
              }
            }
          }
        ]
      },
      "MyFatoorah": {
        "description": "MyFatoorah gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "MyFatoorah credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "MyFatoorah API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "Naewe": {
        "description": "Naewe gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Naewe credentials object.",
                "properties": {
                  "businessId": {
                    "type": "string",
                    "description": "ID of the Naewe merchant account."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Naewe API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secret": {
                    "type": "string",
                    "description": "Naewe secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "businessId",
                  "apiKey",
                  "secret"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Naewe settings object.",
                "properties": {
                  "payoutCurrency": {
                    "type": "string",
                    "description": "Cryptocurrency of the payout."
                  },
                  "payoutNetwork": {
                    "type": "string",
                    "description": "Blockchain network to use for the payout."
                  },
                  "destinationTagCustomField": {
                    "type": "string",
                    "description": "Name of the customer custom field that holds payout destination tag for XRP."
                  }
                }
              }
            }
          }
        ]
      },
      "Neosurf": {
        "description": "Neosurf gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Neosurf credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Neosurf merchant."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "Neosurf API secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "NMI": {
        "description": "NMI gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Username of the NMI merchant."
                  },
                  "password": {
                    "type": "string",
                    "description": "Password of the NMI merchant.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "NMI API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "disableStoredCredentials": {
                    "description": "Specifies whether to disable NMI stored credentials for Customer Initiated Transactions (CIT) and Merchant Initiated Transactions (MIT).",
                    "type": "boolean",
                    "default": false
                  }
                }
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Netbanking": {
        "description": "Netbanking gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Netbanking credentials object.",
                "properties": {
                  "midcode": {
                    "type": "string",
                    "description": "Netbanking Merchant Identification (MID) code."
                  },
                  "midsecret": {
                    "type": "string",
                    "description": "Netbanking Merchant Identification (MID) secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "midcode",
                  "midsecret"
                ]
              }
            }
          }
        ]
      },
      "Neteller": {
        "description": "Neteller gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Neteller credentials object.",
                "properties": {
                  "paysafePaymentsApiUsername": {
                    "type": "string",
                    "description": "Neteller Paysafe Payments API username for a private key."
                  },
                  "paysafePaymentsApiPassword": {
                    "type": "string",
                    "description": "Neteller Paysafe Payments API password for a private key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "paysafePaymentsApiUsername",
                  "paysafePaymentsApiPassword"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "populateCustomerEmail": {
                    "type": "boolean",
                    "description": "Specifies whether to the populate customer email at payment."
                  }
                }
              }
            }
          }
        ]
      },
      "NGenius": {
        "description": "NGenius gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "NGenius credentials object.",
                "properties": {
                  "outletId": {
                    "type": "string",
                    "description": "ID of the NGenius outlet."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "NGenius API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "outletId",
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "NinjaWallet": {
        "description": "NinjaWallet gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "NinjaWallet credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "NinjaWallet API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secret": {
                    "type": "string",
                    "description": "NinjaWallet secret.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "passphrase": {
                    "type": "string",
                    "description": "NinjaWallet passphrase.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey",
                  "secret",
                  "passphrase"
                ]
              }
            }
          }
        ]
      },
      "NordikCoin": {
        "description": "NordikCoin gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "NordikCoin credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the NordikCoin merchant."
                  },
                  "secret": {
                    "type": "string",
                    "description": "NordikCoin secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "secret"
                ]
              }
            }
          }
        ]
      },
      "NOWPayments": {
        "description": "NOWPayments gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "NOWPayments credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "format": "password",
                    "writeOnly": true
                  },
                  "ipnSecret": {
                    "type": "string",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey",
                  "ipnSecret"
                ]
              },
              "settings": {
                "type": "object",
                "description": "NOWPayments settings object.",
                "required": [
                  "tolerancePercentage"
                ],
                "properties": {
                  "tolerancePercentage": {
                    "$ref": "#/components/schemas/AmountAdjustmentTolerance"
                  }
                }
              }
            }
          }
        ]
      },
      "NuaPay": {
        "description": "NuaPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "NuaPay credentials object.",
                "properties": {
                  "nuaPayCommonName": {
                    "type": "string",
                    "description": "NuaPay common name."
                  },
                  "nuaPaySerialNumber": {
                    "type": "string",
                    "description": "NuaPay serial number."
                  },
                  "nuaPayAccountId": {
                    "type": "string",
                    "description": "ID of the NuaPay account."
                  },
                  "nuaPayOriginatorIban": {
                    "type": "string",
                    "description": "NuaPay origiantor IBAN.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "nuaPayApiKey": {
                    "type": "string",
                    "description": "NuaPay API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "nuaPayPrivateKey": {
                    "type": "string",
                    "description": "NuaPay private key.",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  }
                },
                "required": [
                  "nuaPayCommonName",
                  "nuaPaySerialNumber",
                  "nuaPayAccountId",
                  "nuaPayOriginatorIban",
                  "nuaPayApiKey",
                  "nuaPayPrivateKey"
                ]
              }
            }
          }
        ]
      },
      "OchaPay": {
        "description": "OchaPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "apiUsername": {
                    "type": "string",
                    "description": "OchaPay username."
                  },
                  "apiPassword": {
                    "type": "string",
                    "description": "OchaPay API password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secretWord": {
                    "type": "string",
                    "description": "OchaPay secret word.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiUsername",
                  "apiPassword",
                  "secretWord"
                ]
              }
            }
          }
        ]
      },
      "OmniMatrix": {
        "description": "OmniMatrix gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "OmniMatrix credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the OmniMatrix merchant."
                  },
                  "secret": {
                    "type": "string",
                    "description": "OmniMatrix secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "secret"
                ]
              },
              "settings": {
                "type": "object",
                "description": "OmniMatrix settings object.",
                "properties": {
                  "usePreconfiguredAmounts": {
                    "type": "boolean",
                    "description": "Specifies if the user must be redirected to a hosted page to select the closest amount when it is not in the list of preconfigured amounts.",
                    "default": false,
                    "example": false
                  }
                }
              }
            }
          }
        ]
      },
      "Onlineueberweisen": {
        "description": "Onlineueberweisen gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Onlineueberweisen credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Onlineueberweisen API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "nuaPayApiKey": {
                    "type": "string",
                    "description": "NuaPay API key for reconciliation.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "isxSiinSecret": {
                    "type": "string",
                    "description": "Secret for checksum verification for SEPA Instant Instant Notification (SIIN).",
                    "format": "password",
                    "writeOnly": true
                  },
                  "nuaPayAccountId": {
                    "type": "string",
                    "description": "NuaPay account ID for reconciliation."
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Onlineueberweisen settings object.",
                "properties": {
                  "payformCode": {
                    "type": "string",
                    "description": "Onlineueberweisen code to use a customized PayForm template.",
                    "default": "default"
                  },
                  "extraStep": {
                    "type": "boolean",
                    "description": "Specifies whether to display a page where the user must enter their bank country and account holder name.",
                    "default": false
                  }
                }
              }
            }
          }
        ]
      },
      "OnRamp": {
        "description": "OnRamp gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "OnRamp credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "OnRamp settings object.",
                "properties": {
                  "useServerToServerApi": {
                    "type": "boolean",
                    "description": "Specifies whether to use OnRamp server to server API.",
                    "default": false
                  },
                  "logoUrl": {
                    "type": "string",
                    "description": "Set this value to use a custom logo.",
                    "format": "uri"
                  }
                }
              }
            }
          }
        ]
      },
      "Orbital": {
        "description": "Orbital gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Orbital credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Orbital API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Orbital settings object.",
                "properties": {
                  "targetCurrency": {
                    "description": "Currency to which the received cryptocurrency is converted.",
                    "type": "string",
                    "enum": [
                      "USD",
                      "EUR",
                      "GBP"
                    ]
                  },
                  "mainCryptoCurrency": {
                    "description": "Blockchain network to be used.",
                    "type": "string",
                    "enum": [
                      "ETH",
                      "SOL",
                      "TRX"
                    ]
                  },
                  "logoImageUrl": {
                    "description": "Logo image in PNG or SVG format to be displayed on the deposit screen.",
                    "type": "string"
                  },
                  "productImageUrl": {
                    "description": "Product image in JPEG format to be displayed on the deposit screen.",
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "Pagadito": {
        "description": "Pagadito gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Pagadito credentials object.",
                "properties": {
                  "uid": {
                    "type": "string",
                    "format": "password",
                    "description": "Pagadito UID.",
                    "writeOnly": true
                  },
                  "wsk": {
                    "type": "string",
                    "format": "password",
                    "description": "Pagadito WSK.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "uid",
                  "wsk"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "useRecurringApi": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether to use the Pagadito API for reoccurring payments."
                  }
                }
              }
            }
          }
        ]
      },
      "Pagsmile": {
        "description": "Pagsmile gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Pagsmile merchant."
                  },
                  "appId": {
                    "type": "string",
                    "description": "ID of the Pagsmile application."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "Pagsmile MD5 key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiSecretKey": {
                    "type": "string",
                    "description": "Pagsmile secret key for the Trade Pay API.\nThe key starts with `Pagsmile_sk`.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "appId",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Pagsmile settings object.",
                "properties": {
                  "useTradePay": {
                    "type": "boolean",
                    "description": "Specifies whether to use the Trade Pay API.",
                    "default": false,
                    "example": false
                  }
                }
              }
            }
          }
        ]
      },
      "Panamerican": {
        "description": "Panamerican gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Panamerican credentials object.",
                "properties": {
                  "key": {
                    "type": "string",
                    "description": "Panamerican key."
                  },
                  "password": {
                    "type": "string",
                    "description": "Panamerican password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "key",
                  "password"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Panamerican settings object.",
                "properties": {
                  "extraStep": {
                    "type": "boolean",
                    "description": "Specifies whether to display a step where the user must enter their ID number."
                  },
                  "convertToAscii": {
                    "type": "boolean",
                    "description": "Specifies whether to convert all chars to ascii."
                  }
                },
                "required": [
                  "extraStep"
                ]
              }
            }
          }
        ]
      },
      "PandaGateway": {
        "description": "Panda gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantCode": {
                    "type": "string",
                    "description": "Panda merchant code."
                  },
                  "apiCode": {
                    "type": "string",
                    "description": "Panda API code."
                  },
                  "signKey": {
                    "type": "string",
                    "description": "Panda sign key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantCode",
                  "apiCode",
                  "signKey"
                ]
              }
            }
          }
        ]
      },
      "ParamountCommerce": {
        "description": "ParamountCommerce gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "ParamountCommerce credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ParamountCommerce merchant ID."
                  },
                  "appId": {
                    "type": "string",
                    "description": "ParamountCommerce application ID."
                  },
                  "clientId": {
                    "type": "string",
                    "description": "ParamountCommerce client ID."
                  },
                  "clientSecret": {
                    "type": "string",
                    "description": "ParamountCommerce client secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "appId",
                  "clientId",
                  "clientSecret"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "merchantSubId": {
                    "type": "string",
                    "description": "ParamountCommerce merchant sub ID."
                  },
                  "merchantTransactionType": {
                    "type": "string",
                    "description": "ParamountCommerce merchant transaction type.",
                    "enum": [
                      "POKER",
                      "CASINO",
                      "BINGO",
                      "SPORTS_BETTING",
                      "DIGITAL_REMITTANCE",
                      "E_SPORTS"
                    ]
                  },
                  "useDirectDeposit": {
                    "type": "boolean",
                    "description": "Specifies whether to use One-Click Payments.",
                    "default": false,
                    "example": false
                  }
                },
                "required": [
                  "merchantSubId",
                  "merchantTransactionType"
                ]
              }
            }
          }
        ]
      },
      "ParamountEft": {
        "description": "Paramount gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Paramount credentials object.",
                "properties": {
                  "merchant_id": {
                    "type": "string",
                    "description": "ID of the merchant account."
                  },
                  "merchant_pass": {
                    "type": "string",
                    "description": "Merchant account password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "payee": {
                    "type": "string",
                    "description": "Merchant name or descriptor."
                  }
                },
                "required": [
                  "merchant_id",
                  "merchant_pass",
                  "payee"
                ]
              }
            }
          }
        ]
      },
      "ParamountInterac": {
        "description": "ParamountInterac gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "ParamountInterac credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the ParamountInterac merchant."
                  },
                  "encryptionKey": {
                    "type": "string",
                    "description": "ParamountInterac encryption key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "password": {
                    "type": "string",
                    "description": "ParamountInterac password for query.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "encryptionKey",
                  "password"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "sandbox": {
                    "type": "boolean",
                    "description": "Specifies if the gateway account is in sandbox mode.",
                    "default": false
                  },
                  "merchantSubId": {
                    "type": "integer",
                    "description": "Sub ID of the merchant or organization."
                  },
                  "autodepositLookup": {
                    "type": "boolean",
                    "description": "Perform Interac e-Transfer Autodeposit lookup before a payout.",
                    "default": false
                  },
                  "autodepositLookupInterval": {
                    "type": "integer",
                    "description": "Number of days to suppress Interac e-Transfer Autodeposit lookup."
                  },
                  "bypassAutodepositLookup": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether to proceed with the payout regardless of the Interac e-Transfer Autodeposit lookup result."
                  },
                  "paymentFlow": {
                    "type": "string",
                    "description": "Specifies whether to create an Interac payment request loaded directly on a specific preselected payment flow, and skip the flow selection page.",
                    "enum": [
                      "request_money",
                      "manual"
                    ]
                  }
                }
              }
            }
          }
        ]
      },
      "Pay4Fun": {
        "description": "Pay4Fun gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Pay4Fun credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Pay4Fun merchant."
                  },
                  "merchantSecret": {
                    "type": "string",
                    "description": "Pay4Fun merchant secret.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantKey": {
                    "type": "string",
                    "description": "Pay4Fun merchant key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "merchantSecret",
                  "merchantKey"
                ]
              }
            }
          }
        ]
      },
      "Paybilt": {
        "description": "Paybilt gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Paybilt credentials object.",
                "properties": {
                  "tokenId": {
                    "type": "string",
                    "description": "ID of the Paybilt token API."
                  },
                  "tokenApiKey": {
                    "type": "string",
                    "description": "Paybilt token API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Paybilt API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "hmacKey": {
                    "type": "string",
                    "description": "Paybilt HMAC key used to verify webhook signatures.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "tokenId",
                  "tokenApiKey",
                  "apiKey"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              },
              "settings": {
                "type": "object",
                "properties": {
                  "delay": {
                    "type": "integer",
                    "description": "Automatic capture delay in hours.",
                    "minimum": 0,
                    "default": 0
                  }
                }
              }
            }
          }
        ]
      },
      "PayCash": {
        "description": "PayCash gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PayCash credentials object.",
                "properties": {
                  "emisor": {
                    "type": "string",
                    "description": "PayCash merchant identifier."
                  },
                  "token": {
                    "type": "string",
                    "description": "PayCash token.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "emisor",
                  "token"
                ]
              }
            }
          }
        ]
      },
      "PayClub": {
        "description": "PayClub gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PayClub credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the PayClub merchant."
                  },
                  "accountNumber": {
                    "type": "string",
                    "description": "PayClub account number."
                  },
                  "signKey": {
                    "type": "string",
                    "format": "password",
                    "description": "PayClub sign key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "accountNumber",
                  "signKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "use3DSChannel": {
                    "type": "boolean",
                    "description": "Specifies whether to use a 3DS channel."
                  }
                }
              }
            }
          }
        ]
      },
      "Paycly": {
        "description": "Paycly gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Paycly credentials object.",
                "properties": {
                  "apiToken": {
                    "writeOnly": true,
                    "format": "password",
                    "type": "string",
                    "description": "Paycly API token."
                  },
                  "websiteId": {
                    "writeOnly": true,
                    "type": "string",
                    "description": "Paycly Website ID."
                  }
                },
                "required": [
                  "apiToken",
                  "websiteId"
                ]
              }
            }
          }
        ]
      },
      "PayCom": {
        "description": "PayCom gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PayCom credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "PayCom API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "PayEcards": {
        "description": "PayEcards gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PayEcards credentials object.",
                "properties": {
                  "clientKey": {
                    "type": "string",
                    "description": "Client key of the PayEcards gateway."
                  },
                  "password": {
                    "type": "string",
                    "description": "Password of the PayEcards gateway.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "paymentUrl": {
                    "type": "string",
                    "description": "Payment URL of the PayEcards gateway for S2S integration."
                  }
                },
                "required": [
                  "clientKey",
                  "password",
                  "paymentUrl"
                ]
              }
            }
          }
        ]
      },
      "Paynote": {
        "description": "Paynote gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "publicKey": {
                    "type": "string",
                    "description": "Paynote public key."
                  },
                  "secretKey": {
                    "type": "string",
                    "format": "password",
                    "description": "Paynote secret key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "publicKey",
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "PayPal": {
        "description": "PayPal gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PayPal credentials object.\nThis object specifies the PayPal Partner account from which a gateway account is registered.",
                "properties": {
                  "partnerId": {
                    "type": "string",
                    "description": "ID of the PayPal Partner account."
                  },
                  "partnerClientId": {
                    "type": "string",
                    "description": "ID of the PayPal Partner account API client."
                  },
                  "partnerSecret": {
                    "type": "string",
                    "description": "Secret key for the PayPal Partner account API client.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "partnerBnCode": {
                    "type": "string",
                    "description": "BN Code for the PayPal Partner account.\nThis unique code tracks the source of API requests."
                  }
                }
              },
              "settings": {
                "type": "object",
                "description": "PayPal settings object.",
                "required": [
                  "redirectUrl"
                ],
                "properties": {
                  "redirectUrl": {
                    "type": "string",
                    "description": "URL where the user is redirected after authorizing the account on PayPal.",
                    "format": "uri"
                  },
                  "enableGuestCheckout": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether to allow users without PayPal accounts to pay using credit or debit cards."
                  },
                  "useHostedCheckoutForm": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether to use a Rebilly hosted PayPal form instead of redirecting customers to PayPal.\nFor more information, see [Create a payment form using the Rebilly API](https://www.rebilly.com/docs/dev-docs/create-a-hosted-payment-form/)."
                  },
                  "forceGuestCheckout": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether to suppress the PayPal payment method when a guest checkout is available.\nThis option is only applicable when `useHostedCheckoutForm` is enabled."
                  },
                  "enableAlternativePaymentMethods": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether to allow customers to pay using the alternative payment options supported by PayPal.\nWhen enabled, customers must manually approve all payments."
                  }
                }
              }
            }
          }
        ]
      },
      "Payeezy": {
        "description": "Payeezy gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Payeezy merchant."
                  },
                  "merchantToken": {
                    "type": "string",
                    "description": "Merchant token.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "API key."
                  },
                  "apiSecret": {
                    "type": "string",
                    "description": "API secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "merchantToken",
                  "apiKey",
                  "apiSecret"
                ]
              }
            }
          }
        ]
      },
      "Payflow": {
        "description": "Payflow gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Payflow credentials object.",
                "properties": {
                  "user": {
                    "type": "string",
                    "description": "Payflow user.\nIf you set up one or more additional users on the account,\nthis value is the ID of the user that is authorized to process transactions.\nIf do not set up additional users on the account,\n`user` has the same value as `vendor`."
                  },
                  "vendor": {
                    "type": "string",
                    "description": "ID of the Payflow merchant login."
                  },
                  "password": {
                    "type": "string",
                    "description": "Payflow merchant password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "user",
                  "vendor",
                  "password"
                ]
              }
            }
          }
        ]
      },
      "PayGlocal": {
        "description": "PayGlocal gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PayGlocal credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the PayGlocal merchant (MID)."
                  },
                  "privateKeyId": {
                    "type": "string",
                    "description": "Key ID of the merchant RSA private key used to sign payment API requests."
                  },
                  "publicKeyId": {
                    "type": "string",
                    "description": "Key ID of the PayGlocal RSA public key used to encrypt payment API request payloads."
                  },
                  "publicKey": {
                    "type": "string",
                    "description": "PayGlocal RSA public key used to encrypt payment API request payloads and verify merchant callback token signatures.",
                    "x-multiline": true
                  },
                  "privateKey": {
                    "type": "string",
                    "description": "Merchant RSA private key used to sign payment API requests.",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "privateKeyId",
                  "publicKeyId",
                  "publicKey",
                  "privateKey"
                ]
              }
            }
          }
        ]
      },
      "PaymentAsia": {
        "description": "PaymentAsia gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PaymentAsia credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "format": "password",
                    "description": "PaymentAsia API key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "PaymenTechnologies": {
        "description": "PaymenTechnologies gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "authenticateId": {
                    "type": "string",
                    "description": "ID of the PaymenTechnologies authenticate."
                  },
                  "authenticatePw": {
                    "type": "string",
                    "description": "PaymenTechnologies authenticate password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "publicKey": {
                    "type": "string",
                    "description": "PaymenTechnologies API public key."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "PaymenTechnologies API secret key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "PaymenTechnologies API key required for query operations.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "authenticateId",
                  "authenticatePw",
                  "publicKey",
                  "secretKey",
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "use3DSEndpoint": {
                    "type": "boolean",
                    "description": "Specifies whether to use a 3DS endpoint."
                  }
                }
              }
            }
          }
        ]
      },
      "PaymentsOS": {
        "description": "PaymentsOS gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "appId": {
                    "type": "string",
                    "description": "ID of the PaymentsOS application."
                  },
                  "publicKey": {
                    "type": "string",
                    "description": "PaymentsOS public key."
                  },
                  "privateKey": {
                    "type": "string",
                    "format": "password",
                    "description": "PaymentsOS private key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "appId",
                  "privateKey",
                  "publicKey"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Paymero": {
        "description": "Paymero gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Paymero credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Paymero API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Paymero settings object.",
                "properties": {
                  "targetCurrency": {
                    "description": "Currency to which the received cryptocurrency is converted.",
                    "type": "string",
                    "minLength": 3,
                    "maxLength": 3,
                    "example": "USD"
                  },
                  "mainCurrency": {
                    "description": "Blockchain on which the currency is processed.",
                    "type": "string",
                    "enum": [
                      "TRX",
                      "ETH"
                    ]
                  },
                  "amountExceeded": {
                    "description": "Specifies whether to decline transactions when the amount received exceeds the amount requested.",
                    "type": "boolean",
                    "default": false
                  }
                }
              }
            }
          }
        ]
      },
      "Payper": {
        "description": "Payper gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Payper credentials object.",
                "required": [
                  "secretKey"
                ],
                "properties": {
                  "secretKey": {
                    "type": "string",
                    "format": "password",
                    "description": "Payper secret key.",
                    "writeOnly": true
                  }
                }
              },
              "settings": {
                "type": "object",
                "properties": {
                  "autodepositLookup": {
                    "type": "boolean",
                    "description": "Perform Interac e-Transfer Autodeposit lookup before a payout.",
                    "default": false
                  },
                  "autodepositLookupInterval": {
                    "type": "integer",
                    "description": "Number of days to suppress Interac e-Transfer Autodeposit lookup."
                  },
                  "bypassAutodepositLookup": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether to proceed with the payout regardless of the Interac e-Transfer Autodeposit lookup result."
                  }
                }
              }
            }
          }
        ]
      },
      "Payr": {
        "description": "Payr gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "ID of the Payr client."
                  },
                  "secretWord": {
                    "type": "string",
                    "description": "Payr secret word.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiUserId": {
                    "type": "string",
                    "description": "Username for the Alliance API.\nThis API is used for transaction reporting."
                  },
                  "apiSecurityToken": {
                    "type": "string",
                    "description": "Hash of the password for the Alliance API.\nThis API is used for transaction reporting.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "clientId",
                  "secretWord"
                ]
              }
            }
          }
        ]
      },
      "PayRedeem": {
        "description": "PayRedeem gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PayRedeem credentials object.",
                "properties": {
                  "apiUser": {
                    "type": "string",
                    "description": "PayRedeem API user."
                  },
                  "apiPassword": {
                    "type": "string",
                    "description": "PayRedeem API password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "PayRedeem API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiUser",
                  "apiPassword",
                  "apiKey"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "PayRetailers": {
        "description": "PayRetailers gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PayRetailers credentials object.",
                "properties": {
                  "shopId": {
                    "type": "string",
                    "description": "ID of the PayRetailers shop."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "Secret key value of the PayRetailers API.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "shopId",
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "Paysafe": {
        "description": "Paysafe gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "storeId": {
                    "type": "string",
                    "description": "ID of the Paysafe store."
                  },
                  "storePwd": {
                    "type": "string",
                    "description": "Paysafe store password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "accountNum": {
                    "type": "string",
                    "description": "Paysafe account number."
                  }
                },
                "required": [
                  "storeId",
                  "storePwd",
                  "accountNum"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Paysafecard": {
        "description": "Paysafecard gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Paysafecard API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "reconciliationApiKey": {
                    "type": "string",
                    "description": "Paysafecard reconciliation API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "Paysafecash": {
        "description": "Paysafecash gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Paysafecash API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "PayTabs": {
        "description": "PayTabs gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PayTabs credentials object.",
                "properties": {
                  "profileId": {
                    "type": "string",
                    "description": "ID of the PayTabs profile."
                  },
                  "clientKey": {
                    "type": "string",
                    "description": "PayTabs client key."
                  },
                  "serverKey": {
                    "type": "string",
                    "format": "password",
                    "description": "PayTabs server key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "profileId",
                  "clientKey",
                  "serverKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "baseUrl": {
                    "type": "string",
                    "description": "Base URL for PayTabs API."
                  }
                }
              }
            }
          }
        ]
      },
      "PayU": {
        "description": "PayU gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PayU credentials object.",
                "properties": {
                  "merchantKey": {
                    "type": "string",
                    "description": "Merchant key of the PayU merchant."
                  },
                  "merchantSalt": {
                    "type": "string",
                    "description": "Merchant salt of the PayU merchant.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantKey",
                  "merchantSalt"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "PayULatam": {
        "description": "PayULatam gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PayULatam credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the PayULatam merchant."
                  },
                  "accountId": {
                    "type": "string",
                    "description": "ID of the PayULatam account."
                  },
                  "apiLogin": {
                    "type": "string",
                    "description": "PayULatam API login."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "PayULatam API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "accountId",
                  "apiLogin",
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "Payvision": {
        "description": "Payvision gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "memberId": {
                    "type": "string",
                    "description": "ID of the Payvision member."
                  },
                  "memberGuid": {
                    "type": "string",
                    "description": "Payvision member guid.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "memberId",
                  "memberGuid"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Payvision settings object.",
                "properties": {
                  "avs": {
                    "type": "boolean",
                    "description": "Specifies whether to use Payvision AVS."
                  },
                  "delay": {
                    "type": "integer",
                    "description": "Automatic capture delay in hours."
                  },
                  "merchantAccountType": {
                    "type": "integer",
                    "description": "Payvision merchant account type."
                  }
                },
                "required": [
                  "merchantAccountType"
                ]
              }
            }
          }
        ]
      },
      "PayXpert": {
        "description": "Configuration for the PayXpert gateway.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Credentials object for PayXpert.",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Username for the PayXpert API."
                  },
                  "password": {
                    "type": "string",
                    "description": "Password for the PayXpert API.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "username",
                  "password"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "PharosPayments": {
        "description": "PharosPayments gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PharosPayments credentials object.",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Authentication username."
                  },
                  "password": {
                    "description": "Authentication password.",
                    "type": "string",
                    "format": "password"
                  },
                  "merchantCode": {
                    "type": "string",
                    "description": "Merchant code."
                  },
                  "terminalCode": {
                    "type": "string",
                    "description": "Terminal code."
                  }
                },
                "required": [
                  "username",
                  "password",
                  "merchantCode",
                  "terminalCode"
                ]
              }
            }
          }
        ]
      },
      "Piastrix": {
        "description": "Piastrix gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Piastrix credentials object.",
                "properties": {
                  "shopId": {
                    "type": "string",
                    "description": "ID of the Piastrix shop."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "Piastrix secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "shopId",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Piastrix settings object.",
                "properties": {
                  "tolerancePercentage": {
                    "type": "integer",
                    "description": "Tolerance percentage for settled amounts.",
                    "minimum": 0,
                    "maximum": 5,
                    "example": 5
                  }
                }
              }
            }
          }
        ]
      },
      "Pin4Pay": {
        "description": "Pin4Pay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Credentials object.",
                "required": [
                  "username",
                  "requestOrigin",
                  "codigoCliente",
                  "keyValue"
                ],
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Pin4Pay API username."
                  },
                  "requestOrigin": {
                    "type": "string",
                    "description": "Pin4Pay API request origin."
                  },
                  "codigoCliente": {
                    "type": "string",
                    "description": "Pin4Pay API codigo cliente."
                  },
                  "keyValue": {
                    "type": "string",
                    "description": "Pin4Pay API password.",
                    "format": "password",
                    "writeOnly": true
                  }
                }
              }
            }
          }
        ]
      },
      "Plugnpay": {
        "description": "Plugnpay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "publisher-name": {
                    "type": "string",
                    "description": "ID of the Plugnpay member."
                  },
                  "publisher-password": {
                    "type": "string",
                    "description": "Plugnpay AVS.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "publisher-name",
                  "publisher-password"
                ]
              }
            }
          }
        ]
      },
      "PostFinance": {
        "description": "PostFinance gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PostFinance credentials object.",
                "properties": {
                  "pspId": {
                    "type": "string",
                    "description": "ID of the PostFinance PSP."
                  },
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the PostFinance merchant."
                  },
                  "sftpUsername": {
                    "type": "string",
                    "description": "PostFinance SFTP username."
                  },
                  "publicKey": {
                    "type": "string",
                    "x-multiline": true,
                    "description": "PostFinance public key."
                  },
                  "privateKey": {
                    "type": "string",
                    "format": "password",
                    "x-multiline": true,
                    "description": "PostFinance private key.",
                    "writeOnly": true
                  },
                  "keyPassphrase": {
                    "type": "string",
                    "format": "password",
                    "description": "PostFinance key passphrase.",
                    "writeOnly": true
                  },
                  "sftpPrivateKey": {
                    "type": "string",
                    "format": "password",
                    "x-multiline": true,
                    "description": "PostFinance SFTP private key.",
                    "writeOnly": true
                  },
                  "sftpKeyPassphrase": {
                    "type": "string",
                    "format": "password",
                    "description": "PostFinance SFTP key passphrase.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "pspId",
                  "merchantId",
                  "sftpUsername",
                  "publicKey",
                  "privateKey",
                  "keyPassphrase",
                  "sftpPrivateKey",
                  "sftpKeyPassphrase"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "skipPaymentFileUpload": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether to skip the payment file upload screen."
                  },
                  "enableAliasAuthentication": {
                    "type": "boolean",
                    "default": false,
                    "description": "Specifies whether to enable alias authentication."
                  }
                }
              }
            }
          }
        ]
      },
      "Powertranz": {
        "description": "Powertranz gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Powertranz credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "Powertranz merchant ID."
                  },
                  "password": {
                    "type": "string",
                    "description": "Powertranz password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "password"
                ]
              }
            }
          }
        ]
      },
      "PSiGate": {
        "description": "PSiGate gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Username or store name."
                  },
                  "password": {
                    "type": "string",
                    "description": "Password of the PSiGate gateway account.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "clientId": {
                    "type": "string",
                    "description": "Client ID."
                  },
                  "clientApiKey": {
                    "type": "string",
                    "description": "Client API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "disputeUsername": {
                    "type": "string",
                    "description": "Username for fetching disputes."
                  },
                  "disputePassword": {
                    "type": "string",
                    "description": "Password for fetching disputes.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "username",
                  "password",
                  "clientId",
                  "clientApiKey"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "PPRO": {
        "description": "PPRO gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "PPRO credentials object.",
                "properties": {
                  "login": {
                    "type": "string",
                    "description": "PPRO merchant API username."
                  },
                  "password": {
                    "type": "string",
                    "description": "PPRO merchant API password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "contractId": {
                    "type": "string",
                    "description": "ID of the PPRO contract.\nThis value is used for API credentials."
                  },
                  "privateKey": {
                    "type": "string",
                    "format": "password",
                    "description": "PPRO private key.",
                    "x-multiline": true,
                    "writeOnly": true
                  },
                  "privateKeyPassword": {
                    "type": "string",
                    "format": "password",
                    "description": "PPRO private key password.",
                    "writeOnly": true
                  },
                  "clientCertificate": {
                    "type": "string",
                    "description": "Public key.",
                    "x-multiline": true
                  },
                  "serverCertificate": {
                    "type": "string",
                    "description": "PPRO CA certificate.",
                    "x-multiline": true
                  },
                  "notificationSecret": {
                    "type": "string",
                    "format": "password",
                    "description": "Secret used for IPN URLs.",
                    "writeOnly": true
                  },
                  "sharedSecret": {
                    "type": "string",
                    "format": "password",
                    "description": "Secret used for redirect URLs.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "login",
                  "password",
                  "contractId",
                  "privateKey",
                  "privateKeyPassword",
                  "clientCertificate",
                  "serverCertificate",
                  "notificationSecret",
                  "sharedSecret"
                ]
              }
            }
          }
        ]
      },
      "Prosa": {
        "description": "Prosa gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Prosa credentials object.",
                "properties": {
                  "entityId": {
                    "type": "string",
                    "description": "ID of the Prosa entity."
                  },
                  "accessToken": {
                    "type": "string",
                    "format": "password",
                    "description": "Prosa access token.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "entityId",
                  "accessToken"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Quickpay": {
        "description": "Quickpay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Quickpay credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Quickpay API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Rapyd": {
        "description": "Rapyd gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Rapyd credentials object.",
                "properties": {
                  "accessKey": {
                    "type": "string",
                    "description": "Rapyd access key."
                  },
                  "secretKey": {
                    "type": "string",
                    "format": "password",
                    "description": "Rapyd secret key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "accessKey",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Rapyd settings object.",
                "properties": {
                  "ipnUrl": {
                    "type": "string",
                    "description": "Instant Payment Notification (IPN) URL configured on Rapyd.\nThis value is used to calculate the signature."
                  }
                }
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "RPN": {
        "description": "RPN gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "mid": {
                    "type": "string",
                    "description": "RPN merchant identifier."
                  },
                  "key": {
                    "type": "string",
                    "description": "RPN key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "mid",
                  "key"
                ]
              }
            }
          }
        ]
      },
      "Realex": {
        "description": "Realex gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Realex merchant."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "Realex secret key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "rebatePassword": {
                    "type": "string",
                    "description": "Realex rebate password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "account": {
                    "type": "string",
                    "description": "Realex account."
                  }
                },
                "required": [
                  "merchantId",
                  "secretKey",
                  "rebatePassword",
                  "account"
                ]
              }
            }
          }
        ]
      },
      "Realtime": {
        "description": "Realtime gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "ID of the Realtime client."
                  },
                  "secretWord": {
                    "type": "string",
                    "description": "Realtime secret word.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "clientId",
                  "secretWord"
                ]
              }
            }
          }
        ]
      },
      "Redsys": {
        "description": "Redsys gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantCode": {
                    "type": "string",
                    "description": "Redsys merchant code.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secretCode": {
                    "type": "string",
                    "description": "Redsys secret code.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantCode",
                  "secretCode"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Redsys settings object.",
                "properties": {
                  "terminal": {
                    "type": "string",
                    "description": "Redsys terminal."
                  }
                }
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Rotessa": {
        "description": "Rotessa gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Rotessa credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "Rotessa API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Rotessa settings object.",
                "properties": {
                  "delay": {
                    "type": "integer",
                    "description": "Automatic capture delay."
                  }
                },
                "required": [
                  "delay"
                ]
              }
            }
          }
        ]
      },
      "Safecharge": {
        "description": "Safecharge gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Safecharge credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Safecharge merchant."
                  },
                  "siteId": {
                    "type": "string",
                    "description": "ID of the Safecharge site."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "Safecharge secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "secretKey",
                  "siteId"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "SaltarPay": {
        "description": "SaltarPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "SaltarPay credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "SaltarPay API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "SaltarPay secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey",
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "SMSVoucher": {
        "description": "SMSVoucher gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "AppId": {
                    "type": "string",
                    "description": "ID of the SMSVoucher application."
                  }
                },
                "required": [
                  "AppId"
                ]
              }
            }
          }
        ]
      },
      "Sofort": {
        "description": "Sofort gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Sofort credentials object.",
                "properties": {
                  "configKey": {
                    "type": "string",
                    "description": "Sofort configuration key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "nuaPayApiKey": {
                    "type": "string",
                    "description": "NuaPay API key for reconciliation.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "nuaPayAccountId": {
                    "type": "string",
                    "description": "NuaPay account ID for reconciliation."
                  }
                },
                "required": [
                  "configKey"
                ]
              }
            }
          }
        ]
      },
      "Sagepay": {
        "description": "Sagepay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "M_ID": {
                    "type": "string",
                    "description": "ID of the Sagepay merchant."
                  },
                  "M_KEY": {
                    "type": "string",
                    "description": "Sagepay merchant key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "M_ID",
                  "M_KEY"
                ]
              }
            }
          }
        ]
      },
      "SeamlessChex": {
        "description": "SeamlessChex gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "SeamlessChex credentials object.",
                "properties": {
                  "publicKey": {
                    "type": "string",
                    "description": "SeamlessChex publishable key."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "SeamlessChex secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "publicKey",
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "SecureTrading": {
        "description": "SecureTrading gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "SecureTrading credentials object.",
                "properties": {
                  "websiteId": {
                    "type": "string",
                    "description": "ID of the SecureTrading website.",
                    "maxLength": 50,
                    "example": "web_0YV7DE4Z26DQSA1AC92FBJ7SEG"
                  },
                  "username": {
                    "type": "string",
                    "description": "SecureTrading web service username."
                  },
                  "password": {
                    "type": "string",
                    "description": "SecureTrading web service password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "notificationPassword": {
                    "type": "string",
                    "description": "SecureTrading notification password.\nThis password is used to authenticate webhook requests.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "websiteId",
                  "username",
                  "password"
                ]
              },
              "settings": {
                "type": "object",
                "description": "SecureTrading settings object.",
                "properties": {
                  "enableRecurring": {
                    "type": "boolean",
                    "description": "Enables recurring payments.",
                    "default": false
                  },
                  "useParentTransactionOnFile": {
                    "type": "boolean",
                    "description": "Enables subsequent MIT payments to include \"parenttransactionreference\" value.",
                    "default": false
                  }
                }
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "SecurionPay": {
        "description": "SecurionPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "SecurionPay credentials object.",
                "properties": {
                  "secretApiKey": {
                    "type": "string",
                    "format": "password",
                    "description": "SecurionPay secret API key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "secretApiKey"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "Skrill": {
        "description": "Skrill gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Skrill credentials object.",
                "properties": {
                  "accountEmail": {
                    "type": "string",
                    "description": "Email address of your Skrill merchant account."
                  },
                  "secretWord": {
                    "type": "string",
                    "description": "Secret word used for MD5 signature verifications.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "mqiPassword": {
                    "type": "string",
                    "description": "Password used during MQI or API requests.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "currencyAccountIds": {
                    "type": "string",
                    "description": "Comma-separated list of currency account IDs."
                  },
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Skrill merchant account.\nThis value is required if `enableCustomerVerification` is set to `true`."
                  }
                },
                "required": [
                  "accountEmail",
                  "secretWord"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "merchantFields": {
                    "type": "string",
                    "description": "Comma-separated list of name-value merchant field pairs.\nExample: `key1:value1,key2:value2`."
                  },
                  "useSPX": {
                    "type": "boolean",
                    "description": "Specifies whether to use SPX code for PIX payment method.",
                    "default": false
                  },
                  "enableCustomerVerification": {
                    "type": "boolean",
                    "description": "Specifies whether to perform a Customer Verification Service check before the payout.",
                    "default": false,
                    "example": false
                  }
                }
              }
            }
          }
        ]
      },
      "SmartInvoice": {
        "description": "SmartInvoice gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "SmartInvoice credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "SmartInvoice merchant account UID."
                  },
                  "applicationId": {
                    "type": "string",
                    "description": "SmartInvoice application UID.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "applicationId"
                ]
              }
            }
          }
        ]
      },
      "SparkPay": {
        "description": "SparkPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "SparkPay credentials object.",
                "properties": {
                  "shopId": {
                    "type": "string",
                    "description": "ID of the SparkPay shop."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "SparkPay secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "shopId",
                  "secretKey"
                ]
              }
            }
          }
        ]
      },
      "Splitit": {
        "description": "Splitit gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "terminalId": {
                    "type": "string",
                    "description": "Splitit terminal ID."
                  },
                  "username": {
                    "type": "string",
                    "description": "Splitit username."
                  },
                  "password": {
                    "type": "string",
                    "description": "Splitit password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "terminalId",
                  "username",
                  "password"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Splitit settings object.",
                "properties": {
                  "numberOfInstallmentsCustomField": {
                    "type": "string",
                    "description": "Name of the transaction custom field that holds the number of installments."
                  }
                }
              }
            }
          }
        ]
      },
      "StaticGateway": {
        "description": "StaticGateway gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          }
        ]
      },
      "STPMexicoBanks": {
        "type": "integer",
        "enum": [
          37006,
          37009,
          37019,
          37135,
          37166,
          37168,
          40002,
          40012,
          40014,
          40021,
          40030,
          40036,
          40037,
          40042,
          40044,
          40058,
          40059,
          40060,
          40062,
          40072,
          40102,
          40103,
          40106,
          40108,
          40110,
          40112,
          40113,
          40124,
          40126,
          40127,
          40128,
          40129,
          40130,
          40131,
          40132,
          40133,
          40136,
          40137,
          40138,
          40140,
          40141,
          40143,
          40145,
          40147,
          40148,
          40150,
          40151,
          40152,
          40154,
          40155,
          40156,
          40158,
          90600,
          90601,
          90602,
          90605,
          90606,
          90608,
          90613,
          90614,
          90616,
          90617,
          90620,
          90621,
          90623,
          90626,
          90627,
          90628,
          90630,
          90631,
          90634,
          90636,
          90637,
          90638,
          90640,
          90642,
          90646,
          90648,
          90649,
          90652,
          90653,
          90655,
          90656,
          90659,
          90670,
          90671,
          90674,
          90677,
          90678,
          90679,
          90680,
          90681,
          90683,
          90684,
          90685,
          90686,
          90687,
          90689,
          90901,
          90902
        ]
      },
      "STPMexico": {
        "description": "STP Mexico gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "STP Mexico credentials object.",
                "properties": {
                  "companyName": {
                    "type": "string",
                    "description": "STP Mexico account company name."
                  },
                  "beneficiaryName": {
                    "type": "string",
                    "description": "Name of the bank account holder that is receiving payments."
                  },
                  "bankId": {
                    "description": "ID of the bank receiving payments.\nA list of bank IDs can be found in STP Mexico integration documentation.",
                    "$ref": "#/components/schemas/STPMexicoBanks"
                  },
                  "bankAccountNumber": {
                    "type": "string",
                    "description": "Bank account number of the payments recipient."
                  },
                  "privateKey": {
                    "type": "string",
                    "description": "STP Mexico private key.",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  },
                  "keyPassphrase": {
                    "type": "string",
                    "description": "Passphrase for the private key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "companyName",
                  "beneficiaryName",
                  "bankId",
                  "bankAccountNumber",
                  "privateKey",
                  "keyPassphrase"
                ]
              }
            }
          }
        ]
      },
      "Stripe": {
        "description": "Stripe gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Stripe Connect credentials object.\nThe credentials object may be provided to control the Stripe Connect account to which the gateway account is connected.",
                "properties": {
                  "stripeClientId": {
                    "type": "string",
                    "description": "ID of the Stripe account client."
                  },
                  "stripeSecret": {
                    "type": "string",
                    "description": "Stripe Connect account secret key account.",
                    "format": "password",
                    "writeOnly": true
                  }
                }
              },
              "settings": {
                "type": "object",
                "description": "Stripe settings object.",
                "required": [
                  "redirectUrl"
                ],
                "properties": {
                  "redirectUrl": {
                    "type": "string",
                    "description": "URL where the user is redirected after authorizing the account on Stripe.",
                    "format": "uri"
                  },
                  "disablePaymentIntents": {
                    "type": "boolean",
                    "description": "Specifies whether to use the Charges API instead of the PaymentIntents API.",
                    "default": false
                  },
                  "enforceOffSession": {
                    "type": "boolean",
                    "description": "Specifies if the `off_session` parameter is set to `true` in Stripe requests.",
                    "default": false
                  },
                  "copyCredentialsFrom": {
                    "type": "string",
                    "description": "ID of an existing Stripe gateway account from which credentials are copied in order to skip the onboarding process."
                  },
                  "setupFutureUsage": {
                    "type": "string",
                    "description": "Indicates intent to make future payments with this payment method.\n- `on_session`: Reuse the payment method when the customer is present.\n- `off_session`: Reuse the payment method when the customer may or may not be present.",
                    "enum": [
                      "off_session",
                      "on_session"
                    ]
                  },
                  "applicationFeePercentage": {
                    "type": "integer",
                    "description": "Percentage of transaction amount uses for sending application fee to Stripe.",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "includeCardNetwork": {
                    "type": "boolean",
                    "description": "Specifies whether to include payment card network in the request to Stripe.",
                    "default": false
                  },
                  "radarSessionCustomField": {
                    "type": "string",
                    "description": "Name of the transaction custom field that holds the Radar Session ID."
                  }
                }
              },
              "threeDSecureServer": {
                "type": "object",
                "required": [
                  "name"
                ],
                "description": "Stripe Integrated.",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the Stripe 3DS server.",
                    "enum": [
                      "Stripe3dsServer"
                    ]
                  },
                  "enforceThreeDSecure": {
                    "type": "boolean",
                    "description": "Specifies if Stripe must perform 3D Secure.\nThis option overrides any [dynamic 3D Secure Radar rules](https://stripe.com/docs/radar/rules#request-3ds)."
                  }
                }
              }
            }
          }
        ]
      },
      "Tabby": {
        "description": "Tabby gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Tabby credentials object.",
                "properties": {
                  "publicKey": {
                    "type": "string",
                    "description": "Public API key of Tabby account.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "Secret API key of Tabby account.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantCode": {
                    "type": "string",
                    "description": "Merchant code of Tabby account."
                  }
                },
                "required": [
                  "publicKey",
                  "merchantCode"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Tabby settings object.",
                "properties": {
                  "category": {
                    "type": "string",
                    "description": "Tabby merchant category."
                  }
                }
              }
            }
          }
        ]
      },
      "Telr": {
        "description": "Telr gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Telr credentials object.",
                "properties": {
                  "storeId": {
                    "type": "string",
                    "description": "Hosted payment page V2 store identifier."
                  },
                  "hostedPageAuthenticationKey": {
                    "type": "string",
                    "description": "Hosted payment page V2 authentication key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantId": {
                    "type": "string",
                    "description": "Service API merchant identifier."
                  },
                  "serviceApiKey": {
                    "type": "string",
                    "description": "Service API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "remoteApiKey": {
                    "type": "string",
                    "description": "Remote API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "storeId",
                  "hostedPageAuthenticationKey",
                  "merchantId",
                  "serviceApiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Telr settings object.",
                "properties": {
                  "transactionDescription": {
                    "type": "string",
                    "description": "Default transaction description.\nLeave this field blank to use website URL."
                  }
                }
              }
            }
          }
        ]
      },
      "TestProcessor": {
        "description": "TestProcessor gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "properties": {
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "ToditoCash": {
        "description": "ToditoCash gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "ToditoCash credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "ToditoCash API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "Triple000": {
        "description": "Triple000 gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Triple000 credentials object.",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Username of the Triple000 merchant."
                  },
                  "password": {
                    "type": "string",
                    "format": "password",
                    "description": "Triple000 password.",
                    "writeOnly": true
                  },
                  "secretWord": {
                    "type": "string",
                    "format": "password",
                    "description": "Triple000 secret word.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "username",
                  "password",
                  "secretWord"
                ]
              }
            }
          }
        ]
      },
      "Truevo": {
        "description": "Truevo gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Truevo credentials object.",
                "properties": {
                  "mid": {
                    "type": "string",
                    "description": "Truevo merchant identifier."
                  },
                  "tid": {
                    "type": "string",
                    "description": "Truevo terminal identifier."
                  },
                  "token": {
                    "type": "string",
                    "description": "Truevo authentication token.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantName": {
                    "type": "string",
                    "description": "Merchant name for SFTP reconciliation."
                  },
                  "sftpUsername": {
                    "type": "string",
                    "description": "SFTP reconciliation username."
                  },
                  "sftpPrivateKey": {
                    "type": "string",
                    "format": "password",
                    "description": "SFTP reconciliation private key.",
                    "x-multiline": true,
                    "writeOnly": true
                  },
                  "sftpKeyPassphrase": {
                    "type": "string",
                    "format": "password",
                    "description": "Passphrase of the SFTP reconciliation private key.",
                    "writeOnly": true
                  },
                  "ipnSecret": {
                    "type": "string",
                    "format": "password",
                    "description": "IPN secret that is used to validate incoming IPN requests.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "mid",
                  "tid",
                  "token"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "TrustsPay": {
        "description": "TrustsPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "TrustsPay credentials object.",
                "required": [
                  "merchantNo",
                  "gatewayNo",
                  "signkey"
                ],
                "properties": {
                  "merchantNo": {
                    "type": "string",
                    "description": "TrustsPay merchant number."
                  },
                  "gatewayNo": {
                    "type": "string",
                    "description": "TrustsPay gateway number."
                  },
                  "signkey": {
                    "type": "string",
                    "format": "password",
                    "description": "TrustsPay sign key.",
                    "writeOnly": true
                  }
                }
              }
            }
          }
        ]
      },
      "Trustly": {
        "description": "Trustly gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Trustly credentials object.",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "Trustly username."
                  },
                  "password": {
                    "type": "string",
                    "description": "Trustly password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "publicKey": {
                    "type": "string",
                    "description": "Trustly public key.",
                    "x-multiline": true
                  },
                  "privateKey": {
                    "type": "string",
                    "description": "Trustly private key.",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  }
                },
                "required": [
                  "username",
                  "password",
                  "publicKey",
                  "privateKey"
                ]
              }
            }
          }
        ]
      },
      "TWINT": {
        "description": "TWINT gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "TWINT credentials object.",
                "properties": {
                  "storeUuid": {
                    "type": "string",
                    "description": "TWINT store UUID."
                  },
                  "cashRegisterId": {
                    "type": "string",
                    "description": "ID of the cash register."
                  },
                  "publicKey": {
                    "type": "string",
                    "description": "TWINT public key.",
                    "x-multiline": true
                  },
                  "privateKey": {
                    "type": "string",
                    "description": "TWINT private key.",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  },
                  "keyPassphrase": {
                    "type": "string",
                    "description": "TWINT key passphrase.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "storeUuid",
                  "cashRegisterId",
                  "publicKey",
                  "privateKey",
                  "keyPassphrase"
                ]
              },
              "settings": {
                "type": "object",
                "description": "TWINT settings object.",
                "properties": {
                  "cashRegisterType": {
                    "type": "string",
                    "description": "TWINT cash register type."
                  }
                },
                "required": [
                  "cashRegisterType"
                ]
              }
            }
          }
        ]
      },
      "Txn": {
        "description": "Txn gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Txn credentials object.",
                "properties": {
                  "apiKey": {
                    "type": "string",
                    "description": "API key of the Txn.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Txn settings object.",
                "properties": {
                  "destinationTagCustomField": {
                    "type": "string",
                    "description": "Name of the customer custom field that holds payout destination tag for XRP."
                  },
                  "payoutCurrency": {
                    "type": "string",
                    "description": "Cryptocurrency of the payout."
                  },
                  "accountCurrency": {
                    "type": "string",
                    "description": "Cryptocurrency of the merchant account."
                  },
                  "payoutNetwork": {
                    "type": "string",
                    "description": "Blockchain network to use for the payout.",
                    "enum": [
                      "btc",
                      "usdt",
                      "eth",
                      "xrp"
                    ]
                  }
                }
              }
            }
          }
        ]
      },
      "Unlimit": {
        "description": "Unlimit gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Unlimit credentials object.",
                "properties": {
                  "terminalId": {
                    "type": "string",
                    "description": "ID of the Unlimit terminal."
                  },
                  "password": {
                    "type": "string",
                    "description": "Password of the Unlimit terminal merchant.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "ipnSecret": {
                    "type": "string",
                    "description": "IPN secret of the Unlimit merchant.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "terminalId",
                  "password",
                  "ipnSecret"
                ]
              }
            }
          }
        ]
      },
      "UPayCard": {
        "description": "UPayCard gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "receiver_account": {
                    "type": "string",
                    "description": "UPayCard merchant receiver account."
                  },
                  "key": {
                    "type": "string",
                    "description": "UPayCard merchant key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "secret": {
                    "type": "string",
                    "description": "UPayCard merchant secret.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "receiver_account",
                  "key",
                  "secret"
                ]
              },
              "settings": {
                "type": "object",
                "description": "UpayCard settings object.",
                "required": [
                  "tolerancePercentage"
                ],
                "properties": {
                  "tolerancePercentage": {
                    "$ref": "#/components/schemas/AmountAdjustmentTolerance"
                  }
                }
              }
            }
          }
        ]
      },
      "USAePay": {
        "description": "USAePay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "sourceKey": {
                    "type": "string",
                    "description": "USAePay source key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "pin": {
                    "type": "string",
                    "description": "USAePay pin.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "sourceKey",
                  "pin"
                ]
              }
            }
          }
        ]
      },
      "VantivLitle": {
        "description": "VantivLitle gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "username": {
                    "type": "string",
                    "description": "VantivLitle username."
                  },
                  "password": {
                    "type": "string",
                    "description": "VantivLitle password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the VantivLitle merchant."
                  }
                },
                "required": [
                  "username",
                  "password",
                  "merchantId"
                ]
              }
            }
          }
        ]
      },
      "VCreditos": {
        "description": "VCreditos gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "VCreditos credentials object.",
                "properties": {
                  "publicKey": {
                    "type": "string",
                    "description": "VCreditos API public key."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "VCreditos API secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "publicKey",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "VCreditos settings object.",
                "properties": {
                  "merchantWebsiteLoginLabel": {
                    "type": "string",
                    "description": "Label caption for a merchant website login input."
                  },
                  "merchantWebsiteLoginDescription": {
                    "type": "string",
                    "description": "Description block for a merchant website login input."
                  }
                }
              }
            }
          }
        ]
      },
      "VegaWallet": {
        "description": "VegaWallet gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "VegaWallet credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the VegaWallet merchant."
                  },
                  "password": {
                    "type": "string",
                    "description": "VegaWallet merchant password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "payoutPassword": {
                    "type": "string",
                    "description": "VegaWallet payout password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "password"
                ]
              }
            }
          }
        ]
      },
      "Viva": {
        "description": "Viva gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Viva credentials object.",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "ID of the Viva OAuth 2.0."
                  },
                  "clientSecret": {
                    "type": "string",
                    "description": "Secret of the Viva OAuth 2.0.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Viva basic authentication."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "API key for Viva basic authentication.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "clientId",
                  "clientSecret",
                  "merchantId",
                  "apiKey"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Viva settings object.",
                "properties": {
                  "sourceCode": {
                    "description": "Payment source links to the merchant.",
                    "type": "string"
                  },
                  "customerTransaction": {
                    "description": "This optional parameter adds a friendly description to the payment order that you want to display to the customer on the payment form.",
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "Wallet88": {
        "description": "Wallet88 gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Wallet88 credentials object.",
                "properties": {
                  "sid": {
                    "type": "string",
                    "description": "ID of the Wallet88 API site."
                  },
                  "rcode": {
                    "type": "string",
                    "description": "Wallet88 API rcode.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "sid",
                  "rcode"
                ]
              },
              "settings": {
                "type": "object",
                "description": "Wallet88 settings object.",
                "properties": {
                  "paymentCardMethod": {
                    "description": "Method to send for payment card.",
                    "type": "string",
                    "enum": [
                      "creditcard",
                      "mastercard",
                      "visa"
                    ],
                    "default": "creditcard"
                  }
                }
              }
            }
          }
        ]
      },
      "Walpay": {
        "description": "Walpay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantName": {
                    "type": "string",
                    "description": "Walpay merchant name."
                  },
                  "merchantPin": {
                    "type": "string",
                    "description": "Walpay merchant pin.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantName",
                  "merchantPin"
                ]
              }
            }
          }
        ]
      },
      "WesternUnion": {
        "description": "WesternUnion gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "WesternUnion credentials object.",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "ID of the WesternUnion client."
                  },
                  "certificateCommonName": {
                    "type": "string",
                    "description": "WesternUnion certificate Common Name (CN)."
                  },
                  "certificateSerialNumber": {
                    "type": "string",
                    "description": "WesternUnion certificate Serial Number (SN)."
                  }
                },
                "required": [
                  "clientId",
                  "certificateCommonName",
                  "certificateSerialNumber"
                ]
              }
            }
          }
        ]
      },
      "Wirecard": {
        "description": "Wirecard gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantUsername": {
                    "type": "string",
                    "description": "Wirecard merchant username."
                  },
                  "merchantPassword": {
                    "type": "string",
                    "description": "Wirecard merchant password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "businessSignature": {
                    "type": "string",
                    "description": "Wirecard merchant business case signature.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "delay": {
                    "type": "integer",
                    "description": "Automatic capture delay."
                  },
                  "sftpUsername": {
                    "type": "string",
                    "description": "Wirecard SFTP username."
                  },
                  "sftpPrivateKey": {
                    "type": "string",
                    "description": "Wirecard SFTP private key.",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantUsername",
                  "merchantPassword",
                  "businessSignature",
                  "delay"
                ]
              }
            }
          }
        ]
      },
      "WorldlineAtosFrankfurt": {
        "description": "WorldlineAtosFrankfurt gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials",
              "settings"
            ],
            "properties": {
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              },
              "credentials": {
                "type": "object",
                "description": "WorldlineAtosFrankfurt credentials.",
                "properties": {
                  "cardAcceptorIdCode": {
                    "type": "string",
                    "description": "Card acceptor ID Code."
                  },
                  "acquiringInstitutionIdentificationCode": {
                    "type": "string",
                    "description": "Identification code of the acquiring institution."
                  },
                  "mpgId": {
                    "type": "string",
                    "description": "Merchant payment gateway ID from Mastercard."
                  },
                  "clientCertificate": {
                    "type": "string",
                    "description": "Client certificate for mutual TLS (mTLS) authentication.\nThis value is required if `useMtls` is set to `true`.",
                    "format": "password",
                    "writeOnly": true,
                    "x-multiline": true
                  },
                  "privateKey": {
                    "type": "string",
                    "description": "Client private key for mutual TLS (mTLS) authentication.\nThis value is required if `useMtls` is set to `true`.",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  }
                },
                "required": [
                  "cardAcceptorIdCode",
                  "acquiringInstitutionIdentificationCode",
                  "mpgId"
                ]
              },
              "settings": {
                "type": "object",
                "description": "WorldlineAtosFrankfurt settings.",
                "properties": {
                  "cardAcceptorName": {
                    "type": "string",
                    "description": "Name of the card acceptor."
                  },
                  "cardAcceptorLocation": {
                    "type": "string",
                    "description": "Location of the card acceptor."
                  },
                  "cardAcceptorCountryCode": {
                    "type": "string",
                    "description": "Country code of the card acceptor."
                  },
                  "terminalIds": {
                    "type": "string",
                    "description": "Comma-separated list of terminal IDs."
                  },
                  "useMtls": {
                    "type": "boolean",
                    "default": false,
                    "description": "Indicates whether to use mutual TLS (mTLS) for the connection."
                  }
                },
                "required": [
                  "cardAcceptorName",
                  "cardAcceptorLocation",
                  "cardAcceptorCountryCode"
                ]
              }
            }
          }
        ]
      },
      "Worldpay": {
        "description": "Worldpay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "merchantCode": {
                    "type": "string",
                    "description": "Worldpay merchant code.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "merchantPassword": {
                    "type": "string",
                    "description": "Worldpay merchant password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "payoutMerchantCode": {
                    "type": "string",
                    "description": "Optional alternate merchant code for payouts.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "payoutMerchantPassword": {
                    "type": "string",
                    "description": "Optional alternate merchant password for payouts.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "alternativePaymentsUsername": {
                    "type": "string",
                    "description": "OneClick platform username, required for non-card payment methods."
                  },
                  "alternativePaymentsPassword": {
                    "type": "string",
                    "description": "OneClick platform password, required for non-card payment methods.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "sftpUsername": {
                    "type": "string",
                    "description": "SFTP username."
                  },
                  "sftpPrivateKey": {
                    "type": "string",
                    "description": "SFTP private key.",
                    "format": "password",
                    "x-multiline": true,
                    "writeOnly": true
                  },
                  "sftpKeyPassphrase": {
                    "type": "string",
                    "format": "password",
                    "description": "Passphrase of the SFTP private key.",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantCode",
                  "merchantPassword"
                ]
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              },
              "settings": {
                "type": "object",
                "properties": {
                  "delay": {
                    "type": "integer",
                    "description": "Automatic capture delay in hours.",
                    "minimum": 0,
                    "default": 0
                  },
                  "enforceStoredCredentials": {
                    "type": "string",
                    "description": "Specifies whether to enforce stored credentials.\n`mit-enabled` means that stored credentials are sent only on merchant initiated transactions. This is the expected usage.\n`always-enabled` means that stored credentials are also used, if available, for customer facing transactions.",
                    "enum": [
                      "disabled",
                      "mit-enabled",
                      "always-enabled"
                    ],
                    "default": "disabled"
                  },
                  "merchantInitiatedReason": {
                    "type": "string",
                    "description": "Value to send with merchant-initiated transactions.",
                    "enum": [
                      "UNSCHEDULED",
                      "RECURRING",
                      "INSTALMENT",
                      "REAUTH",
                      "DELAYED",
                      "INCREMENTAL",
                      "RESUBMISSION",
                      "NOSHOW"
                    ],
                    "default": "UNSCHEDULED"
                  }
                }
              }
            }
          }
        ]
      },
      "Zotapay": {
        "description": "Zotapay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "endpointId": {
                    "type": "string",
                    "description": "ID of the Zotapay endpoint."
                  },
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Zotapay merchant."
                  },
                  "merchantSecretKey": {
                    "type": "string",
                    "description": "Zotapay merchant secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "endpointId",
                  "merchantId",
                  "merchantSecretKey"
                ]
              }
            }
          }
        ]
      },
      "eMerchantPay": {
        "description": "eMerchantPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "ID of the eMerchantPay client."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "eMerchantPay API key.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "username": {
                    "type": "string",
                    "description": "eMerchantPay username for the Genesis platform."
                  },
                  "token": {
                    "type": "string",
                    "description": "eMerchantPay token for the Genesis platform."
                  },
                  "password": {
                    "type": "string",
                    "description": "eMerchantPay password for the Genesis platform.",
                    "format": "password",
                    "writeOnly": true
                  }
                }
              },
              "settings": {
                "type": "object",
                "description": "eMerchantPay settings object.",
                "properties": {
                  "useGenesisPlatform": {
                    "type": "boolean",
                    "description": "Specifies whether to use the Genesis platform on eMerchantPay.",
                    "default": false
                  }
                }
              },
              "threeDSecureServer": {
                "$ref": "#/components/schemas/ThreeDSecureIO3dsServer"
              }
            }
          }
        ]
      },
      "ecoPayz": {
        "description": "ecoPayz gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "ecoPayz credentials object.",
                "properties": {
                  "paymentPageId": {
                    "type": "string",
                    "description": "ID of the ecoPayz payment page."
                  },
                  "merchantAccountNumber": {
                    "type": "string",
                    "description": "ecoPayz merchant account number."
                  },
                  "merchantPassword": {
                    "type": "string",
                    "description": "ecoPayz merchant password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "paymentPageId",
                  "merchantAccountNumber",
                  "merchantPassword"
                ]
              },
              "settings": {
                "type": "object",
                "description": "ecoPayz settings object.",
                "properties": {
                  "validCurrency": {
                    "type": "string",
                    "description": "Three letter currency code in ISO 4217 format.",
                    "enum": [
                      "CAD",
                      "EUR",
                      "GBP",
                      "USD"
                    ]
                  }
                },
                "required": [
                  "validCurrency"
                ]
              }
            }
          }
        ]
      },
      "ecoPayzTurkey": {
        "description": "ecoPayzTurkey gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "ecoPayzTurkey credentials object.",
                "properties": {
                  "paymentPageId": {
                    "type": "string",
                    "description": "ID of the ecoPayzTurkey payment page."
                  },
                  "merchantAccountNumber": {
                    "type": "string",
                    "description": "ecoPayzTurkey merchant account number."
                  },
                  "merchantPassword": {
                    "type": "string",
                    "description": "ecoPayzTurkey merchant password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "paymentPageId",
                  "merchantAccountNumber",
                  "merchantPassword"
                ]
              },
              "settings": {
                "type": "object",
                "description": "ecoPayzTurkey settings object.",
                "properties": {
                  "validCurrency": {
                    "type": "string",
                    "description": "Three letter currency code in ISO 4217 format.",
                    "enum": [
                      "CAD",
                      "EUR",
                      "GBP",
                      "USD"
                    ]
                  }
                },
                "required": [
                  "validCurrency"
                ]
              }
            }
          }
        ]
      },
      "iCanPay": {
        "description": "iCanPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "authenticateId": {
                    "type": "string",
                    "description": "Authenticate ID of the iCanPay account."
                  },
                  "authenticatePw": {
                    "type": "string",
                    "description": "iCanPay authenticate password.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "publicKey": {
                    "type": "string",
                    "description": "iCanPay API public key."
                  },
                  "secretKey": {
                    "type": "string",
                    "description": "iCanPay API secret key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "authenticateId",
                  "authenticatePw",
                  "publicKey",
                  "secretKey"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "use3DSEndpoint": {
                    "type": "boolean",
                    "description": "Specifies whether to use a 3DS endpoint."
                  }
                }
              }
            }
          }
        ]
      },
      "iCheque": {
        "description": "iCheque gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "clientId": {
                    "type": "string",
                    "description": "ID of the iCheque client."
                  },
                  "secretWord": {
                    "type": "string",
                    "description": "iCheque secret word.",
                    "format": "password",
                    "writeOnly": true
                  },
                  "apiUserId": {
                    "type": "string",
                    "description": "Username for the Alliance API that is used for transaction reporting."
                  },
                  "apiSecurityToken": {
                    "type": "string",
                    "description": "Hash of the password for the Alliance API that is used for transaction reporting.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "clientId",
                  "secretWord"
                ]
              }
            }
          }
        ]
      },
      "iDebit": {
        "description": "iDebit gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "iDebit credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "iDebit merchant account number."
                  },
                  "password": {
                    "type": "string",
                    "description": "iDebit merchant account password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "password"
                ]
              },
              "settings": {
                "type": "object",
                "properties": {
                  "merchantSubId": {
                    "type": "integer",
                    "description": "ID of the merchant or organization."
                  }
                }
              }
            }
          }
        ]
      },
      "vegaaH": {
        "description": "vegaaH gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "properties": {
                  "terminalId": {
                    "type": "string",
                    "description": "ID of the vegaaH terminal."
                  },
                  "password": {
                    "type": "string",
                    "description": "vegaaH password.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "terminalId",
                  "password"
                ]
              }
            }
          }
        ]
      },
      "XPay": {
        "description": "XPay gateway configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "XPay credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the XPay merchant."
                  },
                  "encryptionKey": {
                    "type": "string",
                    "format": "password",
                    "writeOnly": true,
                    "description": "XPay encryption key."
                  }
                },
                "required": [
                  "merchantId",
                  "encryptionKey"
                ]
              }
            }
          }
        ]
      },
      "Zimpler": {
        "description": "Zimpler configuration.",
        "allOf": [
          {
            "$ref": "#/components/schemas/GatewayAccount"
          },
          {
            "type": "object",
            "required": [
              "credentials"
            ],
            "properties": {
              "credentials": {
                "type": "object",
                "description": "Zimpler credentials object.",
                "properties": {
                  "merchantId": {
                    "type": "string",
                    "description": "ID of the Zimpler merchant."
                  },
                  "apiKey": {
                    "type": "string",
                    "description": "Zimpler API key.",
                    "format": "password",
                    "writeOnly": true
                  }
                },
                "required": [
                  "merchantId",
                  "apiKey"
                ]
              }
            }
          }
        ]
      },
      "DigitalWallets": {
        "type": "object",
        "description": "Configure which digital wallets are enabled.",
        "title": "Digital Wallets",
        "properties": {
          "applePay": {
            "type": "object",
            "description": "Apple Pay digital wallet configuration. If not using Apple Pay,\ndo not use this field.",
            "required": [
              "isEnabled"
            ],
            "properties": {
              "isEnabled": {
                "type": "boolean",
                "description": "Specifies if Apple Pay is enabled.",
                "default": false
              },
              "displayName": {
                "description": "String of 64, or fewer, UTF-8 characters containing the canonical name for your store,\nwhich is suitable for display.\nDo not localize this name.",
                "type": [
                  "string",
                  "null"
                ],
                "example": "Test merchant"
              },
              "country": {
                "$ref": "#/components/schemas/DigitalWalletCountry"
              }
            }
          },
          "googlePay": {
            "type": "object",
            "description": "Google Pay™ digital wallet configuration. If not using Google Pay™,\ndo not use this field.",
            "required": [
              "isEnabled"
            ],
            "properties": {
              "isEnabled": {
                "type": "boolean",
                "description": "Specifies if Google Pay™ is enabled.",
                "default": false
              },
              "merchantName": {
                "description": "Merchant name in Google Pay™.",
                "type": [
                  "string",
                  "null"
                ],
                "example": "Test merchant"
              },
              "merchantOrigin": {
                "description": "Merchant origin in Google Pay™.\nThis uses the fully qualified domain name.",
                "type": [
                  "string",
                  "null"
                ],
                "example": "www.example.com"
              },
              "country": {
                "$ref": "#/components/schemas/DigitalWalletCountry"
              }
            }
          }
        }
      },
      "ValidationErrorExtensions": {
        "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"
              }
            ]
          }
        }
      },
      "InvalidError": {
        "description": "Invalid data sent.",
        "allOf": [
          {
            "$ref": "#/components/schemas/Error"
          },
          {
            "$ref": "#/components/schemas/ValidationErrorExtensions"
          }
        ]
      },
      "GatewayAccountDowntimeSchedule": {
        "type": "object",
        "required": [
          "startTime",
          "endTime"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the gateway account downtime schedule.",
            "readOnly": true,
            "maxLength": 50,
            "example": "gw_dwn_0YVCXRK9TKCC6AMAPFB9M4RXDP"
          },
          "status": {
            "description": "Status of the gateway account downtime schedule.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "ongoing",
              "finished"
            ]
          },
          "reason": {
            "description": "Reason for the gateway account downtime schedule.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "scheduled-maintenance",
              "daily-limit-reached",
              "monthly-limit-reached"
            ]
          },
          "startTime": {
            "description": "Date and time when the gateway account scheduled downtime starts.",
            "type": "string",
            "format": "date-time"
          },
          "endTime": {
            "description": "Date and time when the gateway account scheduled downtime ends.",
            "type": "string",
            "format": "date-time"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "GatewayAccountLimit": {
        "description": "Gateway account limit details.",
        "type": "object",
        "required": [
          "cap"
        ],
        "properties": {
          "id": {
            "description": "ID of the gateway account limit.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "status": {
            "description": "Status of the gateway account limit.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "monitoring",
              "reached"
            ]
          },
          "startTime": {
            "description": "Date and time when the gateway account limit starts.",
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "endTime": {
            "description": "Date and time when the gateway account limit ends.\nWhen a gateway account limit ends the limit resets.",
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "frequency": {
            "description": "Frequency at which the gateway account limit period resets.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "daily",
              "monthly"
            ]
          },
          "type": {
            "description": "Type of gateway account limit.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "money",
              "count"
            ],
            "x-enumDescriptions": {
              "money": "Limits the amount of money that a transaction can process on a gateway account. If `money` is chosen, the currency is the report currency.",
              "count": "Limits the total number of transaction can be processed on a gateway account."
            }
          },
          "cap": {
            "description": "Limits the maximum allowed value.\nIf `type` is set to `money`, the currency is the report currency.\n`cap` only applies to approved transactions of type `authorize` or `sale`.",
            "type": "integer",
            "example": 1000
          },
          "usage": {
            "description": "Usage of the gateway account limit during this period.",
            "type": "integer",
            "example": 375,
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "GatewayAccountTimeline": {
        "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": [
              "gateway-account-created",
              "gateway-account-changed",
              "gateway-account-enabled",
              "gateway-account-disabled",
              "gateway-account-down",
              "gateway-account-up",
              "gateway-account-closed",
              "gateway-account-limit-reached",
              "gateway-account-limit-reset",
              "gateway-account-onboarding-completed",
              "gateway-account-onboarding-failed"
            ]
          },
          "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"
          }
        }
      },
      "GatewayAccountFinancialSettings": {
        "type": "object",
        "description": "Financial settings.",
        "required": [
          "settlementSettings"
        ],
        "properties": {
          "settlementSettings": {
            "$ref": "#/components/schemas/SettlementSettings"
          },
          "riskReserveSettings": {
            "description": "Risk reserve settings.\nUse these settings to set up funds reserves before settlement.",
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "filter",
                "bips",
                "period"
              ],
              "properties": {
                "filter": {
                  "description": "Filter that is based on the properties of the transaction and used to determine when to apply the settings.",
                  "minLength": 1,
                  "maxLength": 255,
                  "example": "paymentInstrument.method:payment-card",
                  "type": "string"
                },
                "bips": {
                  "$ref": "#/components/schemas/Bips"
                },
                "period": {
                  "description": "Instruction for calculating the reserve release time.",
                  "$ref": "#/components/schemas/SchedulingMethodDateInterval"
                }
              }
            }
          }
        }
      },
      "DigitalWalletOnboardingApplePay": {
        "type": "object",
        "description": "Register a domain with Apple Pay and associate it with Rebilly.",
        "required": [
          "domain"
        ],
        "properties": {
          "domain": {
            "description": "Domain to register.",
            "type": "string"
          },
          "status": {
            "description": "Status of Apple Pay domain registration.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "failed",
              "registered",
              "already-registered"
            ]
          }
        }
      },
      "GridSegment": {
        "type": "object",
        "required": [
          "data",
          "owner",
          "scope"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the segment.",
            "readOnly": true,
            "maxLength": 50,
            "example": "grd_seg_0YVCNRJW0ADV49TN8BD9X91XB5"
          },
          "owner": {
            "description": "Creator of segment.",
            "readOnly": true,
            "type": "object",
            "properties": {
              "id": {
                "description": "User ID of the creator.",
                "type": "string",
                "$ref": "#/components/schemas/ResourceId"
              },
              "name": {
                "description": "First and last name of the creator.",
                "type": "string"
              }
            }
          },
          "data": {
            "description": "Object that contains a schema that is used to set up the UI for the segment.\nThis schema is built and consumed by the frontend.\nIt includes information such as: segment name, UI settings, and so on.",
            "type": "object",
            "properties": {
              "name": {
                "description": "Name of data grid segment.",
                "type": "string",
                "maxLength": 100
              },
              "columns": {
                "description": "List of columns to display in grid segment.",
                "type": "array",
                "items": {
                  "type": "string",
                  "maxLength": 50
                }
              },
              "filters": {
                "description": "Combination of filters to apply on grid segment data.",
                "example": "averageValue/amount:10;bin:555,2058",
                "type": [
                  "string",
                  "null"
                ]
              },
              "page": {
                "description": "Where to display grid segment: data tables or customer details.",
                "type": "string",
                "enum": [
                  "data-tables",
                  "customer-details"
                ]
              },
              "sort": {
                "type": "string",
                "description": "Column to sort data by.\nTo sort in descending order, prefix with `-`."
              },
              "type": {
                "description": "Data to display in grid segment.",
                "type": "string",
                "enum": [
                  "customers",
                  "invoices",
                  "transactions",
                  "subscriptions",
                  "orders",
                  "api-logs",
                  "coupon-redemptions",
                  "webhook-logs",
                  "tax-logs",
                  "credit-memos",
                  "kyc",
                  "journal-entry",
                  "aml",
                  "payout-requests",
                  "payout-allocations",
                  "payout-request-batches",
                  "organizations",
                  "quotes",
                  "deposit-requests"
                ]
              }
            }
          },
          "isStarred": {
            "description": "Specifies if this segment is starred by the current user.\nStarring a segment marks it as a favorite segment,\nand also adds the segment to a starred folder in the UI.",
            "type": "boolean"
          },
          "isVisible": {
            "description": "Specifies if the segment is visible to the current user.",
            "type": "boolean"
          },
          "userIds": {
            "type": "array",
            "uniqueItems": true,
            "writeOnly": true,
            "description": "List of user IDs with which the segment is shared.\nThis field is used when the `scope` field is set to `shared`.",
            "items": {
              "description": "ID of the user.",
              "$ref": "#/components/schemas/ResourceId"
            }
          },
          "users": {
            "type": "array",
            "uniqueItems": true,
            "description": "List of user details with which this segment is shared.",
            "readOnly": true,
            "items": {
              "type": "object",
              "description": "User details.",
              "properties": {
                "id": {
                  "description": "ID of the user.",
                  "type": "string",
                  "$ref": "#/components/schemas/ResourceId"
                },
                "name": {
                  "description": "First and last name.",
                  "type": "string"
                }
              }
            }
          },
          "scope": {
            "description": "Controls the visibility of the segment.",
            "type": "string",
            "enum": [
              "private",
              "public",
              "shared"
            ],
            "x-enumDescriptions": {
              "private": "Visible only to the owner the segment.",
              "public": "Visible to all in the owner's organization.",
              "shared": "Visible to a specific group of users that are specified in the `userIds` field."
            }
          },
          "systemId": {
            "description": "If the segment is derived from a system segment,\nthis field contains the ID of the related system segment.\nTo provide this field in a request, the `scope` field must be set to `private` .",
            "writeOnly": true,
            "type": "string"
          }
        }
      },
      "Integration": {
        "type": "object",
        "properties": {
          "service": {
            "readOnly": true,
            "description": "Name of the integration service.",
            "type": "string",
            "enum": [
              "google-sheets",
              "intuit-quickbooks"
            ]
          },
          "count": {
            "readOnly": true,
            "type": "integer",
            "minimum": 0,
            "description": "Total number of available rule sets."
          },
          "configurations": {
            "readOnly": true,
            "type": "array",
            "minItems": 0,
            "description": "List of configurations.",
            "items": {
              "type": "object",
              "properties": {
                "labels": {
                  "description": "Labels of the configuration.",
                  "type": "array",
                  "minItems": 0,
                  "items": {
                    "type": "string"
                  }
                },
                "eventType": {
                  "$ref": "#/components/schemas/EventType"
                },
                "title": {
                  "type": "string",
                  "description": "Title of the configuration."
                }
              }
            }
          },
          "_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",
                    "oauth2Connect"
                  ]
                }
              }
            }
          }
        }
      },
      "ValueList": {
        "type": "object",
        "required": [
          "description",
          "values"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the list.",
            "readOnly": true,
            "maxLength": 50,
            "example": "lst_0YVCXVQH84DEF93D8VBTJQ9TGK"
          },
          "version": {
            "description": "Version of the list.",
            "type": "integer",
            "readOnly": true,
            "minimum": 1
          },
          "description": {
            "description": "Description of the list.",
            "type": "string"
          },
          "values": {
            "description": "Values in the list.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "Membership": {
        "type": "object",
        "required": [
          "organization",
          "user"
        ],
        "properties": {
          "organization": {
            "description": "Organization membership.",
            "readOnly": true,
            "type": "object",
            "properties": {
              "id": {
                "description": "ID of the organization.",
                "type": "string",
                "$ref": "#/components/schemas/ResourceId"
              },
              "name": {
                "description": "Name of the organization.",
                "type": "string"
              },
              "createdTime": {
                "$ref": "#/components/schemas/CreatedTime"
              },
              "updatedTime": {
                "$ref": "#/components/schemas/UpdatedTime"
              }
            }
          },
          "user": {
            "description": "Membership user.",
            "readOnly": true,
            "type": "object",
            "properties": {
              "id": {
                "type": "string",
                "description": "ID of the user.",
                "maxLength": 50,
                "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
              },
              "name": {
                "description": "First and last name of the user.",
                "type": "string"
              },
              "email": {
                "description": "Email address of the user.",
                "type": "string",
                "format": "email",
                "maxLength": 100
              }
            }
          },
          "allowedIps": {
            "$ref": "#/components/schemas/AllowedIps"
          },
          "permissions": {
            "description": "Permissions that the user has within the organization.\nUse the wildcard character `*` for full access.",
            "$ref": "#/components/schemas/AclPermissions"
          },
          "isOwner": {
            "description": "Specifies if the user is the owner of the organization.",
            "type": "boolean"
          },
          "isDefault": {
            "description": "Specifies if the organization is the default organization for the user.",
            "type": "boolean",
            "readOnly": true
          },
          "roleIds": {
            "type": "array",
            "description": "Role IDs associated with the user.\nRole IDs specify the roles that the user performs within the organization.\nFor example, the user may be an organization admin.",
            "items": {
              "type": "string"
            }
          },
          "acl": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/Acl"
              }
            ]
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "roles": {
                "type": "array"
              }
            }
          }
        }
      },
      "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": []
                  }
                }
              },
              "annualComplianceScreening": {
                "description": "Settings for annual compliance screening of all active customers.\nWhen enabled, a compliance screening report is generated for every active customer\non the configured month and day each year.",
                "type": "object",
                "properties": {
                  "enabled": {
                    "description": "Specifies whether annual compliance screening is enabled for the organization.",
                    "type": "boolean",
                    "default": false
                  },
                  "monthDay": {
                    "description": "Month and day when annual compliance screening runs, in `MM-DD` format.\nRequired when `enabled` is `true`.\nValid calendar date only. Leap day `02-29` is not allowed.",
                    "type": [
                      "string",
                      "null"
                    ],
                    "pattern": "^(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$",
                    "example": "02-15",
                    "default": null
                  }
                }
              },
              "payoutRequestAllocationOrder": {
                "description": "Default order for auto-allocation of payout requests.\nWhen set, this value is used when a payout request batch does not specify its own allocation order.\nThe order defines which payment instruments are attempted first during auto-allocation.\nMust contain `selected-payment-instrument` exactly once.\nValid values: `payment-card` (payment cards), `alternative-payment-methods` (catch-all for alternative payment methods), `selected-payment-instrument` (customer-requested instrument), or any payment method API name (for example, `paypal`, `Interac-eTransfer`).",
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "string"
                },
                "minItems": 2,
                "maxItems": 25,
                "uniqueItems": true,
                "example": [
                  "payment-card",
                  "alternative-payment-methods",
                  "selected-payment-instrument"
                ]
              }
            }
          },
          "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"
                  ]
                }
              }
            }
          }
        }
      },
      "CountriesUnrestrictedMetadata": {
        "type": "object",
        "title": "Unrestricted",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "unknown",
              "all"
            ]
          },
          "values": {
            "description": "List of supported countries.",
            "type": "array",
            "uniqueItems": true,
            "items": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2,
              "pattern": "^[A-Z]{2}$"
            }
          }
        }
      },
      "CountriesSubsetMetadata": {
        "type": "object",
        "title": "Subset",
        "required": [
          "mode",
          "values"
        ],
        "properties": {
          "mode": {
            "type": "string",
            "enum": [
              "subset"
            ]
          },
          "values": {
            "description": "List of supported countries.",
            "type": "array",
            "minItems": 1,
            "uniqueItems": true,
            "items": {
              "type": "string",
              "minLength": 2,
              "maxLength": 2,
              "pattern": "^[A-Z]{2}$"
            }
          }
        }
      },
      "CountriesMetadata": {
        "type": "object",
        "description": "Countries metadata.",
        "discriminator": {
          "propertyName": "mode",
          "mapping": {
            "unknown": "#/components/schemas/CountriesUnrestrictedMetadata",
            "all": "#/components/schemas/CountriesUnrestrictedMetadata",
            "subset": "#/components/schemas/CountriesSubsetMetadata"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/CountriesUnrestrictedMetadata"
          },
          {
            "$ref": "#/components/schemas/CountriesSubsetMetadata"
          }
        ]
      },
      "CurrenciesUnrestrictedMetadata": {
        "title": "Unrestricted",
        "required": [
          "mode"
        ],
        "properties": {
          "mode": {
            "description": "Specifies how the currencies are compared.",
            "type": "string",
            "enum": [
              "unknown",
              "all"
            ]
          },
          "values": {
            "description": "List of supported currencies.",
            "type": "array",
            "uniqueItems": true,
            "items": {
              "$ref": "#/components/schemas/CurrencyCode"
            }
          }
        }
      },
      "CurrenciesSubsetMetadata": {
        "title": "Subset",
        "required": [
          "mode",
          "values"
        ],
        "properties": {
          "mode": {
            "description": "Specifies how the currencies are compared.",
            "type": "string",
            "enum": [
              "subset"
            ]
          },
          "values": {
            "description": "List of supported currencies.",
            "type": "array",
            "minItems": 1,
            "uniqueItems": true,
            "items": {
              "$ref": "#/components/schemas/CurrencyCode"
            }
          }
        }
      },
      "PaymentMethodMetadata": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "apiName",
          "name",
          "summary",
          "description",
          "countries"
        ],
        "properties": {
          "apiName": {
            "description": "Name of the payment method returned in the API response.",
            "type": "string",
            "pattern": "^[\\w\\. -]+$"
          },
          "name": {
            "description": "Name of the payment method.",
            "type": "string",
            "pattern": "^[\\w\\. -]+$"
          },
          "landscapeLogo": {
            "description": "URL for the payment method logo optimized for landscape orientation.",
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "portraitLogo": {
            "description": "URL for the payment method logo optimized for portrait orientation.",
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "summary": {
            "description": "Short description of the payment method.\nThis field supports Markdown.",
            "type": "string"
          },
          "description": {
            "description": "Detailed information about the payment method.\nThis field supports Markdown.",
            "type": "string"
          },
          "countries": {
            "$ref": "#/components/schemas/CountriesMetadata"
          },
          "storefrontEnabled": {
            "type": "boolean",
            "default": false
          },
          "isSingleUse": {
            "description": "Specifies that the payment method requires the customer to review\nand confirm payment options and terms specific to the purchase every time.\nThe merchant cannot assist the customer in adding this payment method during the checkout process.\nThe customer must complete the process independently.",
            "type": "boolean",
            "default": false
          },
          "supportedCurrencies": {
            "type": "object",
            "description": "List of currencies that are supported by the payment method.",
            "required": [
              "mode"
            ],
            "discriminator": {
              "propertyName": "mode",
              "mapping": {
                "unknown": "#/components/schemas/CurrenciesUnrestrictedMetadata",
                "all": "#/components/schemas/CurrenciesUnrestrictedMetadata",
                "subset": "#/components/schemas/CurrenciesSubsetMetadata"
              }
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/CurrenciesUnrestrictedMetadata"
              },
              {
                "$ref": "#/components/schemas/CurrenciesSubsetMetadata"
              }
            ]
          },
          "relevantBusinessModels": {
            "description": "Business models that are relevant to the payment method.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "B2B",
                "B2C"
              ]
            }
          },
          "type": {
            "description": "Type of payment method.\nFor example, wallet, bank transfer, credit card.",
            "type": [
              "string",
              "null"
            ]
          },
          "recurringPayments": {
            "description": "Specifies whether the payment method supports recurring payments.",
            "type": "boolean",
            "default": false
          },
          "refunds": {
            "description": "Specifies whether the payment method supports refunds.",
            "type": "boolean",
            "default": false
          },
          "disputes": {
            "description": "Specifies whether the payment method supports disputes.",
            "type": "boolean",
            "default": false
          },
          "ux": {
            "description": "List of steps that describes the user experience during the payment flow.",
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "description"
              ],
              "properties": {
                "description": {
                  "type": "string"
                }
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "PaymentGatewayMetadata": {
        "type": "object",
        "additionalProperties": false,
        "required": [
          "apiName",
          "logo",
          "paymentMethods",
          "merchantCountries",
          "currencies"
        ],
        "properties": {
          "apiName": {
            "description": "Name of the payment gateway returned in the API response.",
            "type": "string",
            "pattern": "^[\\w\\. -]+$"
          },
          "otherNames": {
            "description": "List of former names associated with the payment gateway.\nGateways may change their names or may also be known by other names.\nTracking this list may help customer support and developers.",
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "name"
              ],
              "properties": {
                "name": {
                  "description": "Alternative or former name of the payment gateway.",
                  "type": "string"
                },
                "description": {
                  "description": "Short description about this name.",
                  "type": "string"
                },
                "logo": {
                  "description": "URL for the logo used with this name.",
                  "type": "string",
                  "format": "uri"
                }
              }
            }
          },
          "logo": {
            "description": "URL for the logo of the gateway.",
            "type": "string",
            "format": "uri"
          },
          "summary": {
            "description": "Short description of the payment gateway.\nThis field supports Markdown.",
            "type": [
              "string",
              "null"
            ]
          },
          "homepage": {
            "description": "URL of the payment gateway home page.",
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "externalDocs": {
            "description": "List of links to the documentation of the payment gateway.\nFor example, online API guides provided by gateways or a link to the documents in Google Drive.",
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": false,
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "description": "URL of the target documentation.\nThis value must be in URL format.",
                  "type": "string",
                  "format": "uri"
                },
                "description": {
                  "description": "Short description of the target documentation.",
                  "type": "string"
                }
              }
            }
          },
          "publishedPricing": {
            "description": "Pricing description for the payment gateway, if pricing is published.",
            "type": [
              "string",
              "null"
            ]
          },
          "setupInstructions": {
            "description": "Special gateway account set up instructions for merchants.\nFor example: After adding this gateway account,\nset the IPN to `//example.com/ipns/{gateway-name}/{organization-id}` by contacting your account rep.",
            "type": [
              "string",
              "null"
            ]
          },
          "paymentMethods": {
            "description": "Array of supported payment methods.\nFor example, `payment-card` and `bitcoin`.",
            "type": "array",
            "items": {
              "description": "Name of the payment method returned in the API response.",
              "type": "string",
              "pattern": "^[\\w\\. -]+$"
            },
            "minLength": 1
          },
          "cardBrands": {
            "description": "Array of supported card-brands.\nIf the payment gateway supports payment cards.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PaymentCardBrand"
            }
          },
          "merchantCountries": {
            "$ref": "#/components/schemas/CountriesMetadata"
          },
          "currencies": {
            "type": "object",
            "description": "Currencies metadata.",
            "required": [
              "mode"
            ],
            "discriminator": {
              "propertyName": "mode",
              "mapping": {
                "unknown": "#/components/schemas/CurrenciesUnrestrictedMetadata",
                "all": "#/components/schemas/CurrenciesUnrestrictedMetadata",
                "subset": "#/components/schemas/CurrenciesSubsetMetadata"
              }
            },
            "oneOf": [
              {
                "$ref": "#/components/schemas/CurrenciesUnrestrictedMetadata"
              },
              {
                "$ref": "#/components/schemas/CurrenciesSubsetMetadata"
              }
            ]
          },
          "operations": {
            "description": "Array of operations that are supported by the payment gateway.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "verify",
                "auth",
                "capture",
                "sale",
                "refund",
                "query",
                "credit",
                "3DS1",
                "3DS2",
                "checkCredentials"
              ]
            }
          },
          "supported3dsServers": {
            "description": "Array of supported 3DS-servers.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "supportedPaymentInstrumentSetupInstructions": {
            "description": "Array of set up instructions that are supported by the payment gateway.",
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "do-nothing",
                "authorize",
                "authorize-and-void",
                "sca"
              ],
              "x-enumDescriptions": {
                "authorize": "Creates an `authorize` transaction in the amount or currency of the request.\nThis is used when a gateway account is configured for Strong Customer Authentication (SCA).",
                "authorize-and-void": "Creates an `authorize` transaction in the amount and currency of the request,\nfollowed by a `void`, if the `authorize` is approved.\nThis is used when a gateway account is configured for Strong Customer Authentication (SCA).",
                "sca": "Uses Strong Customer Authentication (SCA) without an `authorize` transaction.\nSCA includes 3DS, and specific wallet behavior,\nsuch as setting up a billing agreement with PayPal.",
                "do-nothing": "Does nothing except return an approved `setup` transaction.\nThis is the default behavior."
              }
            }
          },
          "reconciliationSupport": {
            "description": "Specifies whether transactions can be reconciled.",
            "type": "boolean",
            "default": false
          },
          "disputeSupport": {
            "description": "Specifies whether dispute data entry can be automated with an API or SFTP access.\nFor example, chargeback, retrieval, or TC-40 disputes.",
            "type": "boolean",
            "default": false
          },
          "offsite": {
            "description": "Specifies whether offsite interaction is required.\nFor example, 3DS, PayPal login, or completing something in a store.",
            "type": "boolean",
            "default": false
          },
          "ipn": {
            "type": [
              "object",
              "null"
            ],
            "description": "Describes the Instant Payment Notification (IPN) that a payment gateway supports.\nIf this value is null, IPN is not supported.",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "description": "Type of supported Instant Payment Notification (IPN).\nIf this value is null, IPN is not supported.",
                "type": "string",
                "enum": [
                  "static",
                  "dynamic"
                ]
              },
              "verificationMethod": {
                "description": "Method used to verify that the data in the IPN call can be trusted.",
                "type": "string",
                "enum": [
                  "query",
                  "signature"
                ],
                "default": "query"
              }
            }
          },
          "recommendedWaitingApprovalTtl": {
            "description": "Recommended Time To Live (TTL) before abandoning the transaction.",
            "type": "integer",
            "default": 3600,
            "minimum": 299,
            "maximum": 16777216
          },
          "credentials": {
            "type": "object",
            "description": "List of credentials that are required to use the payment gateway.",
            "additionalProperties": false,
            "properties": {
              "required": {
                "description": "List of required credentials.",
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          "_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"
        ]
      },
      "PayoutRequestSplitReason": {
        "type": "string",
        "description": "Reason for splitting the payout request.",
        "enum": [
          "payment-instrument-limit",
          "processor-limit",
          "risk-review",
          "compliance-review",
          "partial-processing",
          "operational-reconciliation",
          "other"
        ]
      },
      "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"
          },
          "gatewayPayoutInstruction": {
            "description": "Payout configuration of the gateway account that processes this allocation.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "all",
              "covered-payout",
              "approved-payment",
              "none",
              null
            ],
            "x-enumDescriptions": {
              "all": "Payout any amount from this gateway.",
              "covered-payout": "Payout from this gateway if it previously processed a payment for the same,\nor a greater, amount.",
              "approved-payment": "Payout any amount from this gateway if it processed an earlier payment.\nThe customer must have a previously approved transaction,\nin the same currency, on this gateway.",
              "none": "Do not allow any payouts with this gateway."
            },
            "example": "covered-payout"
          },
          "amount": {
            "description": "Amount allocated to this payment instrument.",
            "type": "number",
            "format": "double",
            "x-type": "Money"
          },
          "exposureAmount": {
            "description": "Total approved sales and captures minus approved payouts for the customer,\ngateway account, and payment instrument, in the allocation currency.",
            "readOnly": true,
            "type": "number",
            "format": "double",
            "x-type": "Money",
            "example": 2
          },
          "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",
              "waiting-completion",
              "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.",
              "waiting-completion": "Allocation transaction is processing asynchronously and has not yet reached a terminal state.",
              "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,
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "abandoned",
              "approved",
              "canceled",
              "declined",
              "unknown",
              null
            ]
          },
          "transactionStatus": {
            "description": "Status of the transaction created for this allocation, if applicable.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "completed",
              "conn-error",
              "disputed",
              "never-sent",
              "offsite",
              "partially-refunded",
              "pending",
              "refunded",
              "sending",
              "timeout",
              "voided",
              "waiting-approval",
              "waiting-capture",
              "waiting-gateway",
              "waiting-refund",
              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"
                  ]
                }
              }
            }
          }
        }
      },
      "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",
              "system"
            ]
          },
          "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"
          },
          "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": "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",
              "ready",
              "approved",
              "in-progress",
              "fulfilled",
              "canceled",
              "split",
              "merged"
            ],
            "x-enumDescriptions": {
              "pending": "Request was created by the customer and is in a pending state for the [configured pending period](https://www.rebilly.com/catalog/all/websites/putwebsite#websites/putwebsite/t=request&path=settings/payoutrequest/pendingperiodhours), unless it is marked as ready by a member of your organization.\nWhen automatic readiness is enabled, the payout request transitions to the `ready` state after the pending period elapses and the configured [transition time](https://www.rebilly.com/catalog/all/websites/putwebsite#websites/putwebsite/t=request&path=settings/payoutrequest/automaticreadinesstime) is reached.\nDepending on the configured [`automaticReadinessEnabled`](https://www.rebilly.com/catalog/all/websites/putwebsite#websites/putwebsite/t=request&path=settings/payoutrequest/automaticreadinessenabled) setting, this may be the initial status assigned to new payout requests, or this status may not be used.",
              "ready": "Request was created by the customer and is ready for review.\nDepending on the configured [`automaticReadinessEnabled`](https://www.rebilly.com/catalog/all/websites/putwebsite#websites/putwebsite/t=request&path=settings/payoutrequest/automaticreadinessenabled) setting, this may be the initial status assigned to new payout requests.",
              "approved": "Request was reviewed, approved, and is ready for processing.",
              "in-progress": "Request has allocations and is being processed.",
              "fulfilled": "Request is fully paid out.",
              "canceled": "Request is canceled by merchant or customer.",
              "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.\n\nWhen blocked, the payout request cannot transition to `ready`, `approved`, `in-progress`, `merged`, `split`, or `canceled`.\nAllocation creation, allocation processing, and cancellation of pending allocations are also prevented.\nA blocked payout request can still transition to the `fulfilled` status if allocation processing starts before the payout request is blocked.",
            "type": "boolean",
            "readOnly": false,
            "example": false
          },
          "blockReason": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayoutRequestBlockReason"
              },
              {
                "type": "null"
              }
            ]
          },
          "splitReason": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/PayoutRequestSplitReason"
              },
              {
                "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 payout request allocations for the payout request.",
            "readOnly": true,
            "items": {
              "$ref": "#/components/schemas/PayoutRequestAllocation"
            }
          },
          "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",
                    "splitFrom",
                    "mergedInto",
                    "paymentInstrument"
                  ]
                }
              }
            }
          }
        }
      },
      "PayoutRequestSplit": {
        "type": "object",
        "required": [
          "amounts",
          "splitReason"
        ],
        "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
            ]
          },
          "splitReason": {
            "$ref": "#/components/schemas/PayoutRequestSplitReason"
          },
          "splitDescription": {
            "description": "Additional description for splitting the payout request.",
            "type": [
              "string",
              "null"
            ],
            "maxLength": 255
          }
        }
      },
      "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"
          },
          "totalCount": {
            "description": "Total number of payout requests in the batch.",
            "type": "integer",
            "readOnly": true,
            "minimum": 0,
            "example": 10
          },
          "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"
          },
          "allocationOrder": {
            "description": "Order for auto-allocation of payout requests in this batch.\nWhen set, this field overrides the organization-level allocation order during batch auto-allocation.\nMust contain `selected-payment-instrument` exactly once.\nValid values: `payment-card` (payment cards), `alternative-payment-methods` (catch-all for alternative payment methods), `selected-payment-instrument` (customer-requested instrument), or any payment method API name (for example, `paypal`, `Interac-eTransfer`).",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            },
            "minItems": 2,
            "maxItems": 25,
            "uniqueItems": true,
            "example": [
              "paypal",
              "Interac-eTransfer",
              "payment-card",
              "alternative-payment-methods",
              "selected-payment-instrument"
            ]
          },
          "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"
                  ]
                }
              }
            }
          }
        }
      },
      "Session": {
        "type": "object",
        "required": [
          "permissions"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the session.",
            "readOnly": true,
            "maxLength": 50,
            "example": "jwt_0YV7DEJX80CDRAKVTV478ZNJDR"
          },
          "token": {
            "description": "Authentication token of the session.",
            "type": "string"
          },
          "permissions": {
            "description": "Permissions of the session.\nSee the format in example.\nUse wildcard `*` for full access.",
            "$ref": "#/components/schemas/AclPermissions"
          },
          "userId": {
            "type": "string",
            "description": "ID of the user.",
            "readOnly": true,
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "expiredTime": {
            "description": "Date and time when the session expired.\nThe default value is one hour after the `createdTime` value.",
            "type": "string",
            "format": "date-time"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "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": [
                "quantity"
              ],
              "properties": {
                "planId": {
                  "type": "string",
                  "description": "ID of the plan.\nEither this field or the `plan` object must be provided.\nUse `plan.id` instead.",
                  "maxLength": 50,
                  "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X",
                  "deprecated": true
                },
                "plan": {
                  "description": "Details of the plan.\nEither this object or the deprecated `planId` field must be provided.",
                  "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
                }
              },
              "oneOf": [
                {
                  "required": [
                    "plan"
                  ],
                  "properties": {
                    "planId": {
                      "not": {}
                    }
                  }
                },
                {
                  "required": [
                    "planId"
                  ],
                  "properties": {
                    "plan": {
                      "not": {}
                    }
                  }
                },
                {
                  "required": [
                    "plan",
                    "planId"
                  ]
                }
              ]
            }
          },
          "billingAddress": {
            "description": "Billing address details.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "deliveryAddress": {
            "description": "Delivery address details.",
            "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"
          }
        }
      },
      "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",
          "data-export-failed",
          "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",
          "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-partially-refunded",
          "transaction-refunded",
          "transaction-timeout-resolved",
          "transaction-voided",
          "trial-usage-limit-reached",
          "waiting-gateway-transaction-completed"
        ]
      },
      "GlobalWebhook": {
        "type": "object",
        "required": [
          "method",
          "url",
          "credentialHash"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the webhook.",
            "readOnly": true,
            "maxLength": 50,
            "example": "hook_0YVBG8S0K0DG59J6S3RMN9K452"
          },
          "eventsFilter": {
            "description": "Event types that trigger the webhook.\nIf empty, all event types trigger the webhook.",
            "type": "array",
            "default": [],
            "items": {
              "$ref": "#/components/schemas/GlobalEventType"
            }
          },
          "status": {
            "x-basic": true,
            "type": "string",
            "default": "active",
            "enum": [
              "active",
              "inactive"
            ]
          },
          "method": {
            "type": "string",
            "x-basic": true,
            "enum": [
              "GET",
              "POST",
              "PUT",
              "PATCH",
              "DELETE"
            ]
          },
          "url": {
            "description": "URL that receives requests when a specified event occurs.",
            "type": "string",
            "format": "uri"
          },
          "headers": {
            "description": "Headers to include in the webhook request.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Header to include in the webhook request.",
              "properties": {
                "name": {
                  "description": "Name of the header.",
                  "type": "string"
                },
                "status": {
                  "description": "Status of the header.",
                  "type": "string",
                  "default": "active",
                  "enum": [
                    "active",
                    "inactive"
                  ]
                },
                "value": {
                  "description": "Value of the header.",
                  "type": "string",
                  "example": "value1"
                }
              },
              "required": [
                "name",
                "value"
              ]
            }
          },
          "credentialHash": {
            "type": "string",
            "description": "Credential hash for authenticating requests to the URL."
          },
          "body": {
            "description": "Webhook request body.\nIf this value is `null`,\nthe default payload for the specified event is used.\nTemplate placeholders are permitted.\n\nInvalid placeholders render as empty strings.\nFor example, `Hello {{invalid.placeholder}}!` is rendered as `Hello !`.\n\nFor more information,\nsee [Placeholders](https://www.rebilly.com/docs/automations/email-notifications/#placeholders).",
            "type": [
              "string",
              "null"
            ]
          },
          "filter": {
            "description": "Filter that determines whether to send the webhook.\nThis field requires a special format.\nUse `,` for multiple allowed values.\nUse `;` for multiple fields.\n\nFor more information,\nsee [Using filters](https://www.rebilly.com/docs/dev-docs/search-filters).",
            "type": [
              "string",
              "null"
            ]
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "x-label": "Last update time",
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "Profile": {
        "type": "object",
        "properties": {
          "id": {
            "description": "ID of the user.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "email": {
            "description": "Email address of the user.",
            "readOnly": true,
            "type": "string",
            "format": "email",
            "maxLength": 100
          },
          "firstName": {
            "description": "User's first name.",
            "readOnly": true,
            "type": "string"
          },
          "lastName": {
            "description": "User's last name.",
            "readOnly": true,
            "type": "string"
          },
          "businessPhone": {
            "description": "User's business phone number.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ]
          },
          "mobilePhone": {
            "description": "User's mobile phone number.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ]
          },
          "permissions": {
            "description": "Permissions that the user has within organizations.\nUse the wildcard character `*` for full access.",
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AclPermissions"
              }
            ]
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "availableCurrencies": {
            "type": "array",
            "description": "Array of reporting currencies that are enabled for the merchant.",
            "readOnly": true,
            "items": {
              "type": "string"
            }
          },
          "reportingCurrency": {
            "description": "User's currency code in ISO 4217 format.\nThis value is used for reports.",
            "type": "string",
            "readOnly": true
          },
          "loginTime": {
            "description": "Date and time when the user last logged in.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "status": {
            "description": "Status of the user account.",
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "pending-confirmation"
            ],
            "readOnly": true
          },
          "country": {
            "description": "User's country of residence in ISO 3166 alpha-2 country code.\nFor examples, see [ISO.org](https://www.iso.org/obp/ui/#search/code/).",
            "readOnly": true,
            "type": "string"
          },
          "preferences": {
            "description": "User preferences, such as: timezone, language, and more.\nThis is an object with custom properties.",
            "type": [
              "object",
              "null"
            ]
          },
          "hasPermissionsEmulation": {
            "type": "boolean",
            "description": "Specifies if the current user session has permissions emulation enabled.",
            "readOnly": true
          },
          "displayName": {
            "type": "string",
            "description": "User's full display name.",
            "readOnly": true
          },
          "hash": {
            "type": "string",
            "description": "Unique hash value that represents the user.",
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "ProfileMfa": {
        "type": "object",
        "properties": {
          "status": {
            "description": "Status of Multi-Factor Authentication (MFA) enrollment.",
            "type": "string",
            "enum": [
              "active",
              "inactive"
            ]
          },
          "type": {
            "description": "Type of MFA enrollment.\nType `duo` cannot be updated or deleted.\nIf you need to reset your Duo MFA, [Contact support](https://www.rebilly.com/support/).",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "duo",
              "otp",
              null
            ]
          },
          "lastAuthTime": {
            "description": "Date and time when MFA verification is most recently passed.\nTo disable MFA, no more than 10 minutes must elapse between this value and the request to disable MFA.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "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",
                    "enrollment"
                  ]
                }
              }
            }
          }
        }
      },
      "Role": {
        "type": "object",
        "required": [
          "name",
          "acl"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the role.",
            "maxLength": 50,
            "example": "role_0YVDN2J11HDMX9N8X7DCB4CMX2"
          },
          "name": {
            "type": "string",
            "description": "Name of the user role.",
            "minLength": 1,
            "maxLength": 50
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Description of the role.",
            "maxLength": 65535
          },
          "acl": {
            "$ref": "#/components/schemas/Acl"
          },
          "allowedIps": {
            "$ref": "#/components/schemas/AllowedIps"
          },
          "seniorIds": {
            "type": "array",
            "description": "List of role IDs where this role is used.\nFor example, a role called `user` may be used in the `admin` and `manager` roles.",
            "readOnly": true,
            "items": {
              "type": "string"
            }
          },
          "juniorIds": {
            "type": "array",
            "description": "List of role IDs that are included in this role.\nFor example, a role called `admin` may include the `user` and `manager` roles.",
            "items": {
              "type": "string"
            }
          },
          "usersCount": {
            "type": "integer",
            "readOnly": true,
            "description": "Number of users assigned to this role."
          },
          "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",
                    "seniorRoles",
                    "juniorRoles"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "juniors": {
                "type": "array"
              }
            }
          }
        }
      },
      "SendThroughAttribution": {
        "type": "object",
        "description": "Email notification sent through attribution.",
        "readOnly": true,
        "properties": {
          "eventType": {
            "$ref": "#/components/schemas/EventType"
          },
          "actionId": {
            "type": "string",
            "format": "uuid",
            "description": "Action ID of the email notification."
          },
          "versionId": {
            "type": "string",
            "format": "uuid",
            "description": "Version ID of the email notification."
          },
          "sent": {
            "type": "integer",
            "minimum": 0,
            "description": "Number of email notifications that have been sent."
          },
          "goal": {
            "type": "integer",
            "minimum": 0,
            "description": "Target number of email notifications to send."
          }
        }
      },
      "Status": {
        "type": "object",
        "properties": {
          "status": {
            "description": "Status of the Rebilly API.\nIf the API is operational, this value is `ok`.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "ok"
            ]
          },
          "time": {
            "description": "Current date and time.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "release": {
            "description": "Current release version of the API.",
            "type": "string"
          }
        }
      },
      "ApiTracking": {
        "type": "object",
        "description": "API request tracking.",
        "readOnly": true,
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ResourceId"
          },
          "status": {
            "type": "integer",
            "x-sortable": true,
            "description": "Response code of the HTTP request."
          },
          "url": {
            "type": "string",
            "x-basic": true,
            "x-sortable": true,
            "description": "URL of the HTTP request."
          },
          "route": {
            "type": "string",
            "x-sortable": true,
            "description": "API request route.",
            "example": "/customers/{param}"
          },
          "method": {
            "type": "string",
            "description": "HTTP method of the API request.",
            "enum": [
              "HEAD",
              "GET",
              "POST",
              "PUT",
              "DELETE",
              "PATCH"
            ],
            "x-basic": true
          },
          "request": {
            "type": "string",
            "x-sortable": true,
            "description": "Request body of the HTTP request."
          },
          "response": {
            "type": "string",
            "x-sortable": true,
            "description": "Response body of the HTTP request."
          },
          "requestHeaders": {
            "$ref": "#/components/schemas/HttpHeaders"
          },
          "responseHeaders": {
            "$ref": "#/components/schemas/HttpHeaders"
          },
          "user": {
            "type": "object",
            "description": "User who made the request.",
            "readOnly": true,
            "properties": {
              "userId": {
                "x-sortable": true,
                "type": "string",
                "description": "ID of the user.",
                "maxLength": 50,
                "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
              },
              "apiKeyId": {
                "type": "string",
                "description": "ID of the API tracking log.",
                "maxLength": 50,
                "example": "api_key_0YV7JQMY6ED2FBE58BMFHBWBZH"
              },
              "email": {
                "description": "Email address of the user.",
                "type": "string",
                "format": "email",
                "x-sortable": true
              },
              "firstName": {
                "description": "First name of the user.",
                "type": "string",
                "x-sortable": true
              },
              "lastName": {
                "description": "Last name of the user.",
                "type": "string",
                "x-sortable": true
              },
              "ipAddress": {
                "type": "string",
                "x-sortable": true,
                "deprecated": true,
                "description": "Client IP address.",
                "format": "ipv4"
              },
              "userAgent": {
                "description": "Software that is acting on behalf of the user.",
                "type": "string",
                "x-sortable": true
              },
              "fingerprint": {
                "description": "User's device fingerprint hash.\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.",
                "type": "string",
                "x-sortable": true
              },
              "isSupport": {
                "description": "Specifies if the API request is completed by a Rebilly Support Team member.",
                "type": "boolean",
                "x-sortable": true
              }
            }
          },
          "ipAddress": {
            "type": "string",
            "x-basic": true,
            "description": "Client IP address."
          },
          "relatedResourceIds": {
            "type": "array",
            "description": "IDs of related resources.",
            "readOnly": true,
            "items": {
              "type": "string"
            },
            "example": [
              "in_0YVF9605RKC62BP14NE2R7V2XT",
              "cus_0YV7DDSDD1C8DA64KHH2W33CPF"
            ]
          },
          "duration": {
            "type": "integer",
            "x-sortable": true,
            "x-basic": true,
            "description": "Request duration in milliseconds."
          },
          "organizationId": {
            "$ref": "#/components/schemas/OrganizationId"
          },
          "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": {
              "organization": {
                "type": "object"
              }
            }
          }
        }
      },
      "TaxTracking": {
        "type": "object",
        "description": "Tax service tracking logs.",
        "readOnly": true,
        "properties": {
          "id": {
            "$ref": "#/components/schemas/ResourceId"
          },
          "status": {
            "type": "integer",
            "x-sortable": true,
            "description": "Response code of the HTTP request."
          },
          "duration": {
            "type": "integer",
            "x-sortable": true,
            "description": "Duration of the HTTP request in milliseconds."
          },
          "initiatedTime": {
            "description": "Date and time the HTTP request is initiated.",
            "x-sortable": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "url": {
            "type": "string",
            "x-sortable": true,
            "description": "URL of the tax service endpoint."
          },
          "method": {
            "type": "string",
            "x-sortable": true,
            "description": "Method of the HTTP request.",
            "example": "POST"
          },
          "request": {
            "type": "string",
            "description": "Request body of the HTTP request."
          },
          "response": {
            "type": "string",
            "description": "Response body of the HTTP request."
          },
          "requestHeaders": {
            "$ref": "#/components/schemas/HttpHeaders"
          },
          "responseHeaders": {
            "$ref": "#/components/schemas/HttpHeaders"
          },
          "entityId": {
            "type": "string",
            "x-sortable": true,
            "description": "ID of the resource associated with the tax service request."
          },
          "organizationId": {
            "x-sortable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/OrganizationId"
              }
            ]
          },
          "taxService": {
            "type": "string",
            "x-sortable": true,
            "description": "Name of the tax service used for the request.",
            "enum": [
              "taxjar",
              "avalara"
            ]
          },
          "taxServiceCredentialSource": {
            "type": "string",
            "x-sortable": true,
            "description": "Source of the credentials that are used to send or retrieve data.",
            "enum": [
              "default",
              "merchant"
            ]
          },
          "customerId": {
            "type": "string",
            "description": "ID of the customer associated with the tax service request."
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "WebhookTracking": {
        "type": "object",
        "description": "Webhook tracking log.\nThis log contains information about a webhook request and its response.",
        "readOnly": true,
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the webhook tracking log.",
            "maxLength": 50,
            "example": "hook_log_01HXC7HJ1V2FNJD1R396WCG2HB"
          },
          "status": {
            "type": "integer",
            "x-sortable": true,
            "description": "Response code of the webhook request."
          },
          "duration": {
            "type": "integer",
            "x-sortable": true,
            "description": "Duration of the webhook request in milliseconds."
          },
          "initiatedTime": {
            "description": "Date and time when the webhook is initiated.",
            "x-sortable": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "url": {
            "type": "string",
            "x-sortable": true,
            "description": "URL that receives the webhook."
          },
          "method": {
            "type": "string",
            "x-sortable": true,
            "description": "HTTP method for sending the webhook.",
            "example": "POST"
          },
          "request": {
            "type": "string",
            "description": "Payload of the webhook request."
          },
          "response": {
            "type": "string",
            "description": "Response body from the webhook URL."
          },
          "requestHeaders": {
            "$ref": "#/components/schemas/HttpHeaders"
          },
          "responseHeaders": {
            "$ref": "#/components/schemas/HttpHeaders"
          },
          "entityId": {
            "type": "string",
            "x-sortable": true,
            "description": "ID of the main entity related to the event type."
          },
          "organizationId": {
            "x-sortable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/OrganizationId"
              }
            ]
          },
          "eventType": {
            "x-sortable": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/GlobalEventType"
              }
            ]
          },
          "source": {
            "type": "string",
            "x-sortable": true,
            "description": "Source that triggered the webhook.",
            "enum": [
              "webhooks",
              "rules"
            ]
          },
          "attempt": {
            "type": "integer",
            "x-sortable": true,
            "description": "Number of attempts to send the webhook."
          },
          "sentTime": {
            "x-sortable": true,
            "description": "Date and time when the webhook is sent.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "x-sortable": true,
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "x-sortable": true,
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "User": {
        "type": "object",
        "required": [
          "email",
          "firstName",
          "lastName"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the user.",
            "readOnly": true,
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "email": {
            "description": "Email address of the user.",
            "type": "string",
            "format": "email",
            "maxLength": 80
          },
          "firstName": {
            "description": "User's first name.",
            "type": "string",
            "minLength": 1,
            "maxLength": 45
          },
          "lastName": {
            "description": "User's last name.",
            "type": "string",
            "minLength": 1,
            "maxLength": 45
          },
          "businessPhone": {
            "description": "User's business phone number.",
            "minLength": 1,
            "maxLength": 20,
            "type": [
              "string",
              "null"
            ]
          },
          "mobilePhone": {
            "description": "User's mobile phone number.",
            "minLength": 1,
            "maxLength": 20,
            "type": [
              "string",
              "null"
            ]
          },
          "permissions": {
            "description": "Permissions that the user has within organizations.\nUse the wildcard character `*` for full access.",
            "$ref": "#/components/schemas/AclPermissions"
          },
          "computedPermissions": {
            "description": "All user permissions and roles.\nUse these permissions to emulate the user.",
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/AclPermissions"
              }
            ]
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "loginTime": {
            "description": "Date and time when the user last logged in.",
            "type": [
              "string",
              "null"
            ],
            "format": "date-time",
            "readOnly": true
          },
          "reportingCurrency": {
            "description": "User's currency code in ISO 4217 format.\nThis value is used for reports.",
            "readOnly": true,
            "type": "string"
          },
          "availableCurrencies": {
            "type": "array",
            "description": "Array of reporting currencies that are enabled for the merchant.",
            "readOnly": true,
            "items": {
              "type": "string"
            }
          },
          "status": {
            "description": "Status of the user's account.",
            "type": "string",
            "enum": [
              "active",
              "inactive",
              "pending-confirmation"
            ],
            "readOnly": true
          },
          "country": {
            "description": "User'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"
          },
          "preferences": {
            "description": "User preferences, such as: timezone, language, and more.\nThis is an object with custom properties.",
            "type": [
              "object",
              "null"
            ]
          },
          "roleIds": {
            "type": "array",
            "description": "Role IDs associated with the user.\nRole IDs specify the roles that the user performs within the organization.\nFor example, the user may be an organization admin.",
            "items": {
              "type": "string"
            }
          },
          "allowedIps": {
            "$ref": "#/components/schemas/AllowedIps"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "CustomerInformation": {
        "type": "object",
        "properties": {
          "currency": {
            "description": "Currency code in ISO 4217 format.",
            "minLength": 3,
            "maxLength": 3,
            "example": "USD",
            "readOnly": true,
            "type": "string"
          },
          "refundsAmount": {
            "description": "Total amount of all refunded transactions.",
            "readOnly": true,
            "type": "number",
            "format": "double"
          },
          "revenueAmount": {
            "description": "Total amount of all approved sales and captures.",
            "readOnly": true,
            "type": "number",
            "format": "double"
          },
          "disputesAmount": {
            "description": "Total amount of all disputed transactions.",
            "readOnly": true,
            "type": "number",
            "format": "double"
          }
        }
      },
      "DashboardTile": {
        "type": "object",
        "required": [
          "metric"
        ],
        "properties": {
          "metric": {
            "type": "string",
            "description": "Metric displayed in the tile.\nPublicly supported values are defined in `DashboardMetric`.\nAdditional values are accepted."
          },
          "title": {
            "type": [
              "string",
              "null"
            ],
            "description": "Custom tile title.",
            "minLength": 2,
            "maxLength": 36
          },
          "description": {
            "type": [
              "string",
              "null"
            ],
            "description": "Custom tile description.",
            "minLength": 2,
            "maxLength": 48
          },
          "dateRange": {
            "type": "string",
            "description": "Date range of the tile, in ISO-8601 interval format, extended with `NOW` and `NOW-P*` values for relative dates.\nWhen omitted, the dashboard `dateRange` is used.\nSupported formats:\n\n- Start and end: `2024-01-01T00:00:00Z/2024-02-01T00:00:00Z`.\n- Start and duration `2024-01-01T00:00:00Z/P1M`.\n- Duration and end: `P1M/2024-02-01T00:00:00Z`.\n- Now and duration: `NOW-P1M/NOW`. This format represents the last month.\n- Month before last month: `NOW-P2M/NOW-P1M`."
          },
          "columnsWidth": {
            "type": "integer",
            "description": "Number of dashboard columns that the tile occupies.",
            "minimum": 1,
            "maximum": 2,
            "default": 1
          }
        }
      },
      "DashboardTab": {
        "type": "object",
        "required": [
          "title",
          "tiles"
        ],
        "properties": {
          "title": {
            "type": "string",
            "description": "Title of the dashboard tab.",
            "minLength": 2,
            "maxLength": 12,
            "example": "KYC"
          },
          "tiles": {
            "type": "array",
            "description": "List of tiles displayed on the dashboard tab.",
            "maxItems": 20,
            "items": {
              "$ref": "#/components/schemas/DashboardTile"
            }
          },
          "preset": {
            "type": [
              "string",
              "null"
            ],
            "description": "Specifies which preset the tab is associated with.\nThe preset is independent of the tiles configured on the tab.",
            "enum": [
              "Payments",
              "Billing",
              "KYC"
            ]
          }
        }
      },
      "ProfileDashboard": {
        "type": "object",
        "required": [
          "tabs"
        ],
        "properties": {
          "dateRange": {
            "type": "string",
            "description": "Date range of the dashboard, in ISO-8601 interval format, extended with `NOW` and `NOW-P*` values for relative dates.\nThis range applies to every tile that does not define its own `dateRange`.\nSupported formats:\n\n- Start and end: `2024-01-01T00:00:00Z/2024-02-01T00:00:00Z`.\n- Start and duration `2024-01-01T00:00:00Z/P1M`.\n- Duration and end: `P1M/2024-02-01T00:00:00Z`.\n- Now and duration: `NOW-P1M/NOW`. This format represents the last month.\n- Month before last month: `NOW-P2M/NOW-P1M`.",
            "default": "NOW-P1M/NOW"
          },
          "periodStart": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Date and time when the dashboard period starts.\nThe value is resolved from `dateRange`."
          },
          "periodEnd": {
            "type": "string",
            "format": "date-time",
            "readOnly": true,
            "description": "Date and time when the dashboard period ends.\nThe value is resolved from `dateRange`."
          },
          "tabs": {
            "type": "array",
            "description": "List of dashboard tabs.",
            "maxItems": 10,
            "items": {
              "$ref": "#/components/schemas/DashboardTab"
            }
          }
        }
      },
      "DashboardMetric": {
        "type": "string",
        "description": "Type of dashboard metric.",
        "enum": [
          "approvalRate",
          "salesCount",
          "salesValue",
          "refundsValue",
          "chargebacksCount",
          "chargebacksValue",
          "transactionsCount",
          "redeemedCouponsCount",
          "newLeadsCount",
          "newCustomersCount",
          "appliedCouponsCount",
          "trialConversionsCount",
          "trialConversionsRate",
          "renewalSuccessRate",
          "renewalsCount",
          "newTrialsCount",
          "reactivationsCount",
          "successfulRetriesCount",
          "invoicedRevenue",
          "churnCount",
          "churnRate",
          "cancellationsCount",
          "cancellationsRate",
          "activeSubscriptionsCount",
          "newSubscriptionsCount",
          "upgradesCount",
          "downgradesCount",
          "monthlyRecurringRevenue",
          "annualRecurringRevenue",
          "averageRevenuePerCustomer",
          "customerLifetimeValue",
          "addressProofAcceptanceRate",
          "identityProofAcceptanceRate",
          "fundsProofAcceptanceRate",
          "purchaseProofAcceptanceRate",
          "creditFileProofAcceptanceRate",
          "kycAcceptanceRate",
          "kycReviewTime",
          "kycRejectionRate",
          "kycAccuracyRate",
          "addressProofAccuracyRate",
          "identityProofAccuracyRate",
          "creditFileProofAccuracyRate",
          "kycRequestCount",
          "kycRequestAbandonmentRate",
          "kycRequestAttemptedRate",
          "kycRequestFailureRate",
          "kycRequestFulfillmentRate",
          "kycRequestExpirationRate"
        ]
      },
      "DashboardTileReport": {
        "type": "object",
        "properties": {
          "metric": {
            "$ref": "#/components/schemas/DashboardMetric"
          },
          "value": {
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "description": "Tile value for the specified date range."
          },
          "previousValue": {
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "description": "Tile value for the previous date range.\nThis value is relative to the specified date range."
          },
          "timeseries": {
            "description": "Time series of tile values across the specified date range.",
            "type": "array",
            "maxItems": 100,
            "items": {
              "type": "object",
              "description": "Chart data point.",
              "readOnly": true,
              "properties": {
                "date": {
                  "type": "string",
                  "description": "Date and time of the entry."
                },
                "value": {
                  "type": [
                    "number",
                    "null"
                  ],
                  "description": "Value of the entry."
                }
              }
            }
          }
        }
      },
      "BadRequest": {
        "allOf": [
          {
            "title": "Bad request"
          },
          {
            "type": "object",
            "properties": {
              "status": {
                "type": "integer",
                "description": "HTTP status code.",
                "minimum": 400,
                "maximum": 400
              },
              "invalidFields": {
                "$ref": "#/components/schemas/InvalidFields"
              }
            }
          },
          {
            "$ref": "#/components/schemas/BaseProblem"
          }
        ]
      },
      "DataExportArguments": {
        "type": "object",
        "description": "Export request arguments used to filter and sort the result set.\nFor more information, see [Arguments](/docs/dev-docs/export-configuration/#arguments).",
        "properties": {
          "filter": {
            "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).",
            "type": "string"
          },
          "sort": {
            "type": "string",
            "description": "Sorts and orders the collection of items.\nTo sort in descending order, prefix with `-`."
          },
          "q": {
            "type": "string",
            "description": "Use this field to perform a partial search of text fields."
          }
        }
      },
      "DataExportRecurring": {
        "description": "Recurring export schedule.",
        "type": "object",
        "required": [
          "instruction"
        ],
        "properties": {
          "instruction": {
            "type": "string",
            "description": "Schedule instruction in [Recurrence Rule RFC 5545](https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html) format."
          },
          "start": {
            "type": "string",
            "format": "date-time",
            "description": "Date and time when the first scheduled recurring export occurs.\nThe default value is now."
          }
        }
      },
      "DataExportFileId": {
        "type": [
          "string",
          "null"
        ],
        "description": "ID of the data export file.\nIf the export contains more than 1,000,000 records,\nthe file is a ZIP archive.\nThe archive contains numbered part files,\nsuch as `example-part1.csv` and `example-part2.csv`,\neach with a maximum of 1,000,000 records.\nEach part file can be processed independently:\n\n- `csv` and `detailed-csv` part files repeat the header row.\n- `json` and `json-api` part files contain a complete array.\n- `xml` part files contain their own root element.\n\n`pdf` exports are always a ZIP archive that contains one PDF per record,\nand are never split into part files.",
        "readOnly": true,
        "maxLength": 50,
        "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
      },
      "DataExportFailureReason": {
        "description": "Reason the export failed, if the export status is `failed`.",
        "readOnly": true,
        "type": [
          "string",
          "null"
        ],
        "enum": [
          "record-limit-exceeded",
          "max-retries-reached",
          null
        ],
        "x-enumDescriptions": {
          "record-limit-exceeded": "Export exceeded the maximum number of records allowed for a single export.",
          "max-retries-reached": "Export failed after the maximum number of retry attempts."
        }
      },
      "DataExportDateRange": {
        "type": "object",
        "description": "Date range of the data export.\nIf this value is not set, all data is included.\nFor more information, see [Date ranges](/docs/dev-docs/export-configuration/#date-ranges).",
        "properties": {
          "start": {
            "type": "string",
            "description": "Start date of the data export.\nThis field accepts any argument in [datetime format](http://php.net/manual/en/datetime.formats.php).",
            "example": "yesterday"
          },
          "end": {
            "type": "string",
            "description": "End date of the data export.\nThis field accepts any argument in [datetime format](http://php.net/manual/en/datetime.formats.php).",
            "example": "today"
          },
          "field": {
            "type": "string",
            "description": "Field to which the date range is applied."
          }
        },
        "required": [
          "start",
          "end"
        ]
      },
      "CustomersDataExport": {
        "type": "object",
        "description": "Customer resource to export.",
        "required": [
          "name",
          "format",
          "resource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the export.",
            "readOnly": true,
            "maxLength": 50,
            "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
          },
          "name": {
            "description": "Name of the export.",
            "type": "string",
            "maxLength": 50
          },
          "resource": {
            "description": "Type of resource to export.",
            "type": "string",
            "enum": [
              "customers"
            ]
          },
          "format": {
            "description": "Output format of the export.",
            "type": "string",
            "enum": [
              "csv",
              "json",
              "json-api",
              "xml",
              "detailed-csv"
            ]
          },
          "arguments": {
            "$ref": "#/components/schemas/DataExportArguments"
          },
          "emailNotification": {
            "description": "List of email addresses to notify when an export is completed.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "fields": {
            "description": "List of fields to include in the export.\nFor more information, see [Fields](/docs/dev-docs/export-configuration/#fields).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recurring": {
            "$ref": "#/components/schemas/DataExportRecurring"
          },
          "userId": {
            "description": "ID of the user who requested the data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "$ref": "#/components/schemas/DataExportFileId"
          },
          "recordCount": {
            "description": "Total number of records in the export, excluding the header row.",
            "readOnly": true,
            "type": "integer"
          },
          "scheduledTime": {
            "description": "Date and time when the data export is scheduled to generate a file.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "status": {
            "description": "Status of export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "failureReason": {
            "$ref": "#/components/schemas/DataExportFailureReason"
          },
          "dateRange": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DataExportDateRange"
              },
              {
                "type": "object",
                "properties": {
                  "field": {
                    "type": "string",
                    "default": "createdTime",
                    "example": "createdTime"
                  }
                }
              }
            ]
          },
          "_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",
                    "user",
                    "download",
                    "signedLink"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              },
              "user": {
                "type": "object"
              }
            }
          }
        }
      },
      "SubscriptionsDataExport": {
        "type": "object",
        "description": "Order resource to export.",
        "required": [
          "name",
          "format",
          "resource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the export.",
            "readOnly": true,
            "maxLength": 50,
            "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
          },
          "name": {
            "description": "Name of the export.",
            "type": "string",
            "maxLength": 50
          },
          "resource": {
            "description": "Type of resource to export.",
            "type": "string",
            "enum": [
              "subscriptions"
            ]
          },
          "format": {
            "description": "Output format of the export.",
            "type": "string",
            "enum": [
              "csv",
              "json",
              "json-api",
              "xml",
              "detailed-csv"
            ]
          },
          "arguments": {
            "$ref": "#/components/schemas/DataExportArguments"
          },
          "emailNotification": {
            "description": "List of email addresses to notify when an export is completed.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "fields": {
            "description": "List of fields to include in the export.\nFor more information, see [Fields](/docs/dev-docs/export-configuration/#fields).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recurring": {
            "$ref": "#/components/schemas/DataExportRecurring"
          },
          "userId": {
            "description": "ID of the user who requested the data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "$ref": "#/components/schemas/DataExportFileId"
          },
          "recordCount": {
            "description": "Total number of records in the export, excluding the header row.",
            "readOnly": true,
            "type": "integer"
          },
          "scheduledTime": {
            "description": "Date and time when the data export is scheduled to generate a file.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "status": {
            "description": "Status of export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "failureReason": {
            "$ref": "#/components/schemas/DataExportFailureReason"
          },
          "dateRange": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DataExportDateRange"
              },
              {
                "type": "object",
                "properties": {
                  "field": {
                    "type": "string",
                    "default": "createdTime",
                    "example": "createdTime"
                  }
                }
              }
            ]
          },
          "_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",
                    "user",
                    "download",
                    "signedLink"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              },
              "user": {
                "type": "object"
              }
            }
          }
        }
      },
      "TransactionsDataExport": {
        "type": "object",
        "description": "Transaction resource to export.",
        "required": [
          "name",
          "format",
          "resource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the export.",
            "readOnly": true,
            "maxLength": 50,
            "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
          },
          "name": {
            "description": "Name of the export.",
            "type": "string",
            "maxLength": 50
          },
          "resource": {
            "description": "Type of resource to export.",
            "type": "string",
            "enum": [
              "transactions"
            ]
          },
          "format": {
            "description": "Output format of the export.",
            "type": "string",
            "enum": [
              "csv",
              "json",
              "json-api",
              "xml",
              "detailed-csv"
            ]
          },
          "arguments": {
            "$ref": "#/components/schemas/DataExportArguments"
          },
          "emailNotification": {
            "description": "List of email addresses to notify when an export is completed.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "fields": {
            "description": "List of fields to include in the export.\nFor more information, see [Fields](/docs/dev-docs/export-configuration/#fields).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recurring": {
            "$ref": "#/components/schemas/DataExportRecurring"
          },
          "userId": {
            "description": "ID of the user who requested the data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "$ref": "#/components/schemas/DataExportFileId"
          },
          "recordCount": {
            "description": "Total number of records in the export, excluding the header row.",
            "readOnly": true,
            "type": "integer"
          },
          "scheduledTime": {
            "description": "Date and time when the data export is scheduled to generate a file.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "status": {
            "description": "Status of export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "failureReason": {
            "$ref": "#/components/schemas/DataExportFailureReason"
          },
          "dateRange": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DataExportDateRange"
              },
              {
                "type": "object",
                "properties": {
                  "field": {
                    "x-sortable": true,
                    "type": "string",
                    "default": "processedTime",
                    "example": "processedTime"
                  }
                }
              }
            ]
          },
          "_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",
                    "user",
                    "download",
                    "signedLink"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              },
              "user": {
                "type": "object"
              }
            }
          }
        }
      },
      "InvoicesDataExport": {
        "type": "object",
        "description": "Invoice resource to export.",
        "required": [
          "name",
          "format",
          "resource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the export.",
            "readOnly": true,
            "maxLength": 50,
            "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
          },
          "name": {
            "description": "Name of the export.",
            "type": "string",
            "maxLength": 50
          },
          "resource": {
            "description": "Type of resource to export.",
            "type": "string",
            "enum": [
              "invoices"
            ]
          },
          "format": {
            "description": "Output format of the export.",
            "type": "string",
            "enum": [
              "csv",
              "json",
              "json-api",
              "xml",
              "pdf",
              "detailed-csv"
            ]
          },
          "arguments": {
            "$ref": "#/components/schemas/DataExportArguments"
          },
          "emailNotification": {
            "description": "List of email addresses to notify when an export is completed.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "fields": {
            "description": "List of fields to include in the export.\nFor more information, see [Fields](/docs/dev-docs/export-configuration/#fields).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recurring": {
            "$ref": "#/components/schemas/DataExportRecurring"
          },
          "userId": {
            "description": "ID of the user who requested the data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "$ref": "#/components/schemas/DataExportFileId"
          },
          "recordCount": {
            "description": "Total number of records in the export, excluding the header row.",
            "readOnly": true,
            "type": "integer"
          },
          "scheduledTime": {
            "description": "Date and time when the data export is scheduled to generate a file.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "status": {
            "description": "Status of export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "failureReason": {
            "$ref": "#/components/schemas/DataExportFailureReason"
          },
          "dateRange": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DataExportDateRange"
              },
              {
                "type": "object",
                "properties": {
                  "field": {
                    "type": "string",
                    "default": "issuedTime",
                    "example": "issuedTime"
                  }
                }
              }
            ]
          },
          "_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",
                    "user",
                    "download",
                    "signedLink"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              },
              "user": {
                "type": "object"
              }
            }
          }
        }
      },
      "InvoiceItemsDataExport": {
        "type": "object",
        "description": "Invoice item resource to export.",
        "required": [
          "name",
          "format",
          "resource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the export.",
            "readOnly": true,
            "maxLength": 50,
            "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
          },
          "name": {
            "description": "Name of the export.",
            "type": "string",
            "maxLength": 50
          },
          "resource": {
            "description": "Type of resource to export.",
            "type": "string",
            "enum": [
              "invoiceItems"
            ]
          },
          "format": {
            "description": "Output format of the export.",
            "type": "string",
            "enum": [
              "csv",
              "json",
              "json-api",
              "xml",
              "detailed-csv"
            ]
          },
          "arguments": {
            "$ref": "#/components/schemas/DataExportArguments"
          },
          "emailNotification": {
            "description": "List of email addresses to notify when an export is completed.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "fields": {
            "description": "List of fields to include in the export.\nFor more information, see [Fields](/docs/dev-docs/export-configuration/#fields).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recurring": {
            "$ref": "#/components/schemas/DataExportRecurring"
          },
          "userId": {
            "description": "ID of the user who requested the data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "$ref": "#/components/schemas/DataExportFileId"
          },
          "recordCount": {
            "description": "Total number of records in the export, excluding the header row.",
            "readOnly": true,
            "type": "integer"
          },
          "scheduledTime": {
            "description": "Date and time when the data export is scheduled to generate a file.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "status": {
            "description": "Status of export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "failureReason": {
            "$ref": "#/components/schemas/DataExportFailureReason"
          },
          "dateRange": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DataExportDateRange"
              },
              {
                "type": "object",
                "properties": {
                  "field": {
                    "type": "string",
                    "default": "issuedTime",
                    "example": "issuedTime"
                  }
                }
              }
            ]
          },
          "_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",
                    "user",
                    "download",
                    "signedLink"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              },
              "user": {
                "type": "object"
              }
            }
          }
        }
      },
      "AmlChecksDataExport": {
        "type": "object",
        "description": "AML checks resource to export.",
        "required": [
          "name",
          "format",
          "resource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the export.",
            "readOnly": true,
            "maxLength": 50,
            "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
          },
          "name": {
            "description": "Name of the export.",
            "type": "string",
            "maxLength": 50
          },
          "resource": {
            "description": "Type of resource to export.",
            "type": "string",
            "enum": [
              "amlChecks"
            ]
          },
          "format": {
            "description": "Output format of the export.",
            "type": "string",
            "enum": [
              "csv",
              "json",
              "json-api",
              "xml",
              "detailed-csv"
            ]
          },
          "arguments": {
            "$ref": "#/components/schemas/DataExportArguments"
          },
          "emailNotification": {
            "description": "List of email addresses to notify when an export is completed.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "fields": {
            "description": "List of fields to include in the export.\nFor more information, see [Fields](/docs/dev-docs/export-configuration/#fields).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recurring": {
            "$ref": "#/components/schemas/DataExportRecurring"
          },
          "userId": {
            "description": "ID of the user who requested the data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "$ref": "#/components/schemas/DataExportFileId"
          },
          "recordCount": {
            "description": "Total number of records in the export, excluding the header row.",
            "readOnly": true,
            "type": "integer"
          },
          "scheduledTime": {
            "description": "Date and time when the data export is scheduled to generate a file.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "status": {
            "description": "Status of export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "failureReason": {
            "$ref": "#/components/schemas/DataExportFailureReason"
          },
          "dateRange": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DataExportDateRange"
              },
              {
                "type": "object",
                "properties": {
                  "field": {
                    "type": "string",
                    "default": "createdTime",
                    "example": "createdTime"
                  }
                }
              }
            ]
          },
          "_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",
                    "user",
                    "download",
                    "signedLink"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              },
              "user": {
                "type": "object"
              }
            }
          }
        }
      },
      "DisputesDataExport": {
        "type": "object",
        "description": "Dispute resource to export.",
        "required": [
          "name",
          "format",
          "resource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the export.",
            "readOnly": true,
            "maxLength": 50,
            "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
          },
          "name": {
            "description": "Name of the export.",
            "type": "string",
            "maxLength": 50
          },
          "resource": {
            "description": "Type of resource to export.",
            "type": "string",
            "enum": [
              "disputes"
            ]
          },
          "format": {
            "description": "Output format of the export.",
            "type": "string",
            "enum": [
              "csv",
              "json",
              "json-api",
              "xml"
            ]
          },
          "arguments": {
            "$ref": "#/components/schemas/DataExportArguments"
          },
          "emailNotification": {
            "description": "List of email addresses to notify when an export is completed.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "fields": {
            "description": "List of fields to include in the export.\nFor more information, see [Fields](/docs/dev-docs/export-configuration/#fields).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recurring": {
            "$ref": "#/components/schemas/DataExportRecurring"
          },
          "userId": {
            "description": "ID of the user who requested the data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "$ref": "#/components/schemas/DataExportFileId"
          },
          "recordCount": {
            "description": "Total number of records in the export, excluding the header row.",
            "readOnly": true,
            "type": "integer"
          },
          "scheduledTime": {
            "description": "Date and time when the data export is scheduled to generate a file.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "status": {
            "description": "Status of the export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "failureReason": {
            "$ref": "#/components/schemas/DataExportFailureReason"
          },
          "dateRange": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DataExportDateRange"
              },
              {
                "type": "object",
                "properties": {
                  "field": {
                    "type": "string",
                    "default": "createdTime",
                    "example": "createdTime"
                  }
                }
              }
            ]
          },
          "_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",
                    "user",
                    "download",
                    "signedLink"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              },
              "user": {
                "type": "object"
              }
            }
          }
        }
      },
      "JournalRecordsDataExport": {
        "type": "object",
        "description": "Journal record resource to export.",
        "required": [
          "name",
          "format",
          "resource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the export.",
            "readOnly": true,
            "maxLength": 50,
            "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
          },
          "name": {
            "description": "Name of the export.",
            "type": "string",
            "maxLength": 50
          },
          "resource": {
            "description": "Type of resource to export.",
            "type": "string",
            "enum": [
              "journalRecords"
            ]
          },
          "format": {
            "description": "Output format of the export.",
            "type": "string",
            "enum": [
              "csv",
              "json",
              "json-api",
              "xml"
            ]
          },
          "arguments": {
            "$ref": "#/components/schemas/DataExportArguments"
          },
          "emailNotification": {
            "description": "List of email addresses to notify when an export is completed.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "fields": {
            "description": "List of fields to include in the export.\nFor more information, see [Fields](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation/#fields).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recurring": {
            "$ref": "#/components/schemas/DataExportRecurring"
          },
          "userId": {
            "description": "ID of the user who requested the data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "$ref": "#/components/schemas/DataExportFileId"
          },
          "recordCount": {
            "description": "Total number of records in the export, excluding the header row.",
            "readOnly": true,
            "type": "integer"
          },
          "scheduledTime": {
            "description": "Date and time when the data export is scheduled to generate a file.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "status": {
            "description": "Status of export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "failureReason": {
            "$ref": "#/components/schemas/DataExportFailureReason"
          },
          "dateRange": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DataExportDateRange"
              },
              {
                "type": "object",
                "properties": {
                  "field": {
                    "type": "string",
                    "default": "createdTime",
                    "example": "createdTime"
                  }
                }
              }
            ]
          },
          "_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",
                    "user",
                    "download",
                    "signedLink"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              },
              "user": {
                "type": "object"
              }
            }
          }
        }
      },
      "PayoutRequestsDataExport": {
        "type": "object",
        "description": "Payout requests resource to export.",
        "required": [
          "name",
          "format",
          "resource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the export.",
            "readOnly": true,
            "maxLength": 50,
            "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
          },
          "name": {
            "description": "Name of the export.",
            "type": "string",
            "maxLength": 50
          },
          "resource": {
            "description": "Type of resource to export.",
            "type": "string",
            "enum": [
              "payoutRequests"
            ]
          },
          "format": {
            "description": "Output format of the export.",
            "type": "string",
            "enum": [
              "csv",
              "json",
              "json-api",
              "xml"
            ]
          },
          "arguments": {
            "$ref": "#/components/schemas/DataExportArguments"
          },
          "emailNotification": {
            "description": "List of email addresses to notify when an export is completed.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "fields": {
            "description": "List of fields to include in the export.\nFor more information, see [Fields](/docs/dev-docs/export-configuration/#fields).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recurring": {
            "$ref": "#/components/schemas/DataExportRecurring"
          },
          "userId": {
            "description": "ID of the user who requested the data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "$ref": "#/components/schemas/DataExportFileId"
          },
          "recordCount": {
            "description": "Total number of records in the export, excluding the header row.",
            "readOnly": true,
            "type": "integer"
          },
          "scheduledTime": {
            "description": "Date and time when the data export is scheduled to generate a file.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "status": {
            "description": "Status of the export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "failureReason": {
            "$ref": "#/components/schemas/DataExportFailureReason"
          },
          "dateRange": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DataExportDateRange"
              },
              {
                "type": "object",
                "properties": {
                  "field": {
                    "x-sortable": true,
                    "type": "string",
                    "default": "createdTime",
                    "example": "createdTime"
                  }
                }
              }
            ]
          },
          "_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",
                    "user",
                    "download",
                    "signedLink"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              },
              "user": {
                "type": "object"
              }
            }
          }
        }
      },
      "PayoutRequestAllocationsDataExport": {
        "type": "object",
        "description": "Payout request allocations resource to export.",
        "required": [
          "name",
          "format",
          "resource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the export.",
            "readOnly": true,
            "maxLength": 50,
            "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
          },
          "name": {
            "description": "Name of the export.",
            "type": "string",
            "maxLength": 50
          },
          "resource": {
            "description": "Type of resource to export.",
            "type": "string",
            "enum": [
              "payoutRequestAllocations"
            ]
          },
          "format": {
            "description": "Output format of the export.",
            "type": "string",
            "enum": [
              "csv",
              "json",
              "json-api",
              "xml"
            ]
          },
          "arguments": {
            "$ref": "#/components/schemas/DataExportArguments"
          },
          "emailNotification": {
            "description": "List of email addresses to notify when an export is completed.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "fields": {
            "description": "List of fields to include in the export.\nFor more information, see [Fields](/docs/dev-docs/export-configuration/#fields).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recurring": {
            "$ref": "#/components/schemas/DataExportRecurring"
          },
          "userId": {
            "description": "ID of the user who requested the data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "$ref": "#/components/schemas/DataExportFileId"
          },
          "recordCount": {
            "description": "Total number of records in the export, excluding the header row.",
            "readOnly": true,
            "type": "integer"
          },
          "scheduledTime": {
            "description": "Date and time when the data export is scheduled to generate a file.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "status": {
            "description": "Status of the export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "failureReason": {
            "$ref": "#/components/schemas/DataExportFailureReason"
          },
          "dateRange": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DataExportDateRange"
              },
              {
                "type": "object",
                "properties": {
                  "field": {
                    "x-sortable": true,
                    "type": "string",
                    "default": "createdTime",
                    "example": "createdTime"
                  }
                }
              }
            ]
          },
          "_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",
                    "user",
                    "download",
                    "signedLink"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              },
              "user": {
                "type": "object"
              }
            }
          }
        }
      },
      "UsersDataExport": {
        "type": "object",
        "description": "Users resource to export.",
        "required": [
          "name",
          "format",
          "resource"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the export.",
            "readOnly": true,
            "maxLength": 50,
            "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
          },
          "name": {
            "description": "Name of the export.",
            "type": "string",
            "maxLength": 50
          },
          "resource": {
            "description": "Type of resource to export.",
            "type": "string",
            "enum": [
              "users"
            ]
          },
          "format": {
            "description": "Output format of the export.",
            "type": "string",
            "enum": [
              "csv",
              "json"
            ]
          },
          "arguments": {
            "$ref": "#/components/schemas/DataExportArguments"
          },
          "emailNotification": {
            "description": "List of email addresses to notify when an export is completed.",
            "type": "array",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "fields": {
            "description": "List of fields to include in the export.\nFor more information, see [Fields](/docs/dev-docs/export-configuration/#fields).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recurring": {
            "$ref": "#/components/schemas/DataExportRecurring"
          },
          "userId": {
            "description": "ID of the user who requested the data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "$ref": "#/components/schemas/DataExportFileId"
          },
          "recordCount": {
            "description": "Total number of records in the export, excluding the header row.",
            "readOnly": true,
            "type": "integer"
          },
          "scheduledTime": {
            "description": "Date and time when the data export is scheduled to generate a file.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "status": {
            "description": "Status of the export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "queued",
              "processing",
              "completed",
              "failed"
            ]
          },
          "failureReason": {
            "$ref": "#/components/schemas/DataExportFailureReason"
          },
          "dateRange": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DataExportDateRange"
              },
              {
                "type": "object",
                "properties": {
                  "field": {
                    "x-sortable": true,
                    "type": "string",
                    "default": "createdTime",
                    "example": "createdTime"
                  }
                }
              }
            ]
          },
          "_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",
                    "user",
                    "download",
                    "signedLink"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "file": {
                "type": "object"
              },
              "user": {
                "type": "object"
              }
            }
          }
        }
      },
      "DataExport": {
        "type": "object",
        "discriminator": {
          "propertyName": "resource",
          "mapping": {
            "customers": "#/components/schemas/CustomersDataExport",
            "subscriptions": "#/components/schemas/SubscriptionsDataExport",
            "transactions": "#/components/schemas/TransactionsDataExport",
            "invoices": "#/components/schemas/InvoicesDataExport",
            "invoiceItems": "#/components/schemas/InvoiceItemsDataExport",
            "amlChecks": "#/components/schemas/AmlChecksDataExport",
            "disputes": "#/components/schemas/DisputesDataExport",
            "journalRecords": "#/components/schemas/JournalRecordsDataExport",
            "payoutRequests": "#/components/schemas/PayoutRequestsDataExport",
            "payoutRequestAllocations": "#/components/schemas/PayoutRequestAllocationsDataExport",
            "users": "#/components/schemas/UsersDataExport"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/CustomersDataExport"
          },
          {
            "$ref": "#/components/schemas/SubscriptionsDataExport"
          },
          {
            "$ref": "#/components/schemas/TransactionsDataExport"
          },
          {
            "$ref": "#/components/schemas/InvoicesDataExport"
          },
          {
            "$ref": "#/components/schemas/InvoiceItemsDataExport"
          },
          {
            "$ref": "#/components/schemas/AmlChecksDataExport"
          },
          {
            "$ref": "#/components/schemas/DisputesDataExport"
          },
          {
            "$ref": "#/components/schemas/JournalRecordsDataExport"
          },
          {
            "$ref": "#/components/schemas/PayoutRequestsDataExport"
          },
          {
            "$ref": "#/components/schemas/PayoutRequestAllocationsDataExport"
          },
          {
            "$ref": "#/components/schemas/UsersDataExport"
          }
        ]
      },
      "DataExportLimitExceeded": {
        "allOf": [
          {
            "title": "Data export limit exceeded"
          },
          {
            "type": "object",
            "required": [
              "type"
            ],
            "properties": {
              "type": {
                "type": "string",
                "description": "Machine-readable error code for this problem type, which consumers use to handle the failure programmatically.",
                "enum": [
                  "data-export-limit-exceeded"
                ]
              },
              "status": {
                "type": "integer",
                "description": "HTTP status code.",
                "minimum": 422,
                "maximum": 422
              }
            }
          },
          {
            "$ref": "#/components/schemas/DetailedProblem"
          },
          {
            "type": "object",
            "required": [
              "matchedRecords",
              "maxRecords"
            ],
            "properties": {
              "matchedRecords": {
                "type": "integer",
                "description": "Number of records that match the export request.",
                "example": 12500000
              },
              "maxRecords": {
                "type": "integer",
                "description": "Maximum number of records for a single export.",
                "example": 10000000
              }
            }
          }
        ]
      },
      "OrganizationExport": {
        "type": "object",
        "properties": {
          "id": {
            "readOnly": true,
            "type": "string",
            "description": "Unique resource ID.",
            "maxLength": 50,
            "example": "org_exp_01HXC7MKK4GCS6WRRXY4X9CRMK"
          },
          "userId": {
            "description": "ID of the user who requested the organization data export.",
            "readOnly": true,
            "type": "string",
            "maxLength": 50,
            "example": "usr_0YVCEENYJ3D7Q9EN6BN16HA0G4"
          },
          "fileId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the linked file object.",
            "readOnly": true,
            "maxLength": 50,
            "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
          },
          "status": {
            "description": "Status of organization data export request.",
            "readOnly": true,
            "type": "string",
            "enum": [
              "pending",
              "processing",
              "completed",
              "queued",
              "failed",
              "expired"
            ]
          },
          "resources": {
            "description": "Organization data export resources array.",
            "readOnly": true,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "type": {
                  "description": "Exported resource.",
                  "readOnly": true,
                  "type": "string",
                  "enum": [
                    "customers",
                    "users",
                    "payment-instruments",
                    "invoices",
                    "orders",
                    "transactions",
                    "disputes",
                    "gateway-accounts",
                    "blocklists",
                    "lists",
                    "webhooks",
                    "products",
                    "websites",
                    "plans",
                    "credit-memos",
                    "files",
                    "email-notifications"
                  ],
                  "x-enumDescriptions": {
                    "customers": "All customers of the organization.",
                    "users": "All users of the organization.",
                    "payment-instruments": "All payment instruments of the organization.",
                    "invoices": "All invoices of the organization.",
                    "orders": "All orders of the organization.",
                    "transactions": "All transactions of the organization.",
                    "disputes": "All disputes of the organization.",
                    "gateway-accounts": "All gateway accounts of the organization.",
                    "blocklists": "All blocklists of the organization.",
                    "lists": "All lists of the organization.",
                    "webhooks": "All webhooks of the organization.",
                    "products": "All products of the organization.",
                    "websites": "All websites of the organization.",
                    "plans": "All plans of the organization.",
                    "credit-memos": "All credit-memos of the organization.",
                    "files": "All files of the organization.",
                    "email-notifications": "All email-notifications of the organization."
                  }
                },
                "recordCount": {
                  "description": "Number of exported resources.",
                  "readOnly": true,
                  "type": "integer"
                }
              }
            }
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "retentionTime": {
            "description": "Date and time when retention ends.\nAfter this date, files are removed.",
            "readOnly": 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",
                    "user",
                    "signedLink"
                  ]
                }
              }
            }
          }
        }
      },
      "HistogramData": {
        "title": "Histogram data",
        "type": "object",
        "properties": {
          "data": {
            "description": "Histogram data.",
            "type": "array",
            "items": {
              "type": "object",
              "readOnly": true,
              "properties": {
                "date": {
                  "type": "string",
                  "description": "Date and time of data entry."
                },
                "value": {
                  "type": "number",
                  "description": "Data entry value."
                }
              }
            }
          }
        }
      },
      "ApiLogSummary": {
        "type": "object",
        "properties": {
          "data": {
            "description": "API log summary data.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Number of requests for each method.",
              "readOnly": true,
              "properties": {
                "route": {
                  "type": "string",
                  "description": "Route string pattern."
                },
                "total": {
                  "type": "integer",
                  "description": "Total number of requests."
                },
                "get": {
                  "type": "integer",
                  "description": "Total number of `GET` requests."
                },
                "post": {
                  "type": "integer",
                  "description": "Total number of `POST` requests."
                },
                "put": {
                  "type": "integer",
                  "description": "Total number of `PUT` requests."
                },
                "patch": {
                  "type": "integer",
                  "description": "Total number of `PATCH` requests."
                },
                "delete": {
                  "type": "integer",
                  "description": "Total number of `DELETE` requests."
                },
                "head": {
                  "type": "integer",
                  "description": "Total number of `HEAD` requests."
                },
                "options": {
                  "type": "integer",
                  "description": "Total number of `OPTIONS` requests."
                }
              }
            }
          }
        }
      },
      "ReportAmlChecks": {
        "type": "object",
        "properties": {
          "total": {
            "description": "Total number of checks.",
            "type": "integer"
          },
          "propagated": {
            "description": "Total number of propagated checks.",
            "type": "integer"
          },
          "resulted": {
            "description": "Total number of resulted checks.",
            "type": "integer"
          },
          "pending": {
            "description": "Total number of pending checks.",
            "type": "integer"
          }
        }
      },
      "ReportAmlChecksInheritedSummary": {
        "type": "object",
        "description": "Summary of inherited AML checks, grouped by provenance reason.",
        "properties": {
          "totalInherited": {
            "description": "Number of AML checks in the period that have inherited status.",
            "type": "integer"
          },
          "categories": {
            "description": "Categories of inherited checks, grouped by provenance reason.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "reason": {
                  "description": "Provenance reason code for the inherited status.",
                  "type": "string"
                },
                "count": {
                  "description": "Number of inherited checks for this reason code.",
                  "type": "integer"
                },
                "percentage": {
                  "description": "Percentage of inherited checks for this reason code, calculated as a proportion of `totalInherited`.",
                  "type": "number",
                  "format": "float"
                }
              },
              "required": [
                "reason",
                "count",
                "percentage"
              ]
            }
          }
        },
        "required": [
          "totalInherited",
          "categories"
        ]
      },
      "CumulativeSubscriptions": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Cumulative subscription data.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Contains an aggregation.",
              "readOnly": true,
              "properties": {
                "aggregationValue": {
                  "type": "string",
                  "description": "Date in `YYYY-MM` format for monthly aggregation, or `YYYY-MM-DD` for daily aggregation."
                },
                "newCount": {
                  "type": "integer",
                  "description": "Number of new subscriptions within the aggregation."
                },
                "canceledCount": {
                  "type": "integer",
                  "description": "Number of canceled subscriptions within the aggregation."
                },
                "cumulativeCount": {
                  "type": "integer",
                  "description": "Total number of cumulative subscriptions.\n\nThis field is calculated based on: the number of cumulative subscriptions from the previous aggregation period + `newCount` - `canceledCount`."
                }
              }
            }
          }
        }
      },
      "DashboardResponse": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "metric": {
              "$ref": "#/components/schemas/DashboardMetric"
            },
            "humanName": {
              "type": "string",
              "description": "Display name of the metric."
            },
            "increaseIsGood": {
              "type": "boolean",
              "description": "Specifies whether a higher value is a positive result for the merchant."
            },
            "segments": {
              "type": "array",
              "description": "Segment data.",
              "items": {
                "type": "object",
                "properties": {
                  "name": {
                    "type": "string",
                    "description": "Name of the segment."
                  },
                  "value": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "format": "double",
                    "description": "Segment value for the specified date range."
                  },
                  "previousValue": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "format": "double",
                    "description": "Segment value for the previous date range.\nThis value is relative to the specified date range."
                  },
                  "humanValue": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Human readable segment value.\nThis field is formatted with a currency sign."
                  },
                  "changeRatio": {
                    "type": [
                      "number",
                      "null"
                    ],
                    "format": "double",
                    "description": "Ratio of the current value for each previous value.\nA null value represents infinity."
                  },
                  "humanChangeRatio": {
                    "type": [
                      "string",
                      "null"
                    ],
                    "description": "Human readable change ratio.\nThis field is formatted percentage sign.\nA null value represents infinity."
                  },
                  "timeseries": {
                    "description": "Time series.",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "description": "Chart data.",
                      "readOnly": true,
                      "properties": {
                        "date": {
                          "type": "string",
                          "description": "Entry date-time."
                        },
                        "value": {
                          "type": [
                            "number",
                            "null"
                          ],
                          "description": "Entry value."
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "DccMarkup": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Aggregation data.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Contains an aggregation.",
              "readOnly": true,
              "properties": {
                "aggregationValue": {
                  "type": "string",
                  "description": "Value by which the report provides aggregated data.\nDate values are displayed as follows:\n\n  - Day: `YYYY-MM-DD`.\n  - Month: `YYYY-MM`."
                },
                "selectedCount": {
                  "type": "integer",
                  "description": "Number of selected offers in the aggregation."
                },
                "selectedSum": {
                  "type": "number",
                  "format": "double",
                  "description": "Amount of selected offers in the aggregation."
                },
                "rejectedCount": {
                  "type": "integer",
                  "description": "Number of rejected offers in the aggregation."
                },
                "rejectedSum": {
                  "type": "number",
                  "format": "double",
                  "description": "Amount of rejected offers in the aggregation."
                },
                "unknownCount": {
                  "type": "integer",
                  "description": "Number of offers in the aggregation which are not selected nor rejected."
                },
                "unknownSum": {
                  "type": "number",
                  "format": "double",
                  "description": "Amount of offers in the aggregation which are not selected nor rejected."
                }
              }
            }
          }
        }
      },
      "ReportDeclinedTransactions": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "message": {
                  "description": "Description or message related to the declined transactions report.",
                  "type": "string",
                  "example": "error"
                },
                "count": {
                  "description": "Number of declined transactions.",
                  "type": "integer",
                  "example": 500
                },
                "percentage": {
                  "description": "Percentage of declined transactions.",
                  "type": "number",
                  "format": "double",
                  "example": 25
                }
              }
            }
          }
        }
      },
      "ReportDeferredRevenue": {
        "type": "object",
        "properties": {
          "asOfDate": {
            "type": "string",
            "format": "date",
            "description": "Date up to which revenue is recognized for the report.",
            "example": "2024-03-31"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "booked": {
            "type": "number",
            "description": "Total booked amount as of the report date.",
            "example": 127850
          },
          "recognized": {
            "type": "number",
            "description": "Total recognized amount as of the report date.",
            "example": 89495
          },
          "liability": {
            "type": "number",
            "description": "Total liability amount as of the report date.",
            "example": 38355
          },
          "months": {
            "type": "array",
            "description": "Monthly breakdown data.",
            "items": {
              "type": "object",
              "properties": {
                "month": {
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}$",
                  "example": "2024-03"
                },
                "bookedAsOfMonth": {
                  "type": "number",
                  "description": "Cumulative booked amount as of the month.",
                  "example": 127850
                },
                "bookedInMonth": {
                  "type": "number",
                  "description": "Amount booked in the specific month.",
                  "example": 24750
                },
                "recognizeAsOfMonth": {
                  "type": "number",
                  "description": "Cumulative recognized amount as of the month.",
                  "example": 89495
                },
                "recognizeInMonth": {
                  "type": "number",
                  "description": "Amount recognized in the specific month.",
                  "example": 18650
                },
                "liabilityAsOfMonth": {
                  "type": "number",
                  "description": "Liability amount as of the specific month.",
                  "example": 38355
                }
              }
            }
          }
        }
      },
      "ReportDisputes": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "description": "Disputes data.",
            "items": {
              "type": "object",
              "properties": {
                "aggregationValue": {
                  "description": "Aggregation field value.\nThis value is defined in the `aggregationField` parameter by using a query.\nFor example, this value could be: website or country.",
                  "type": "string"
                },
                "countVisa": {
                  "description": "Total number of disputed Visa transactions.",
                  "type": "integer"
                },
                "ratioCountVisa": {
                  "description": "Ratio of the total number of disputed Visa transactions versus the total number of settled Visa transactions.",
                  "type": "number",
                  "format": "double"
                },
                "ratioAmountVisa": {
                  "description": "Ratio of disputed Visa transaction amounts versus settled Visa transaction amounts.",
                  "type": "number",
                  "format": "double"
                },
                "countMastercard": {
                  "description": "Total number of disputed Mastercard transactions.",
                  "type": "integer"
                },
                "ratioCountMastercard": {
                  "description": "Ratio of the total number of disputed Mastercard transactions versus the total number of settled Mastercard transactions.",
                  "type": "number",
                  "format": "double"
                },
                "ratioAmountMastercard": {
                  "description": "Ratio of disputed Mastercard transaction amounts versus settled Mastercard transaction amounts.",
                  "type": "number",
                  "format": "double"
                }
              }
            }
          }
        }
      },
      "ReportEventsTriggeredSummary": {
        "type": "object",
        "properties": {
          "data": {
            "type": "array",
            "description": "Event data.",
            "items": {
              "type": "object",
              "properties": {
                "eventName": {
                  "description": "Name of the system event.",
                  "type": "string",
                  "enum": [
                    "dispute-created",
                    "gateway-account-requested",
                    "transaction-processed",
                    "subscription-canceled",
                    "subscription-renewed",
                    "payment-card-expired",
                    "payment-declined",
                    "transaction-process-requested",
                    "risk-score-changed"
                  ]
                },
                "count": {
                  "description": "Total number of times this event is triggered.",
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "ReportRulesMatchedSummary": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Matched rule data.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "rule": {
                  "description": "Name of the matched rule.",
                  "type": "string"
                },
                "count": {
                  "description": "Total number of times this rule is matched.",
                  "type": "integer"
                },
                "approvalRate": {
                  "description": "Rate of transaction approval by rule.",
                  "type": "number",
                  "format": "double"
                }
              }
            }
          }
        }
      },
      "FutureRenewals": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Future renewals data.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Contains an aggregation.",
              "readOnly": true,
              "properties": {
                "date": {
                  "type": "string",
                  "description": "Date in `YYYY-MM` format."
                },
                "sum": {
                  "type": "number",
                  "format": "double",
                  "description": "Total amount of future renewals in the user's reporting currency."
                },
                "plansCount": {
                  "type": "array",
                  "description": "Plan within the aggregation.",
                  "items": {
                    "type": "object",
                    "readOnly": true,
                    "properties": {
                      "planId": {
                        "type": "string",
                        "description": "ID of the plan.",
                        "maxLength": 50,
                        "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                      },
                      "count": {
                        "type": "integer",
                        "description": "Total number of future renewals of a plan."
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ReportJournal": {
        "type": "object",
        "properties": {
          "aggregationField": {
            "type": "string",
            "description": "Report data grouped by aggregation field.",
            "enum": [
              "product.accountingCode",
              "product.id",
              "plan.id"
            ]
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "bookedFrom": {
            "type": [
              "string",
              "null"
            ],
            "description": "Year and month when revenue is booked.",
            "pattern": "^\\d{4}-\\d{2}$",
            "example": "2022-01"
          },
          "bookedTo": {
            "type": [
              "string",
              "null"
            ],
            "description": "Year and month when revenue is booked until.",
            "pattern": "^\\d{4}-\\d{2}$",
            "example": "2022-01"
          },
          "recognizedAt": {
            "type": "string",
            "description": "Year and month when revenue is recognized.",
            "pattern": "^\\d{4}-\\d{2}$",
            "example": "2022-01"
          },
          "data": {
            "description": "Revenue data.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "aggregationValue": {
                  "description": "Aggregation field value.",
                  "type": "string"
                },
                "bookedMonth": {
                  "description": "Month when revenue is booked.",
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}$",
                  "example": "2022-02"
                },
                "bookedAmount": {
                  "description": "Revenue amount which is booked for recognition.",
                  "type": "number",
                  "format": "double",
                  "example": 25
                },
                "recognizedAmount": {
                  "description": "Amount of recognized revenue.",
                  "type": "number",
                  "format": "double",
                  "example": 20
                },
                "remainingAmount": {
                  "description": "Remaining revenue amount to be recognized.",
                  "type": "number",
                  "format": "double",
                  "example": 5
                }
              }
            }
          }
        }
      },
      "JournalSummaryReport": {
        "type": "object",
        "properties": {
          "aggregationField": {
            "description": "Journal account by which the report amounts are aggregated.",
            "type": "string",
            "enum": [
              "journalRecord.creditAccountId",
              "journalRecord.debitAccountId"
            ]
          },
          "amountField": {
            "description": "Journal record amount field which is used to calculate the report amounts.",
            "type": "string",
            "enum": [
              "journalRecord.estimatedAmount",
              "journalRecord.recognizedAmount"
            ]
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "periodStart": {
            "description": "Year and month from which the report is generated.",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}$",
            "example": "2025-06"
          },
          "periodEnd": {
            "description": "Year and month up to which the report is generated.",
            "type": "string",
            "pattern": "^\\d{4}-\\d{2}$",
            "example": "2025-09"
          },
          "journalAccountIds": {
            "description": "Comma-separated list of journal account IDs which are provided to filter the report.\nA `null` value means that no value is provided and all journal accounts are included.",
            "type": [
              "string",
              "null"
            ],
            "example": "jrn_acc_01JXFPKZP4QE4CR3GTT23K8R5J,jrn_acc_01JXFPM6M3CYJ496E5NSCBPM49"
          },
          "data": {
            "description": "Journal summary report data.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "period": {
                  "description": "Journal period month and year.",
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}$",
                  "example": "2025-06"
                },
                "totalAmount": {
                  "description": "Total summary of journal records amount for the period.",
                  "type": [
                    "number",
                    "null"
                  ],
                  "format": "double",
                  "x-type": "Money",
                  "x-currency-field": "currency"
                },
                "currency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "breakdown": {
                  "description": "Breakdown of journal records by journal account.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "journalAccountId": {
                        "description": "ID of the journal account.",
                        "type": "string",
                        "example": "jrn_acc_01JXFPKZP4QE4CR3GTT23K8R5J"
                      },
                      "recognizedAmount": {
                        "description": "Amount of revenue recognized for the journal account in the period.\nThis field is present only if the `amountField` value is `journalRecord.recognizedAmount`.",
                        "type": [
                          "number",
                          "null"
                        ],
                        "format": "double",
                        "x-type": "Money",
                        "x-currency-field": "currency"
                      },
                      "estimatedAmount": {
                        "description": "Amount of revenue estimated for the journal account in the period.\nThis field is present only if the `amountField` value is `journalRecord.estimatedAmount`.",
                        "type": [
                          "number",
                          "null"
                        ],
                        "format": "double",
                        "x-type": "Money",
                        "x-currency-field": "currency"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ReportKycRejections": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Rejection data.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "documentType": {
                  "$ref": "#/components/schemas/KycDocumentTypes"
                },
                "rejectionReasons": {
                  "type": "array",
                  "description": "Rejection reasons.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "rejectionReason": {
                        "$ref": "#/components/schemas/KycDocumentRejectionReasonTypes"
                      },
                      "count": {
                        "type": "integer",
                        "format": "integer",
                        "minimum": 0,
                        "description": "Total number of related KYC documents."
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "KycDocumentRequestStatuses": {
        "description": "Reason the document is rejected.",
        "type": "string",
        "enum": [
          "abandoned",
          "expired",
          "failed",
          "fulfilled",
          "pending-review"
        ]
      },
      "ReportKycRequests": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Request data.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "rejectionReason": {
                  "$ref": "#/components/schemas/KycDocumentRequestStatuses"
                },
                "count": {
                  "type": "integer",
                  "format": "integer",
                  "minimum": 0,
                  "description": "Number of related KYC requests."
                }
              }
            }
          }
        }
      },
      "ReportMonthlyRecurringRevenue": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Monthly Recurring Revenue (MRR) data.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "period": {
                  "description": "Revenue month.",
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}$",
                  "example": "2022-06"
                },
                "total": {
                  "description": "Total Monthly Recurring Revenue (MRR) amount.",
                  "type": "number",
                  "format": "double",
                  "example": 245
                },
                "breakdown": {
                  "description": "MRR categories are described below.",
                  "type": "object",
                  "properties": {
                    "change": {
                      "description": "Difference in total MRR between the current and previous period.",
                      "type": "number",
                      "format": "double",
                      "example": 500
                    },
                    "new": {
                      "description": "Occurs when new customers sign up.\nNew MRR is the amount of the new customer's subscription.\n\nExample: A new customer signs up to a $40 per month plan.\nThis is a new MRR amount of $40.",
                      "type": "number",
                      "format": "double",
                      "example": 40
                    },
                    "reactivation": {
                      "description": "Occurs when a customer stops being a customer for a period but later signs up again.\nReactivation MRR is the amount of the customer's new subscription.\n\nExample: A customer cancels their subscription, but signs up again and purchases a $25 per month plan.\nThis is a reactivation MRR amount of $25.",
                      "type": "number",
                      "format": "double",
                      "example": 25
                    },
                    "churned": {
                      "description": "Occurs when a subscription is churned.\nChurn occurs when the paid service period on a subscription order expires.\nChurned MRR is the amount that is lost as a result of the churned subscription.\n\nExample: When a subscription is churned, the value of a subscription goes from $80 per month to $0 per month.\nThis is a churned MRR amount of $80.",
                      "type": "number",
                      "format": "double",
                      "example": 80
                    },
                    "contraction": {
                      "description": "Occurs when an existing customer changes items which result in a smaller MRR.\nContraction MRR is the amount before the change minus the amount and after the change.\n\nExample: A customer downgrades from a plan that is $100 per month to plan that is $80 per month.\nThis is a contraction MRR amount of $20.",
                      "type": "number",
                      "format": "double",
                      "example": 20
                    },
                    "expansion": {
                      "description": "Occurs when existing customers change items which result in a bigger MRR.\nExpansion MRR is the amount after the change minus the amount and before the change.\n\nExample: A customer upgrades from a plan that is $40 per month to a plan that is $100 per month.\nThis is an expansion MRR amount of $60.",
                      "type": "number",
                      "format": "double",
                      "example": 60
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ReportAnnualRecurringRevenue": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Annual Recurring Revenue (ARR) data.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "period": {
                  "description": "Revenue month.",
                  "type": "string",
                  "pattern": "^\\d{4}-\\d{2}$",
                  "example": "2022-06"
                },
                "total": {
                  "description": "Total Annual Recurring Revenue (ARR) amount.",
                  "type": "number",
                  "format": "double",
                  "example": 300
                },
                "breakdown": {
                  "description": "ARR categories are described below.",
                  "type": "object",
                  "properties": {
                    "change": {
                      "description": "Difference in total ARR between the current and previous period.",
                      "type": "number",
                      "format": "double",
                      "example": 500
                    },
                    "new": {
                      "description": "Occurs when new customers sign up.\nNew ARR is the amount of the new customer's subscription.\n\nExample: A new customer signs up to a $40 per month plan.\nThis is a new ARR amount of $480 ($40 multiplied by 12 months).",
                      "type": "number",
                      "format": "double",
                      "example": 480
                    },
                    "reactivation": {
                      "description": "Occurs when a customer stops being a customer for a period but later signs up again.\nReactivation ARR is the amount of the customer's new subscription.\n\nExample: A customer cancels their subscription, but signs up again and purchases a $25 per month plan.\nThis is a reactivation ARR amount of $300 ($25 multiplied by 12 months).",
                      "type": "number",
                      "format": "double",
                      "example": 300
                    },
                    "churned": {
                      "description": "Occurs when a subscription is churned.\nChurn occurs when the paid service period on a subscription order expires.\nChurned ARR is the amount that is lost as a result of the churned subscription.\n\nExample: When a subscription is churned, the value of a subscription goes from $80 per month to $0 per month.\nThis is a churned ARR amount of $960 ($80 multiplied by 12 months).",
                      "type": "number",
                      "format": "double",
                      "example": 960
                    },
                    "contraction": {
                      "description": "Occurs when an existing customer changes items which result in a smaller ARR.\nContraction ARR is the amount before the change minus the amount after the change.\n\nExample: A customer downgrades from a plan that is $100 per month to plan that is $80 per month.\nThis is a contraction ARR amount of $240 ($20 multiplied by 12 months).",
                      "type": "number",
                      "format": "double",
                      "example": 240
                    },
                    "expansion": {
                      "description": "Occurs when existing customers change items which result in a bigger ARR.\nExpansion ARR is the amount after the change minus the amount before the change.\n\nExample: A customer upgrades from a plan that is $40 per month to a plan that is $100 per month.\nThis is an expansion ARR amount of $720 ($60 multiplied by 12 months).",
                      "type": "number",
                      "format": "double",
                      "example": 720
                    }
                  }
                }
              }
            }
          }
        }
      },
      "RenewalSales": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Renewal sales data.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Contains an aggregation.",
              "readOnly": true,
              "properties": {
                "aggregationValue": {
                  "type": "string",
                  "description": "Date in `YYYY-MM` format."
                },
                "newSales": {
                  "type": "number",
                  "format": "double",
                  "description": "Total amount of new sales."
                },
                "newRefunds": {
                  "type": "number",
                  "format": "double",
                  "description": "Total amount of new refunds."
                },
                "renewalSales": {
                  "type": "number",
                  "format": "double",
                  "description": "Total amount of renewal sales."
                },
                "renewalRefunds": {
                  "type": "number",
                  "format": "double",
                  "description": "Total amount of renewal refunds."
                }
              }
            }
          }
        }
      },
      "ReportRetentionPercentage": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Retention data.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Contains an aggregation.",
              "readOnly": true,
              "properties": {
                "aggregationValue": {
                  "type": "string",
                  "description": "Value by which the report provides retention periods and percentages.\n\nDate values are displayed as follows:\n\n- Day: `YYYY-MM-DD`;\n- Month: `YYYY-MM`;\n- Quarter: `YYYY-MM`/`YYYY-MM`;\n- Year: `YYYY`."
                },
                "subscriptionsCount": {
                  "type": "integer",
                  "description": "Number of subscriptions created within the aggregation."
                },
                "periods": {
                  "description": "Periods of the specified aggregation.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "period": {
                        "type": "integer",
                        "description": "Retention period number.\nThis value is measured from the beginning boundary of the aggregation.\nPeriods are numbered as follows:\n  - `0`: First period.\n  - `1`: Second period.\n  - `2`: Third period, and so on."
                      },
                      "retentionRatio": {
                        "type": "number",
                        "format": "double",
                        "description": "Ratio percentage of active, non-canceled subscriptions in the retention period versus all subscriptions created in the aggregation period."
                      },
                      "canceledSubscriptionsCount": {
                        "type": "integer",
                        "description": "Number of canceled subscriptions within the specified retention period."
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ReportRetentionValue": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Retention value data.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Contains an aggregation.",
              "readOnly": true,
              "properties": {
                "aggregationValue": {
                  "type": "string",
                  "description": "Value by which the report provides retention periods and values.\nDate values are displayed as follows:\n\n- Day: `YYYY-MM-DD`.\n- Month: `YYYY-MM`.\n- Quarter: `YYYY-MM`/`YYYY-MM`.\n- Year: `YYYY`."
                },
                "customersCount": {
                  "type": "integer",
                  "description": "Number of customers within the aggregation who make their first payment."
                },
                "periods": {
                  "description": "Periods of the specified aggregation.",
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "period": {
                        "type": "integer",
                        "description": "Retention period number.\nThis value is measured from the beginning boundary of the aggregation.\n  - `0`: First period.\n  - `1`: Second period.\n  - `2`: Third period, and so on."
                      },
                      "retentionAverage": {
                        "type": "number",
                        "format": "double",
                        "description": "Summary amount of all transactions for all periods up to the current period divided by the aggregation customer number."
                      },
                      "transactionsCount": {
                        "type": "integer",
                        "description": "Number of transactions that occurred within the retention period.\nFor example, in 3 rebills."
                      },
                      "transactionsValue": {
                        "type": "number",
                        "format": "double",
                        "description": "Total value of transactions.\nThis value is calculated based on: `income transactions` minus `loss transactions`."
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ReportRevenueWaterfall": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "issuedMonth": {
              "description": "Month when the revenue invoice is issued.",
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}$",
              "example": "2022-02"
            },
            "booked": {
              "description": "Month when the revenue amount is booked.",
              "type": "number",
              "format": "double",
              "example": 25
            },
            "recognized": {
              "description": "Amount of recognized revenue amount up to, and including, the `recognizedTo` month.",
              "type": "number",
              "format": "double",
              "example": 20
            },
            "remaining": {
              "description": "Amount of revenue that remains to be recognized after the `recognizedTo` month.",
              "type": "number",
              "format": "double",
              "example": 5
            },
            "waterfall": {
              "type": "array",
              "description": "Recognized revenue waterfall for each month.",
              "items": {
                "type": "object",
                "properties": {
                  "recognizedMonth": {
                    "description": "Month when revenue is recognized.",
                    "type": "string",
                    "pattern": "^\\d{4}-\\d{2}$",
                    "example": "2022-04"
                  },
                  "amount": {
                    "description": "Amount of revenue recognized at the `recognizedMonth`.",
                    "type": "number",
                    "format": "double"
                  }
                }
              },
              "example": [
                {
                  "recognizedMonth": "2022-02",
                  "amount": 4.4
                },
                {
                  "recognizedMonth": "2022-03",
                  "amount": 8.33
                },
                {
                  "recognizedMonth": "2022-04",
                  "amount": 7.27
                }
              ]
            }
          }
        }
      },
      "SubscriptionCancellationReport": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Subscription cancellation data.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Contains an aggregation.",
              "readOnly": true,
              "properties": {
                "aggregationValue": {
                  "type": "string",
                  "description": "Aggregation value."
                },
                "count": {
                  "type": "integer",
                  "description": "Total number of canceled subscriptions."
                },
                "averageLength": {
                  "type": "number",
                  "format": "double",
                  "description": "Average length of canceled subscription from start to end within the aggregation in seconds."
                },
                "medianLength": {
                  "type": "number",
                  "format": "double",
                  "description": "Median length of canceled subscription from start to end within the aggregation in seconds."
                }
              }
            }
          }
        }
      },
      "SubscriptionRenewal": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Subscription renewal data.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Contains an aggregation.",
              "readOnly": true,
              "properties": {
                "planId": {
                  "type": "string",
                  "description": "Plan ID for which subscriptions are counted.",
                  "maxLength": 50,
                  "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
                },
                "allRenewalCount": {
                  "type": "integer",
                  "description": "Total number of renewed subscriptions."
                },
                "allDunningCount": {
                  "type": "integer",
                  "description": "Total number of dunned subscriptions.\nDunning is the process of retrying unsuccessful payment transactions."
                },
                "abandonedCount": {
                  "type": "integer",
                  "description": "Total number of abandoned subscriptions."
                },
                "paidRenewalCount": {
                  "type": "integer",
                  "description": "Total number of paid renewed subscriptions.\nTo determine the renewal rate,\ndivide the value of this field by the `allRenewalCount` value."
                },
                "paidDunningCount": {
                  "type": "integer",
                  "description": "Total number of paid dunned subscriptions.\nTo determine the dunning success rate,\ndivide the value of this field by the `allDunningCount` value."
                },
                "refundedRenewalCount": {
                  "type": "integer",
                  "description": "Total number of paid renewed subscriptions.\nTo determine the renewal refund rate,\ndivide the value of this field by the `allRenewalCount` value."
                },
                "refundedDunningCount": {
                  "type": "integer",
                  "description": "Total number of paid dunned subscriptions.\nTo determine the dunning refund rate,\ndivide the value of this field by the `allDunningCount` value."
                },
                "chargebackRenewalCount": {
                  "type": "integer",
                  "description": "Total number of paid renewed subscriptions.\nTo determine the renewal chargeback rate,\ndivide the value of this field by the `allRenewalCount` value."
                },
                "chargebackDunningCount": {
                  "type": "integer",
                  "description": "Total number of paid dunned subscriptions.\nTo determine the dunning chargeback rate,\ndivide the value of this field by the `allDunningCount` value."
                }
              }
            }
          }
        }
      },
      "ReportTax": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Tax data.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "country": {
                  "description": "Country to which the tax is owed, in [ISO Alpha-2 code format](https://www.iso.org/obp/ui/#search/code/).",
                  "type": "string",
                  "example": "US"
                },
                "state": {
                  "description": "Postal abbreviated state name for the state to which the tax is owed.",
                  "type": "string",
                  "example": "TX"
                },
                "county": {
                  "description": "Name of county to which the tax is owed.",
                  "type": "string",
                  "example": "TRAVIS"
                },
                "city": {
                  "description": "Name of city to which the tax is owed.",
                  "type": "string",
                  "example": "AUSTIN"
                },
                "stateRate": {
                  "description": "Percentage rate of state tax.",
                  "type": "number",
                  "format": "double"
                },
                "stateAmount": {
                  "description": "Amount of state tax.",
                  "type": "number",
                  "format": "double"
                },
                "countyRate": {
                  "description": "Percentage rate of county tax.",
                  "type": "number",
                  "format": "double"
                },
                "countyAmount": {
                  "description": "Amount of county tax.",
                  "type": "number",
                  "format": "double"
                },
                "cityRate": {
                  "description": "Percentage rate of city tax.",
                  "type": "number",
                  "format": "double"
                },
                "cityAmount": {
                  "description": "Amount of city tax.",
                  "type": "number",
                  "format": "double"
                },
                "specialDistrictRate": {
                  "description": "Percentage rate of special district tax.",
                  "type": "number",
                  "format": "double"
                },
                "specialDistrictAmount": {
                  "description": "Amount of special district tax.",
                  "type": "number",
                  "format": "double"
                },
                "taxableSalesAmount": {
                  "description": "Amount of taxable sales.",
                  "type": "number",
                  "format": "double"
                },
                "nontaxableSalesAmount": {
                  "description": "Amount of nontaxable sales.",
                  "type": "number",
                  "format": "double"
                }
              }
            }
          }
        }
      },
      "TimeSeriesTransaction": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Time series data.",
            "type": "array",
            "items": {
              "type": "object",
              "description": "Contains an aggregation.",
              "readOnly": true,
              "properties": {
                "date": {
                  "type": "string",
                  "description": "Date in `YYYY-MM-DD` format."
                },
                "total": {
                  "type": "number",
                  "format": "double",
                  "description": "Aggregated value for all transactions for the day, in the unit specified by the `type` parameter:\n  - `count`: Total number of transactions.\n  - `amount`: Total amount of approved transactions in the merchant reporting currency.\n  - `approval-rate`: Ratio of approved transactions to all transactions.\n  - `incomplete-rate`: Ratio of incomplete transactions to all transactions.\n\nThis value does not depend on the `subaggregate` parameter and is not the sum of the values in `subaggregates`.\nEach transaction is included once, even if the `subaggregate` field contains multiple values for the transaction.\nTransactions with no value for the `subaggregate` field are also included."
                },
                "subaggregates": {
                  "type": "array",
                  "description": "Breakdown by the `subaggregate` field for the day.\nEach element contains one `subaggregate` value and its aggregated value.\nEach `subaggregate` value found in the report has an element,\nin the same order for each day.",
                  "items": {
                    "type": "object",
                    "properties": {
                      "subaggregate": {
                        "type": "string",
                        "description": "One value of the `subaggregate` field, such as a website ID, a currency code, or a lead source."
                      },
                      "value": {
                        "type": "number",
                        "format": "double",
                        "description": "Aggregated value for transactions that have this `subaggregate` value,\nin the same unit as `total`.\nThis value is `0` if no transactions have this `subaggregate` value."
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "ReportDisputeDelays": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Dispute delay data.",
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "aggregationFieldValue": {
                  "description": "Aggregation field value.\nThis value is defined in the `aggregationField` parameter by using a query.\nFor example, this value could be: website or country.",
                  "type": "string"
                },
                "25th": {
                  "description": "Delay between dispute and transaction time at the 25th percentile.",
                  "type": "integer"
                },
                "50th": {
                  "description": "Delay between dispute and transaction time at the 50th percentile.",
                  "type": "integer"
                },
                "75th": {
                  "description": "Delay between dispute and transaction time at the 75th percentile.",
                  "type": "integer"
                }
              }
            }
          }
        }
      },
      "ReportTransactions": {
        "type": "object",
        "properties": {
          "data": {
            "description": "Transaction data.",
            "type": "array",
            "readOnly": true,
            "items": {
              "type": "object",
              "properties": {
                "aggregationFieldValue": {
                  "description": "Aggregation field value.",
                  "type": "string"
                },
                "authApprovedThroughput": {
                  "description": "Percentage of approved authentication transactions.",
                  "type": "number",
                  "format": "double"
                },
                "approvedThroughput": {
                  "description": "Percentage of approved sale transactions.",
                  "type": "number",
                  "format": "double"
                },
                "authApprovalCount": {
                  "description": "Total number of approved authentication transactions.",
                  "type": "integer"
                },
                "disputesRate": {
                  "description": "Percentage of disputed sale and capture transactions.",
                  "type": "number",
                  "format": "double"
                },
                "disputesCount": {
                  "description": "Total number of disputed sale and capture transactions.",
                  "type": "integer"
                },
                "salesCount": {
                  "description": "Total number of sales.",
                  "type": "integer"
                },
                "salesValue": {
                  "description": "Total sales value.",
                  "type": "number",
                  "format": "double"
                },
                "salesAverage": {
                  "description": "Average sales value.",
                  "type": "number",
                  "format": "double"
                },
                "refundsCount": {
                  "description": "Total number of refunds.",
                  "type": "integer"
                },
                "refundsValue": {
                  "description": "Total value of refunds.",
                  "type": "number",
                  "format": "double"
                },
                "amount": {
                  "description": "Amount of revenue.\nThis value is the result of `salesValue` minus `refundsValue`.",
                  "type": "number",
                  "format": "double"
                },
                "count": {
                  "description": "Total number of transactions.",
                  "type": "number",
                  "format": "double"
                },
                "unapprovedCount": {
                  "description": "Total number of unapproved transactions.",
                  "type": "number",
                  "format": "double"
                }
              }
            }
          }
        }
      },
      "SubscriptionSummaryMetrics": {
        "type": "object",
        "required": [
          "currency",
          "invoicedAmount",
          "collectedAmount",
          "invoiceCount"
        ],
        "properties": {
          "currency": {
            "description": "Currency code in ISO 4217 format.",
            "minLength": 3,
            "maxLength": 3,
            "example": "USD",
            "readOnly": true,
            "type": "string"
          },
          "invoicedAmount": {
            "description": "Total amount of all issued, past due, and paid invoices.",
            "readOnly": true,
            "type": "number",
            "format": "double"
          },
          "collectedAmount": {
            "description": "Total amount of all paid invoices.",
            "readOnly": true,
            "type": "number",
            "format": "double"
          },
          "invoiceCount": {
            "description": "Number of issued, past due, or paid invoices.",
            "readOnly": true,
            "type": "integer"
          }
        }
      },
      "StorefrontAccount": {
        "type": "object",
        "properties": {
          "id": {
            "description": "ID of the account.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "websiteId": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/WebsiteId"
              }
            ]
          },
          "username": {
            "type": "string",
            "description": "Username associated with the account.",
            "readOnly": true
          },
          "primaryAddress": {
            "$ref": "#/components/schemas/ContactObject"
          },
          "paymentToken": {
            "type": "string",
            "writeOnly": true,
            "description": "Write-only payment token.\nIf this value is supplied, it converts into a payment instrument and set as the `defaultPaymentInstrument`.\nThe value of this property overrides the `defaultPaymentInstrument` if both are supplied.\nThis token may only be used once before it expires."
          },
          "defaultPaymentInstrument": {
            "type": "object",
            "description": "Default payment instrument.\nThe default payment instrument is used to automatically pay subscription renewals,\nand for transaction requests where a specific payment instrument is not provided.",
            "required": [
              "method"
            ],
            "properties": {
              "method": {
                "$ref": "#/components/schemas/PaymentMethod"
              },
              "paymentInstrumentId": {
                "type": "string",
                "description": "ID of the payment instrument.",
                "maxLength": 50,
                "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
              }
            }
          },
          "preferredPayoutInstrumentId": {
            "type": [
              "string",
              "null"
            ],
            "description": "ID of the customer's preferred payment instrument for payouts.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N",
            "default": null
          },
          "isVerified": {
            "type": "boolean",
            "description": "Verification status of the email address associated with the account.",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "taxNumbers": {
            "type": [
              "array",
              "null"
            ],
            "description": "Tax numbers associated with the account.",
            "items": {
              "$ref": "#/components/schemas/TaxNumber"
            }
          },
          "notificationEmails": {
            "type": "array",
            "description": "Email addresses for notification delivery in event-based email notifications.\nWhen you configure event-based email notifications, you can send to these addresses, the customer's primary email address, or another email address you specify.\nFor more information, see [Manage notification emails](https://www.rebilly.com/docs/data-tables/manage-customer-information#manage-notification-emails).",
            "items": {
              "type": "string",
              "format": "email"
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "website": {
                "type": "object"
              },
              "leadSource": {
                "type": "object"
              }
            }
          }
        }
      },
      "StorefrontBillingPortal": {
        "type": "object",
        "required": [
          "websiteId",
          "slug"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the billing portal.",
            "readOnly": true,
            "maxLength": 50,
            "example": "bill_prt_0YV7K5TYV5D1P9ZNKDT39KZC3C"
          },
          "token": {
            "description": "Session token for authentication in the billing portal.",
            "type": "string",
            "readOnly": true
          },
          "slug": {
            "description": "Path segment that is appended to the billing portal URL to help make it human-readable.\nExample: `https://example.com/billing-portal/{slug}`.",
            "type": "string",
            "minLength": 5,
            "maxLength": 100
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "features": {
            "description": "Features that can be enabled for the billing portal.",
            "type": "object",
            "properties": {
              "authenticateWithPassword": {
                "description": "Specifies if a customer can authenticate with a password.",
                "type": "boolean",
                "default": true
              },
              "orderCancel": {
                "description": "Specifies if a customer can cancel an order.",
                "type": "boolean",
                "default": true
              },
              "orderAddressEdit": {
                "description": "Specifies if a customer can change an order address.",
                "type": "boolean",
                "default": true
              },
              "paymentInstrumentAdd": {
                "description": "Specifies if a customer can add a new payment instrument.",
                "type": "boolean",
                "default": true
              },
              "paymentInstrumentUpdate": {
                "description": "Specifies if a customer can update their payment instruments.",
                "type": "boolean",
                "default": true
              },
              "paymentInstrumentDeactivate": {
                "description": "Specifies if a customer can disable their payment instruments.",
                "type": "boolean",
                "default": true
              }
            }
          },
          "customization": {
            "description": "Visual customization options for the billing portal.",
            "type": "object",
            "properties": {
              "logoId": {
                "description": "ID of the linked file object.",
                "$ref": "#/components/schemas/ResourceId"
              },
              "colors": {
                "description": "Various colors used in the billing portal.",
                "type": "object",
                "properties": {
                  "primary": {
                    "description": "Primary color for the billing portal in hexadecimal format.",
                    "type": "string",
                    "maxLength": 6,
                    "default": "0044d4"
                  },
                  "secondary": {
                    "description": "Secondary color for the billing portal in hexadecimal format.",
                    "type": "string",
                    "maxLength": 6,
                    "default": "ffffff"
                  }
                }
              },
              "links": {
                "description": "URLs that are displayed in the billing portal.",
                "type": "object",
                "properties": {
                  "refundPolicy": {
                    "description": "Website refund policy URL.",
                    "type": "string",
                    "format": "uri"
                  },
                  "privacyPolicy": {
                    "description": "Website privacy policy URL.",
                    "type": "string",
                    "format": "uri"
                  },
                  "termsOfService": {
                    "description": "Website terms of service URL.",
                    "type": "string",
                    "format": "uri"
                  }
                }
              }
            }
          },
          "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",
                    "logoUrl"
                  ]
                }
              }
            }
          }
        }
      },
      "ReadyToPayoutFeature": {
        "type": "object",
        "description": "Feature indicators for payout method behavior.",
        "properties": {
          "requiresSetupTransaction": {
            "type": "boolean",
            "description": "Specifies if the payout method requires a setup transaction for each payout."
          }
        }
      },
      "StorefrontCashier": {
        "type": "object",
        "required": [
          "id",
          "websiteId",
          "redirectUrl",
          "currency",
          "balance",
          "bonusBalance",
          "pendingPayoutTotal",
          "canWithdraw",
          "depositAmounts",
          "defaultDepositAmount",
          "depositCustomAmount",
          "depositMethods",
          "payoutMethods",
          "coinPurchase"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "Unique identifier of the cashier resource.",
            "maxLength": 50,
            "example": "cashier_0YV7DE4Z26DQSA1AC92FBJ7SEG"
          },
          "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.",
            "readOnly": true,
            "example": 1500
          },
          "bonusBalance": {
            "type": "number",
            "format": "double",
            "minimum": 0,
            "description": "Bonus balance available to the customer.",
            "readOnly": true,
            "example": 1500
          },
          "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.",
            "readOnly": true,
            "example": 100
          },
          "canWithdraw": {
            "type": "boolean",
            "readOnly": true,
            "description": "Specifies if the customer can initiate a withdrawal."
          },
          "depositMethods": {
            "type": "array",
            "items": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/ReadyToPayMethods"
                },
                {
                  "type": "object",
                  "required": [
                    "amounts"
                  ],
                  "properties": {
                    "amounts": {
                      "type": "array",
                      "items": {
                        "type": "number",
                        "format": "double",
                        "minimum": 0.01
                      },
                      "example": [
                        10,
                        20,
                        50
                      ]
                    }
                  }
                }
              ]
            }
          },
          "payoutMethods": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "method"
              ],
              "properties": {
                "method": {
                  "type": "string",
                  "example": "payment-card"
                },
                "feature": {
                  "$ref": "#/components/schemas/ReadyToPayoutFeature"
                }
              }
            }
          },
          "depositAmounts": {
            "type": "array",
            "items": {
              "type": "number",
              "format": "double",
              "minimum": 0.01
            },
            "example": [
              10,
              20
            ],
            "description": "List of predefined deposit amounts that the customer can choose from."
          },
          "depositCustomAmount": {
            "type": "object",
            "required": [
              "minimum",
              "maximum",
              "multipleOf"
            ],
            "properties": {
              "minimum": {
                "type": "number",
                "format": "double",
                "minimum": 0.01,
                "example": 10
              },
              "maximum": {
                "type": "number",
                "format": "double",
                "minimum": 0.01,
                "example": 1000
              },
              "multipleOf": {
                "type": "number",
                "format": "double",
                "minimum": 0.01,
                "example": 0.5
              },
              "buttonText": {
                "type": [
                  "object",
                  "null"
                ],
                "description": "Localized overrides for the custom amount button label, as a map of locale codes to display strings.\nFor example, `{\"en-US\": \"Other amount\", \"fr\": \"Montant personnalisé\"}`.\nIf this value is `null` or not provided, the default UI translation is used.",
                "additionalProperties": {
                  "type": "string"
                },
                "example": {
                  "en-US": "Other amount",
                  "fr": "Montant personnalisé"
                }
              }
            },
            "description": "Custom amount restrictions.\nIf this value is not specified, custom amounts are prohibited."
          },
          "defaultDepositAmount": {
            "type": [
              "number",
              "null"
            ],
            "format": "double",
            "minimum": 0.01,
            "description": "Value of the default amount in the `depositAmounts` list.\nThis value is calculated from the `defaultIndex` property of the deposit strategy that is applied to the deposit request."
          },
          "coinPurchase": {
            "type": "boolean",
            "readOnly": true,
            "description": "Specifies if the deposit is a coin purchase that credits the coin balance instead of the cash balance.\nDetermined by the deposit amount strategy that is applied to the deposit request."
          },
          "lastDepositRequestId": {
            "type": "string",
            "description": "ID of the last deposit request that is made for this cashier.",
            "example": "dep_req_01K2HMPNTBDS92TA6W4EX3VJPM"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "PostCashierPayoutRequestCancellation": {
        "type": "object",
        "required": [
          "amount"
        ],
        "properties": {
          "amount": {
            "description": "Pending payout request amount to be canceled.",
            "type": "number",
            "format": "double",
            "minimum": 0,
            "example": 1500
          }
        }
      },
      "StorefrontTransactionRedirectUrl": {
        "type": [
          "string",
          "null"
        ],
        "description": "URL to redirect the end-user when an offsite transaction is completed.\nIf `website.url` is `https://example.com`, then the `redirectUrl` could be set to any of these:\n\n- `https://example.com`\n\n- `https://example.com/some/path`\n\n- `https://example.com/some/path?and=query`\n\n- `https://example.com/some/path?and=query#and-fragment`\n\nDefaults to the website URL.\nYou may use `{id}` or `{result}` as placeholders in the URL and we replace them with the transaction id and result accordingly.",
        "maxLength": 2083,
        "format": "uri",
        "writeOnly": true
      },
      "StorefrontTransaction": {
        "type": "object",
        "description": "Transaction information.",
        "properties": {
          "id": {
            "readOnly": true,
            "$ref": "#/components/schemas/TransactionId"
          },
          "websiteId": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/WebsiteId"
              }
            ]
          },
          "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.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "completed",
              "conn-error",
              "disputed",
              "never-sent",
              "offsite",
              "partially-refunded",
              "pending",
              "refunded",
              "sending",
              "timeout",
              "voided",
              "waiting-approval",
              "waiting-capture",
              "waiting-gateway",
              "waiting-refund"
            ]
          },
          "result": {
            "description": "Result of the transaction.",
            "type": "string",
            "x-basic": true,
            "readOnly": true,
            "enum": [
              "abandoned",
              "approved",
              "canceled",
              "declined",
              "unknown"
            ]
          },
          "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.",
            "$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"
            }
          },
          "orderIds": {
            "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"
          },
          "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. This ID must be unique within a 24 hour period.\nUse this field to prevent duplicated 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"
              }
            ]
          },
          "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"
                    ]
                  },
                  "humanMessage": {
                    "description": "Human-readable gateway response message.",
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "humanDescription": {
                    "description": "Human-readable gateway response description with more detailed information.",
                    "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"
                    ]
                  }
                }
              }
            }
          },
          "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"
          },
          "paymentInstrument": {
            "type": "object",
            "description": "Default payment instrument information.",
            "required": [
              "method"
            ],
            "properties": {
              "method": {
                "$ref": "#/components/schemas/PaymentMethod"
              },
              "paymentInstrumentId": {
                "type": "string",
                "description": "ID of the payment instrument.",
                "maxLength": 50,
                "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
              }
            }
          },
          "approvalUrl": {
            "description": "URL to redirect the end-customer when transaction `status` is `waiting-approval` or `offsite`.",
            "type": "string",
            "format": "uri"
          },
          "hasDcc": {
            "description": "Specifies if Dynamic Currency Conversion (DCC) applies to the transaction.",
            "type": "boolean",
            "readOnly": true
          },
          "dcc": {
            "description": "Details of the 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"
              },
              "outcome": {
                "type": "string",
                "description": "Outcome of the dynamic currency conversion.",
                "enum": [
                  "unprocessed",
                  "rejected",
                  "selected"
                ]
              },
              "rate": {
                "description": "Exchange rate for 1 major unit of the base currency, expressed in the quote currency.",
                "type": "number",
                "format": "double",
                "example": 1.25
              },
              "isForceDcc": {
                "description": "Specifies if Dynamic Currency Conversion (DCC) is forced for the transaction.",
                "type": "boolean"
              }
            }
          },
          "token": {
            "description": "Session token used for authentication.\nThis token provides access to created orders, invoices, and transactions.",
            "type": "string",
            "readOnly": true
          },
          "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"
          },
          "_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",
                    "approvalUrl",
                    "approvalContinue",
                    "approvalBypass",
                    "cancelUrl",
                    "redirectUrl"
                  ]
                }
              }
            }
          }
        }
      },
      "StorefrontCheckoutForm": {
        "type": "object",
        "required": [
          "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": {
            "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": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CheckoutFormPlan"
            }
          },
          "bumpPlans": {
            "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": [],
            "type": "array",
            "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.",
                "$ref": "#/components/schemas/ResourceId"
              },
              "summary": {
                "description": "Summary text.",
                "type": "string"
              },
              "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",
                    "format": "uri"
                  },
                  "privacyPolicy": {
                    "description": "Website privacy policy URL.",
                    "type": "string",
                    "format": "uri"
                  },
                  "termsOfService": {
                    "description": "Website terms of service URL.",
                    "type": "string",
                    "format": "uri"
                  }
                }
              },
              "tracking": {
                "description": "Tracking system IDs.",
                "type": "object",
                "properties": {
                  "googleAnalytics": {
                    "description": "Google Analytics tracking ID.",
                    "type": "string",
                    "example": "UA-XXXXX-YY"
                  },
                  "googleTagManager": {
                    "description": "Google Tag Manager tracking ID.",
                    "type": "string",
                    "example": "GTM-XXXXX"
                  },
                  "gtagJs": {
                    "description": "Google Analytics tracking ID.\nThis value is used by Google Global Site Tag (gtag.js) service.",
                    "type": "string",
                    "example": "UA-XXXXX-YY"
                  },
                  "facebookPixel": {
                    "description": "Facebook Pixel tracking ID.",
                    "type": "string",
                    "example": "1234567890"
                  },
                  "segmentAnalytics": {
                    "description": "Segment Analytics tracking ID.",
                    "type": "string",
                    "example": "1234567890"
                  },
                  "heapIo": {
                    "description": "Heap.io tracking ID.",
                    "type": "string",
                    "example": "1234567890"
                  }
                }
              },
              "requiredAdditionalFields": {
                "description": "List of required fields.",
                "type": "array",
                "items": {
                  "type": "string"
                },
                "example": [
                  "information.companyName",
                  "information.phoneNumber"
                ]
              }
            }
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "token": {
            "description": "Session token that is used for authentication.",
            "type": "string",
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontInvoice": {
        "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"
          },
          "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"
          },
          "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"
          },
          "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",
            "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",
              "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,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "voidedTime": {
            "description": "Date and time when the invoice is voided.",
            "x-sortable": true,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "paidTime": {
            "x-label": "Payment Date",
            "x-sortable": true,
            "x-basic": true,
            "description": "Date and time when the invoice is paid.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "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",
            "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`."
          },
          "transactions": {
            "type": "array",
            "description": "Invoice transactions array.",
            "readOnly": true,
            "items": {
              "$ref": "#/components/schemas/StorefrontTransaction"
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontUpcomingInvoice": {
        "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"
          },
          "orderId": {
            "description": "ID of the order.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "ord_01HVKA5975PJBSQ1SX72G3MSZC"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "items": {
            "type": "array",
            "description": "Upcoming invoice items array.",
            "items": {
              "$ref": "#/components/schemas/UpcomingInvoiceItem"
            }
          },
          "amount": {
            "description": "Amount of the invoice.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "amountDue": {
            "description": "Amount that is due on the invoice.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "subtotalAmount": {
            "description": "Subtotal amount of the invoice.",
            "type": "number",
            "format": "double",
            "readOnly": true
          },
          "discountAmount": {
            "description": "Discount amount that is applied to the invoice.",
            "type": "number",
            "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",
            "format": "date-time"
          },
          "issuedTime": {
            "description": "Date and time when the invoice is issued.",
            "$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"
                  ]
                }
              }
            }
          }
        }
      },
      "StorefrontKycDocumentTypes": {
        "type": "string",
        "enum": [
          "identity-proof",
          "address-proof",
          "funds-proof",
          "purchase-proof"
        ]
      },
      "StorefrontKycIdentityMatches": {
        "type": "object",
        "description": "Matched identity data returned to the customer.",
        "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
          },
          "firstName": {
            "description": "First name of the customer.\nThis value is an empty string if no match is found.",
            "type": "string",
            "example": "John"
          },
          "lastName": {
            "description": "Last name of the customer.\nThis value is an empty string if no match is found.",
            "type": "string",
            "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+ for the 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"
          },
          "sex": {
            "description": "MRZ sex code (ICAO 9303).\n`M`, `F`, or `X`.\nThis value is `null` if not extracted.",
            "type": [
              "string",
              "null"
            ],
            "pattern": "^[MFX]$",
            "example": "M"
          },
          "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.\nThis value is `null` if face proof is not required or not performed.",
            "type": [
              "boolean",
              "null"
            ],
            "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
          }
        }
      },
      "StorefrontProofOfIdentityKycDocument": {
        "type": "object",
        "required": [
          "documentType",
          "status"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "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": {
              "$ref": "#/components/schemas/ResourceId"
            }
          },
          "documentType": {
            "description": "Document type submitted for validation.\nOnly the `identity-proof` and `address-proof` types are analyzed automatically.",
            "$ref": "#/components/schemas/StorefrontKycDocumentTypes"
          },
          "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",
            "format": "date-time",
            "readOnly": true
          },
          "documentMatches": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Document matches.",
            "properties": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "data": {
                "$ref": "#/components/schemas/StorefrontKycIdentityMatches"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontKycAddressMatches": {
        "type": "object",
        "description": "Matched address data returned to the customer.",
        "properties": {
          "firstName": {
            "description": "First name of the customer.\nThis value is an empty string if no match is found.",
            "type": "string",
            "example": "John"
          },
          "lastName": {
            "description": "Last name of the customer.\nThis value is an empty string if no match is found.",
            "type": "string",
            "example": "Doe"
          },
          "line1": {
            "description": "Address of the customer's residence.\nThis value is an empty string if no match is found.",
            "type": "string",
            "example": "36 Craven St"
          },
          "city": {
            "description": "Customer's city of residence.\nThis value is an empty string if no match is found.",
            "type": "string",
            "example": "London"
          },
          "region": {
            "description": "Customer's region of residence.\nThis value is an empty string if no match is found.",
            "type": "string",
            "example": "London"
          },
          "postalCode": {
            "description": "Postal code of the customer's residence.\nThis value is an empty string if no match is found.",
            "type": "string",
            "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-time",
            "example": "2021-01-01T00:00:00+00:00"
          },
          "phone": {
            "description": "Phone number of the company or agency that issued the document.\nThis value is an empty string if no phone number is detected.",
            "type": "string",
            "example": "(123) 456-7890"
          },
          "documentSubtype": {
            "description": "Interpreted subtype of the uploaded document.",
            "type": [
              "string",
              "null"
            ],
            "$ref": "#/components/schemas/KycDocumentSubtypes"
          }
        }
      },
      "StorefrontProofOfAddressKycDocument": {
        "type": "object",
        "required": [
          "documentType",
          "status"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "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": {
              "$ref": "#/components/schemas/ResourceId"
            }
          },
          "documentType": {
            "description": "Document type submitted for validation.\nOnly the `identity-proof` and `address-proof` types are analyzed automatically.",
            "$ref": "#/components/schemas/StorefrontKycDocumentTypes"
          },
          "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",
            "format": "date-time",
            "readOnly": true
          },
          "documentMatches": {
            "description": "Document matches.",
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "properties": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "data": {
                "$ref": "#/components/schemas/StorefrontKycAddressMatches"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontProofOfFundsKycDocument": {
        "type": "object",
        "required": [
          "documentType",
          "status"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "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": {
              "$ref": "#/components/schemas/ResourceId"
            }
          },
          "documentType": {
            "description": "Document type submitted for validation.\nOnly the `identity-proof` and `address-proof` types are analyzed automatically.",
            "$ref": "#/components/schemas/StorefrontKycDocumentTypes"
          },
          "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",
            "format": "date-time",
            "readOnly": true
          },
          "documentMatches": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Document matches.",
            "properties": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "data": {
                "$ref": "#/components/schemas/FundsMatches"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontProofOfPurchaseKycDocument": {
        "type": "object",
        "required": [
          "documentType",
          "status"
        ],
        "properties": {
          "id": {
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "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": {
              "$ref": "#/components/schemas/ResourceId"
            }
          },
          "documentType": {
            "description": "Document type submitted for validation.\nOnly the `identity-proof` and `address-proof` types are analyzed automatically.",
            "$ref": "#/components/schemas/StorefrontKycDocumentTypes"
          },
          "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",
            "format": "date-time",
            "readOnly": true
          },
          "documentMatches": {
            "type": [
              "object",
              "null"
            ],
            "readOnly": true,
            "description": "Document matches.",
            "properties": {
              "version": {
                "$ref": "#/components/schemas/KycDocumentMatchesVersion"
              },
              "data": {
                "$ref": "#/components/schemas/PurchaseMatches"
              }
            }
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontKycDocument": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/StorefrontProofOfIdentityKycDocument"
          },
          {
            "$ref": "#/components/schemas/StorefrontProofOfAddressKycDocument"
          },
          {
            "$ref": "#/components/schemas/StorefrontProofOfFundsKycDocument"
          },
          {
            "$ref": "#/components/schemas/StorefrontProofOfPurchaseKycDocument"
          }
        ],
        "discriminator": {
          "propertyName": "documentType",
          "mapping": {
            "identity-proof": "#/components/schemas/StorefrontProofOfIdentityKycDocument",
            "address-proof": "#/components/schemas/StorefrontProofOfAddressKycDocument",
            "funds-proof": "#/components/schemas/StorefrontProofOfFundsKycDocument",
            "purchase-proof": "#/components/schemas/StorefrontProofOfPurchaseKycDocument"
          }
        }
      },
      "StorefrontKycRequest": {
        "type": "object",
        "description": "KYC request information.",
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the KYC request.",
            "maxLength": 50,
            "example": "kyc_req_0YV7JMJ3DBCGRBR7K9D4HVGPP5"
          },
          "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",
            "format": "uri"
          },
          "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"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "documents": {
                "type": "array"
              }
            }
          }
        }
      },
      "StorefrontKycLivenessSession": {
        "type": "object",
        "description": "KYC liveness session information.",
        "required": [
          "customerId"
        ],
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "ID of the KYC liveness session.",
            "maxLength": 50,
            "example": "kyc_liv_01HXBZ0MS1GPS6S34MPQXYT5TZ"
          },
          "customerId": {
            "$ref": "#/components/schemas/CustomerId",
            "readOnly": true
          },
          "kycRequestId": {
            "type": "string",
            "description": "ID of the KYC request that the liveness session is associated with.",
            "maxLength": 50,
            "example": "kyc_req_0YV7JMJ3DBCGRBR7K9D4HVGPP5"
          },
          "sessionId": {
            "type": "string",
            "readOnly": true,
            "description": "Session ID of the KYC liveness session in the third-party service.",
            "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
          },
          "status": {
            "description": "Status of the session.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "succeeded",
              "failed",
              "abandoned"
            ],
            "x-enumDescriptions": {
              "pending": "Session is created, but not processed yet.\nThis is a temporary state.",
              "succeeded": "Session has succeeded.\nThis is a permanent state.",
              "failed": "Session has failed.\nThis is a permanent state.",
              "abandoned": "Session was not completed and timed out.\nThis is a permanent state."
            }
          },
          "referenceImage": {
            "type": [
              "string",
              "null"
            ],
            "readOnly": true,
            "description": "URL of the reference image.",
            "format": "uri",
            "example": "https://app.rebilly.com/static/gateways/Stripe.png"
          },
          "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",
                    "kycRequest"
                  ]
                }
              }
            }
          }
        }
      },
      "StorefrontCustomerJWT": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the session.",
            "readOnly": true,
            "maxLength": 50,
            "example": "jwt_0YV7DEJX80CDRAKVTV478ZNJDR"
          },
          "token": {
            "description": "Session token for authentication in the billing portal.",
            "type": "string",
            "readOnly": true
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "expiredTime": {
            "description": "Date and time when the session expired.\nThe default value is one hour after the `createdTime` value.",
            "type": "string",
            "format": "date-time"
          }
        }
      },
      "StorefrontSubscriptionOrOneTimeSaleItem": {
        "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": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/OriginalPlan"
              },
              {
                "$ref": "#/components/schemas/FlexiblePlan"
              }
            ]
          },
          "usageLimits": {
            "oneOf": [
              {
                "$ref": "#/components/schemas/UsageLimits"
              },
              {
                "type": "null"
              }
            ],
            "default": null
          },
          "usageStatus": {
            "type": [
              "object",
              "null"
            ],
            "default": null,
            "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
              }
            }
          },
          "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 same recurring period length,\nthis property enables the customer to subscribe to different plans.",
            "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",
            "readOnly": true,
            "x-sortable": true
          },
          "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"
              }
            }
          }
        }
      },
      "StorefrontSubscription": {
        "type": "object",
        "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.",
            "type": "string",
            "enum": [
              "subscription-order",
              "one-time-order"
            ],
            "default": "subscription-order"
          },
          "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"
              }
            ]
          },
          "orderId": {
            "description": "ID of the order.",
            "readOnly": true,
            "type": [
              "string",
              "null"
            ],
            "maxLength": 50,
            "example": "ord_01HVKA5975PJBSQ1SX72G3MSZC"
          },
          "currency": {
            "description": "Currency of the order.",
            "readOnly": true,
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "initialInvoiceId": {
            "type": "string",
            "description": "ID of the initial invoice.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "recentInvoiceId": {
            "type": "string",
            "description": "ID of the most recently issued invoice.\nThe invoice might not be `paid` yet.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "items": {
            "description": "Details of items in the order.",
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/StorefrontSubscriptionOrOneTimeSaleItem"
            }
          },
          "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,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "voidTime": {
            "description": "Date and time when the order is voided.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "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"
          },
          "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",
                "readOnly": true
              },
              "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
          },
          "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": {
            "deprecated": true,
            "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 same recurring period length,\nthis property enables the customer to subscribe to different plans.",
            "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,
            "default": null,
            "format": "date-time"
          },
          "churnTime": {
            "description": "Date and time when the subscription is deactivated.",
            "x-sortable": true,
            "type": "string",
            "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": {
            "deprecated": true,
            "description": "Current billing period number.",
            "type": "integer",
            "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 the upcoming invoice item 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 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": {
            "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
              }
            }
          },
          "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"
          },
          "canceledTime": {
            "description": "Date and time when the subscription order is canceled.",
            "x-label": "Cancellation time",
            "x-sortable": true,
            "x-basic": true,
            "type": "string",
            "format": "date-time",
            "readOnly": true
          },
          "canceledBy": {
            "description": "Specifies who initiated the cancellation.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "merchant",
              "customer",
              "rebilly"
            ]
          },
          "cancelCategory": {
            "description": "Category of the cancellation.",
            "type": "string",
            "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"
            ]
          },
          "cancelDescription": {
            "description": "Description of the cancellation reason in free form.",
            "type": "string",
            "readOnly": true,
            "maxLength": 255
          },
          "billingPortalId": {
            "type": "string",
            "description": "ID of the billing portal.",
            "default": null,
            "example": "bill_prt_0YV7K5TYV5D1P9ZNKDT39KZC3C"
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "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": {
              "changeItemsQuote": {
                "type": "object"
              },
              "changeItemsInvoice": {
                "type": "object"
              }
            }
          }
        }
      },
      "StorefrontOneTimeSale": {
        "type": "object",
        "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",
            "enum": [
              "subscription-order",
              "one-time-order"
            ],
            "default": "subscription-order"
          },
          "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": {
            "type": "string",
            "description": "ID of the initial invoice.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "recentInvoiceId": {
            "type": "string",
            "description": "ID of the most recently issued invoice.\nThe invoice might not be `paid` yet.",
            "readOnly": true,
            "maxLength": 50,
            "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
          },
          "items": {
            "description": "Details of items in the order.",
            "type": "array",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/StorefrontSubscriptionOrOneTimeSaleItem"
            }
          },
          "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,
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "voidTime": {
            "description": "Date and time when the order is voided.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "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"
          },
          "status": {
            "description": "Status of the one-time order.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "abandoned",
              "completed",
              "canceled"
            ]
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontOrder": {
        "type": "object",
        "discriminator": {
          "propertyName": "orderType",
          "mapping": {
            "subscription-order": "#/components/schemas/StorefrontSubscription",
            "one-time-order": "#/components/schemas/StorefrontOneTimeSale"
          }
        },
        "properties": {
          "orderType": {
            "description": "Specifies the type of order.\nAn order may be a subscription or a one-time purchase.",
            "type": "string",
            "enum": [
              "subscription-order",
              "one-time-order"
            ]
          }
        }
      },
      "PostSubscriptionItemsChange": {
        "type": "object",
        "description": "Change customer subscription items.",
        "properties": {
          "effectiveTime": {
            "type": "string",
            "description": "Effective time when changes are applied.",
            "default": "now",
            "enum": [
              "now",
              "next-service-period",
              "auto"
            ],
            "x-enumDescriptions": {
              "now": "Apply changes immediately.",
              "next-service-period": "Apply changes at the beginning of next service period.",
              "auto": "Apply changes at the beginning of next service period in case of a downgrade, and immediately in case of an upgrade."
            }
          },
          "items": {
            "type": "array",
            "description": "Details of items in the subscription.",
            "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 units of the product on the given plan.",
                  "type": "integer",
                  "minimum": 0
                },
                "quantityFilled": {
                  "description": "Number of filled product units.\nThis field is not used for metered billing plans.",
                  "type": [
                    "number",
                    "null"
                  ],
                  "format": "double",
                  "example": 5.125
                },
                "usageLimits": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/UsageLimits"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "default": null
                }
              }
            }
          },
          "preview": {
            "description": "Specifies if the quote must be previewed before it is created.\nSubscriptions cannot be changed in the preview.",
            "type": "boolean",
            "default": false,
            "example": true
          },
          "keepTrial": {
            "description": "Specifies whether an active trial remains in the trial state or is upgraded to a paid subscription.\nIf this field is set to `false`, the trial is converted to a paid subscription.\n> **Note:** This field applies only to subscriptions that are currently in trial.",
            "type": "boolean",
            "default": true,
            "example": true
          },
          "autopay": {
            "description": "Specifies if payment attempts for the related subscription 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": false,
            "example": true
          },
          "includeNextPeriod": {
            "description": "Specifies if next service period amount must be included in the quote.\nThis is applicable only for `trial-only` active subscriptions.",
            "type": "boolean",
            "default": true,
            "example": true
          }
        }
      },
      "StorefrontChangeQuote": {
        "type": "object",
        "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.\nChange quotes can only be created for orders with `active` or `trial-ended` status.\nFor `trial-ended` orders, use this quote type to convert a trial-only order to a regular recurring order.",
            "type": "string",
            "enum": [
              "change"
            ],
            "example": "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.",
            "properties": {
              "id": {
                "description": "ID of the related order.",
                "readOnly": true,
                "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": "Policy for managing service periods and trial state of the related order when the quote is accepted.\n\nThe `reset` and `retain` values are deprecated.\nThe deprecated `keepTrial` flag is ignored unless `reset` or `retain` is used.\nIn responses, the value is `reset` or `retain`.",
                "type": "string",
                "default": "retainRecurring",
                "enum": [
                  "resetToRecurring",
                  "retainRecurring",
                  "retainTrialThenRecurring",
                  "reset",
                  "retain"
                ],
                "x-enumDescriptions": {
                  "resetToRecurring": "Resets the service periods, ends any trial, and converts trial-only items to recurring.",
                  "retainRecurring": "Retains the current service periods, ends any trial, and converts trial-only items to recurring.",
                  "retainTrialThenRecurring": "Retains the trial until it ends, then converts the item to recurring.\nReturns a validation error if the order has no trial.",
                  "reset": "Deprecated.\nUse `resetToRecurring` instead.\nResets the `renewalTime` to a newly calculated value.",
                  "retain": "Deprecated.\nUse `retainRecurring` or `retainTrialThenRecurring` instead.\nRetains the current `renewalTime`."
                }
              },
              "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 `retainRecurring` or `retainTrialThenRecurring`,\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": {
                "deprecated": true,
                "description": "Deprecated.\nUse the `retainTrialThenRecurring` value of `renewalPolicy` instead.\n\nSpecifies if the order must retain its active trial.\nThis field is only applicable if `renewalPolicy` is set to the deprecated value `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": {
                "description": "Shipping settings of the order.\nIf this value is omitted, the order shipping is not affected.",
                "allOf": [
                  {
                    "$ref": "#/components/schemas/Shipping"
                  }
                ]
              },
              "deliveryAddress": {
                "description": "Delivery address of the order.\nIf this value is `null`, the order delivery address is not affected.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ContactObject"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "billingAddress": {
                "description": "Billing address of the order.\nIf this value is `null`, the order billing address is not affected.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ContactObject"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          },
          "invoicePreview": {
            "type": "object",
            "description": "Preview of the quote invoices.",
            "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"
          },
          "_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",
                    "invoicePaymentFormUrl"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "creditMemos": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "website": {
                "type": "object"
              },
              "order": {
                "type": "object"
              },
              "invoice": {
                "type": "object"
              }
            }
          }
        }
      },
      "PostSubscriptionReactivation": {
        "type": "object",
        "description": "Reactivate customer subscription.",
        "required": [
          "orderId"
        ],
        "properties": {
          "orderId": {
            "type": "string",
            "description": "ID of the order associated with the reactivation quote.",
            "example": "ord_01HVKA5975PJBSQ1SX72G3MSZC"
          },
          "items": {
            "type": "array",
            "description": "Details of items in the subscription.",
            "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 units of the product on the given plan.",
                  "type": "integer",
                  "minimum": 0
                },
                "usageLimits": {
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/UsageLimits"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "default": null
                }
              }
            }
          },
          "preview": {
            "description": "Specifies if the quote must be previewed before it is created.\nSubscriptions cannot be reactivated in the preview.",
            "type": "boolean",
            "default": false,
            "example": true
          }
        }
      },
      "StorefrontReactivationQuote": {
        "type": "object",
        "properties": {
          "id": {
            "readOnly": true,
            "description": "ID of the quote.",
            "type": "string",
            "maxLength": 50,
            "example": "qt_01HXBZMEGPETPHJZH6V4RHBMA8"
          },
          "type": {
            "description": "Type of the quote for churned or canceled order reactivation.\nWhen a quote is accepted, quote items and settings are applied to the order and the order is reactivated.",
            "type": "string",
            "enum": [
              "reactivation"
            ],
            "example": "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.",
            "properties": {
              "id": {
                "description": "ID of the related order.",
                "readOnly": true,
                "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": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
              },
              "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": {
                "description": "Shipping settings of the order.\nIf this value is omitted, the order shipping is not affected.",
                "allOf": [
                  {
                    "$ref": "#/components/schemas/Shipping"
                  }
                ]
              },
              "deliveryAddress": {
                "description": "Delivery address of the order.\nIf this value is `null`, the order delivery address is not affected.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ContactObject"
                  },
                  {
                    "type": "null"
                  }
                ]
              },
              "billingAddress": {
                "description": "Billing address of the order.\nIf this value is `null`, the order billing address is not affected.",
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/ContactObject"
                  },
                  {
                    "type": "null"
                  }
                ]
              }
            }
          },
          "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"
          },
          "_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",
                    "invoicePaymentFormUrl"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "creditMemos": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "website": {
                "type": "object"
              },
              "order": {
                "type": "object"
              },
              "invoice": {
                "type": "object"
              }
            }
          }
        }
      },
      "PaymentInstructionsToken": {
        "type": "object",
        "title": "Payment Token",
        "required": [
          "token"
        ],
        "properties": {
          "token": {
            "description": "ID of the payment token.",
            "type": "string"
          }
        }
      },
      "PaymentInstructionsInstrument": {
        "type": "object",
        "title": "Payment instrument",
        "required": [
          "paymentInstrumentId"
        ],
        "properties": {
          "paymentInstrumentId": {
            "type": "string",
            "description": "ID of the payment instrument.",
            "maxLength": 50,
            "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
          }
        }
      },
      "StorefrontPaymentCard": {
        "type": "object",
        "description": "Payment card information.",
        "title": "Payment card",
        "properties": {
          "id": {
            "description": "ID of the payment instrument.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "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](https://www.rebilly.com/catalog/all/storefront-payment-instruments/storefrontpostpaymentinstrumentdeactivation).",
            "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
          },
          "digitalWallet": {
            "readOnly": true,
            "description": "Digital wallet type.",
            "type": [
              "string",
              "null"
            ],
            "enum": [
              "Apple Pay",
              "Google Pay",
              "Samsung Pay",
              null
            ]
          },
          "brand": {
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/PaymentCardBrand"
              }
            ]
          },
          "bankCountry": {
            "description": "Bank country of the payment instrument.",
            "type": "string",
            "readOnly": true
          },
          "bankName": {
            "description": "Bank name of the payment instrument.",
            "type": "string",
            "readOnly": true
          },
          "isPayoutable": {
            "description": "Specifies if payouts are supported for cards with this BIN.\nDefaults to `true`.\nThis value is `false` if the BIN does not support payouts.",
            "type": "boolean",
            "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"
          },
          "token": {
            "description": "New customer JSON Web Token (JWT) that is used for further requests.\nThis value is null if the customer is already authenticated.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontBankAccount": {
        "type": "object",
        "title": "Bank account",
        "properties": {
          "id": {
            "description": "ID of the payment instrument.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "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"
          },
          "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"
            ]
          },
          "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"
          },
          "token": {
            "description": "New customer JSON Web Token (JWT) that is used for further requests.\nThis value is null if the customer is already authenticated.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontPayPalAccount": {
        "type": "object",
        "title": "PayPal account",
        "properties": {
          "id": {
            "description": "ID of the payment instrument.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "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"
          },
          "token": {
            "description": "New customer JSON Web Token (JWT) that is used for further requests.\nThis value is null if the customer is already authenticated.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontKhelocardCard": {
        "type": "object",
        "title": "Khelocard card",
        "properties": {
          "id": {
            "description": "ID of the payment instrument.",
            "$ref": "#/components/schemas/ResourceId"
          },
          "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"
          },
          "token": {
            "description": "New customer JSON Web Token (JWT) that is used for further requests.\nThis value is null if the customer is already authenticated.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontAlternativeInstrument": {
        "type": "object",
        "title": "Alternative instrument",
        "properties": {
          "id": {
            "description": "ID of the payment instrument.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "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"
          },
          "referenceData": {
            "description": "Subset of payment instrument reference data available to the authenticated customer.\nContains only fields that are safe to expose on the Storefront.",
            "type": "object",
            "readOnly": true,
            "properties": {
              "walletName": {
                "description": "Name of the cryptocurrency wallet associated with the payment instrument.\nThis field is only applicable for cryptocurrency payment instruments.",
                "type": [
                  "string",
                  "null"
                ]
              }
            },
            "additionalProperties": false
          },
          "token": {
            "description": "New customer JSON Web Token (JWT) that is used for further requests.\nThis value is null if the customer is already authenticated.",
            "type": [
              "string",
              "null"
            ],
            "readOnly": true
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontPaymentInstrument": {
        "oneOf": [
          {
            "$ref": "#/components/schemas/StorefrontPaymentCard"
          },
          {
            "$ref": "#/components/schemas/StorefrontBankAccount"
          },
          {
            "$ref": "#/components/schemas/StorefrontPayPalAccount"
          },
          {
            "$ref": "#/components/schemas/StorefrontKhelocardCard"
          },
          {
            "$ref": "#/components/schemas/StorefrontAlternativeInstrument"
          }
        ]
      },
      "StorefrontPayoutRequest": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "readOnly": true,
            "description": "Unique resource ID.",
            "maxLength": 50,
            "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
          },
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "paymentInstrumentId": {
            "type": "string",
            "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"
          },
          "status": {
            "description": "Status of the request.",
            "type": "string",
            "readOnly": true,
            "enum": [
              "pending",
              "ready",
              "approved",
              "in-progress",
              "fulfilled",
              "canceled",
              "split",
              "merged"
            ],
            "x-enumDescriptions": {
              "pending": "Request was created by the customer and is in a pending state for the [configured pending period](https://www.rebilly.com/catalog/all/websites/putwebsite#websites/putwebsite/t=request&path=settings/payoutrequest/pendingperiodhours), unless it is marked as ready by a member of your organization.\nWhen automatic readiness is enabled, the payout request transitions to the `ready` state after the pending period elapses and the configured [transition time](https://www.rebilly.com/catalog/all/websites/putwebsite#websites/putwebsite/t=request&path=settings/payoutrequest/automaticreadinesstime) is reached.\nDepending on the configured [`automaticReadinessEnabled`](https://www.rebilly.com/catalog/all/websites/putwebsite#websites/putwebsite/t=request&path=settings/payoutrequest/automaticreadinessenabled) setting, this may be the initial status assigned to new payout requests, or this status may not be used.",
              "ready": "Request was created by the customer and is ready for review.\nDepending on the configured [`automaticReadinessEnabled`](https://www.rebilly.com/catalog/all/websites/putwebsite#websites/putwebsite/t=request&path=settings/payoutrequest/automaticreadinessenabled) setting, this may be the initial status assigned to new payout requests.",
              "approved": "Request was reviewed, approved, and is ready for processing.",
              "in-progress": "Request has allocations and is being processed.",
              "fulfilled": "Request is fully paid out.",
              "canceled": "Request is canceled by merchant or customer.",
              "split": "Request was split into two or more payout requests.",
              "merged": "Request was merged into another payout request."
            }
          },
          "createdTime": {
            "description": "Date and time when the payout request is created.",
            "$ref": "#/components/schemas/ServerTimestamp"
          },
          "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"
                  ]
                }
              }
            }
          }
        }
      },
      "StorefrontPlan": {
        "type": "object",
        "required": [
          "name",
          "currency",
          "productId",
          "pricing"
        ],
        "properties": {
          "id": {
            "type": "string",
            "description": "ID of the plan.",
            "maxLength": 50,
            "example": "plan_0YV7DENSVGDBW9S71XZNNYYQ0X"
          },
          "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."
          },
          "richDescription": {
            "type": "string",
            "description": "Rich-text description of the plan.\nThis field accepts rich text formatting, such as: bold, underline, italic, and hyperlinks."
          },
          "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."
          },
          "trial": {
            "type": [
              "object",
              "null"
            ],
            "description": "Trial configuration setting.\nIf you do not want to offer a trial, set this value to `null`.",
            "required": [
              "price",
              "period"
            ],
            "properties": {
              "price": {
                "description": "Price of the trial.\nFor a free trial, 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
                  }
                }
              }
            }
          },
          "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
              },
              "sticky": {
                "description": "When enabled, if no usage is reported during a service period,\nthe plan bills the last known reported quantity from a previous period instead of zero.\nThis is suitable for hosted or persistent resources whose usage does not change every period.\nOnly supported with `strategy`: `last`.",
                "type": "boolean",
                "default": false,
                "example": false
              }
            }
          },
          "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": {
              "product": {
                "type": "object"
              }
            }
          },
          "_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",
                    "attachments"
                  ]
                }
              }
            }
          }
        }
      },
      "StorefrontProduct": {
        "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",
            "maxLength": 255,
            "example": "Premium membership"
          },
          "unitLabel": {
            "description": "Unit label, such as per `seat` or per `unit`.",
            "type": "string",
            "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
          },
          "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"
            }
          },
          "customFields": {
            "$ref": "#/components/schemas/ResourceCustomFields"
          },
          "createdTime": {
            "$ref": "#/components/schemas/CreatedTime"
          },
          "updatedTime": {
            "$ref": "#/components/schemas/UpdatedTime"
          },
          "_links": {
            "$ref": "#/components/schemas/SelfLink"
          }
        }
      },
      "StorefrontPurchase": {
        "type": "object",
        "required": [
          "websiteId",
          "paymentInstruction",
          "items"
        ],
        "properties": {
          "orderId": {
            "description": "ID of the order.",
            "readOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "invoice": {
            "description": "Initial invoice.",
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/StorefrontInvoice"
              }
            ]
          },
          "transaction": {
            "description": "Initial transaction.",
            "readOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/StorefrontTransaction"
              }
            ]
          },
          "token": {
            "description": "Session token that is used for authentication.\nThis token can be used to view the created order, invoice, and transaction.",
            "type": "string",
            "readOnly": true
          },
          "websiteId": {
            "writeOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/WebsiteId"
              }
            ]
          },
          "items": {
            "type": "array",
            "writeOnly": true,
            "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",
                  "minimum": 0,
                  "maximum": 1000000000
                }
              }
            }
          },
          "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"
              }
            ]
          },
          "shippingRateId": {
            "description": "ID of the shipping rate. If this value is not set,\nthe cheapest applicable shipping rate is chosen.",
            "writeOnly": true,
            "$ref": "#/components/schemas/ResourceId"
          },
          "paymentInstruction": {
            "description": "Payment instruction for the purchase.",
            "writeOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/PaymentInstruction"
              }
            ]
          },
          "couponIds": {
            "type": "array",
            "description": "List of coupons that are applied to the order.",
            "writeOnly": true,
            "items": {
              "type": "string"
            }
          },
          "password": {
            "type": [
              "string",
              "null"
            ],
            "description": "Customer account password.\nIf this value is set, it is used to create a customer account.",
            "writeOnly": true
          },
          "redirectUrl": {
            "type": [
              "string",
              "null"
            ],
            "description": "URL to redirect the end-user when an offsite transaction is completed.\nIf `website.url` is `https://example.com`,\nthen the `redirectUrl` can be set to one the following:\n\n- `https://example.com`\n\n- `https://example.com/some/path`\n\n- `https://example.com/some/path?and=query`\n\n- `https://example.com/some/path?and=query#and-fragment`\n\nThis field defaults to the configured website URL.\nYou may use `{id}` or `{result}` as placeholders in the URL.\nThese placeholders are replaced with the transaction ID and result.",
            "maxLength": 2083,
            "format": "uri",
            "writeOnly": true
          },
          "poNumber": {
            "description": "Purchase order number that is displayed on the invoice.",
            "type": [
              "string",
              "null"
            ],
            "example": "PO123456"
          },
          "customFields": {
            "type": "object",
            "description": "Custom fields copied to resources.",
            "writeOnly": true,
            "properties": {
              "customers": {
                "$ref": "#/components/schemas/ResourceCustomFields"
              },
              "subscriptions": {
                "$ref": "#/components/schemas/ResourceCustomFields"
              },
              "transactions": {
                "$ref": "#/components/schemas/ResourceCustomFields"
              }
            }
          }
        }
      },
      "StorefrontOrderPreview": {
        "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",
                "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",
                  "minimum": 0,
                  "maximum": 1000000000
                }
              }
            }
          },
          "billingAddress": {
            "description": "Billing address details.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "deliveryAddress": {
            "description": "Delivery address details.",
            "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"
              }
            }
          },
          "shippingRateId": {
            "description": "ID of the shipping rate.\nIf unset the cheapest applicable shipping rate is chosen.",
            "type": "string",
            "maxLength": 50,
            "example": "ship_rate_0YVDN408G4DQE9G1RV1QCFHJ3P",
            "writeOnly": true
          }
        }
      },
      "StorefrontCreationQuote": {
        "type": "object",
        "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"
            ],
            "example": "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.",
            "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 display written signature lines."
              },
              "organizationPrintedName": {
                "type": [
                  "string",
                  "null"
                ],
                "description": "Printed name of the organization.",
                "default": null
              }
            }
          },
          "tax": {
            "$ref": "#/components/schemas/Taxes"
          },
          "_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",
                    "invoicePaymentFormUrl"
                  ]
                }
              }
            }
          },
          "_embedded": {
            "type": "object",
            "description": "Embedded objects that are requested by the `expand` query parameter.",
            "readOnly": true,
            "properties": {
              "customer": {
                "type": "object"
              },
              "creditMemos": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              },
              "website": {
                "type": "object"
              },
              "order": {
                "type": "object"
              },
              "invoice": {
                "type": "object"
              }
            }
          }
        }
      },
      "StorefrontQuote": {
        "discriminator": {
          "propertyName": "type",
          "mapping": {
            "create": "#/components/schemas/StorefrontCreationQuote",
            "change": "#/components/schemas/StorefrontChangeQuote",
            "reactivate": "#/components/schemas/StorefrontReactivationQuote"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/StorefrontCreationQuote"
          },
          {
            "$ref": "#/components/schemas/StorefrontChangeQuote"
          },
          {
            "$ref": "#/components/schemas/StorefrontReactivationQuote"
          }
        ]
      },
      "ReadyToPayout": {
        "type": "object",
        "required": [
          "websiteId",
          "amount",
          "currency",
          "riskMetadata"
        ],
        "properties": {
          "websiteId": {
            "$ref": "#/components/schemas/WebsiteId"
          },
          "billingAddress": {
            "description": "Billing address.",
            "writeOnly": true,
            "allOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              }
            ]
          },
          "riskMetadata": {
            "$ref": "#/components/schemas/RiskMetadata"
          },
          "currency": {
            "$ref": "#/components/schemas/CurrencyCode"
          },
          "amount": {
            "description": "Amount to payout.",
            "type": "number",
            "format": "double"
          }
        }
      },
      "ReadyToPayoutMethodFilters": {
        "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"
        }
      },
      "ReadyToPayoutPaymentCardMethod": {
        "type": "object",
        "title": "Payment card",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "type": "string",
            "description": "Payment method.",
            "enum": [
              "payment-card"
            ]
          },
          "feature": {
            "$ref": "#/components/schemas/ReadyToPayoutFeature"
          },
          "brands": {
            "type": "array",
            "description": "List of supported brands.",
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/PaymentCardBrand"
            }
          },
          "filters": {
            "$ref": "#/components/schemas/ReadyToPayoutMethodFilters"
          }
        }
      },
      "ReadyToPayoutGenericMethod": {
        "type": "object",
        "title": "Generic",
        "required": [
          "method"
        ],
        "properties": {
          "method": {
            "$ref": "#/components/schemas/AlternativePaymentMethods"
          },
          "feature": {
            "$ref": "#/components/schemas/ReadyToPayoutFeature"
          },
          "filters": {
            "$ref": "#/components/schemas/ReadyToPayoutMethodFilters"
          }
        }
      },
      "ReadyToPayoutMethods": {
        "type": "object",
        "discriminator": {
          "propertyName": "method",
          "mapping": {
            "payment-card": "#/components/schemas/ReadyToPayoutPaymentCardMethod",
            "ach": "#/components/schemas/ReadyToPayoutGenericMethod",
            "cash": "#/components/schemas/ReadyToPayoutGenericMethod",
            "check": "#/components/schemas/ReadyToPayoutGenericMethod",
            "paypal": "#/components/schemas/ReadyToPayoutGenericMethod",
            "AdvCash": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Alfa-click": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Alipay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "AstroPay Card": "#/components/schemas/ReadyToPayoutGenericMethod",
            "AstroPay-GO": "#/components/schemas/ReadyToPayoutGenericMethod",
            "BankReferenced": "#/components/schemas/ReadyToPayoutGenericMethod",
            "bank-transfer": "#/components/schemas/ReadyToPayoutGenericMethod",
            "bank-transfer-2": "#/components/schemas/ReadyToPayoutGenericMethod",
            "bank-transfer-3": "#/components/schemas/ReadyToPayoutGenericMethod",
            "bank-transfer-4": "#/components/schemas/ReadyToPayoutGenericMethod",
            "bank-transfer-5": "#/components/schemas/ReadyToPayoutGenericMethod",
            "bank-transfer-6": "#/components/schemas/ReadyToPayoutGenericMethod",
            "bank-transfer-7": "#/components/schemas/ReadyToPayoutGenericMethod",
            "bank-transfer-8": "#/components/schemas/ReadyToPayoutGenericMethod",
            "bank-transfer-9": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Baloto": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Beeline": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Belfius-direct-net": "#/components/schemas/ReadyToPayoutGenericMethod",
            "bitcoin": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Bizum": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Boleto": "#/components/schemas/ReadyToPayoutGenericMethod",
            "cash-deposit": "#/components/schemas/ReadyToPayoutGenericMethod",
            "CASHlib": "#/components/schemas/ReadyToPayoutGenericMethod",
            "CashToCode": "#/components/schemas/ReadyToPayoutGenericMethod",
            "China UnionPay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Cleo": "#/components/schemas/ReadyToPayoutGenericMethod",
            "CODVoucher": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Conekta-oxxo": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Cupon-de-pagos": "#/components/schemas/ReadyToPayoutGenericMethod",
            "cryptocurrency": "#/components/schemas/ReadyToPayoutGenericMethod",
            "domestic-cards": "#/components/schemas/ReadyToPayoutGenericMethod",
            "echeck": "#/components/schemas/ReadyToPayoutGenericMethod",
            "ecoPayz": "#/components/schemas/ReadyToPayoutGenericMethod",
            "ecoVoucher": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Efecty": "#/components/schemas/ReadyToPayoutGenericMethod",
            "EPS": "#/components/schemas/ReadyToPayoutGenericMethod",
            "ePay.bg": "#/components/schemas/ReadyToPayoutGenericMethod",
            "eZeeWallet": "#/components/schemas/ReadyToPayoutGenericMethod",
            "FasterPay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Flexepin": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Giropay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Gpaysafe": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Google Pay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "iDebit": "#/components/schemas/ReadyToPayoutGenericMethod",
            "iDEAL": "#/components/schemas/ReadyToPayoutGenericMethod",
            "ING-homepay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "INOVAPAY-pin": "#/components/schemas/ReadyToPayoutGenericMethod",
            "INOVAPAY-wallet": "#/components/schemas/ReadyToPayoutGenericMethod",
            "InstaDebit": "#/components/schemas/ReadyToPayoutGenericMethod",
            "instant-bank-transfer": "#/components/schemas/ReadyToPayoutGenericMethod",
            "InstantPayments": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Interac": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Interac-online": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Interac-eTransfer": "#/components/schemas/ReadyToPayoutGenericMethod",
            "invoice": "#/components/schemas/ReadyToPayoutGenericMethod",
            "iWallet": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Jeton": "#/components/schemas/ReadyToPayoutGenericMethod",
            "jpay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Khelocard": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Klarna": "#/components/schemas/ReadyToPayoutGenericMethod",
            "KNOT": "#/components/schemas/ReadyToPayoutGenericMethod",
            "loonie": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Matrix": "#/components/schemas/ReadyToPayoutGenericMethod",
            "MaxiCash": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Megafon": "#/components/schemas/ReadyToPayoutGenericMethod",
            "MiFinity-eWallet": "#/components/schemas/ReadyToPayoutGenericMethod",
            "miscellaneous": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Bancontact": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Bancontact-mobile": "#/components/schemas/ReadyToPayoutGenericMethod",
            "MTS": "#/components/schemas/ReadyToPayoutGenericMethod",
            "MuchBetter": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Multibanco": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Neosurf": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Netbanking": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Neteller": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Nordea-Solo": "#/components/schemas/ReadyToPayoutGenericMethod",
            "OchaPay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "online-bank-transfer": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Onlineueberweisen": "#/components/schemas/ReadyToPayoutGenericMethod",
            "oriental-wallet": "#/components/schemas/ReadyToPayoutGenericMethod",
            "OXXO": "#/components/schemas/ReadyToPayoutGenericMethod",
            "P24": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Pagadito": "#/components/schemas/ReadyToPayoutGenericMethod",
            "PagoEffectivo": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Pagsmile-deposit-express": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Pagsmile-lottery": "#/components/schemas/ReadyToPayoutGenericMethod",
            "PayCash": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Payeer": "#/components/schemas/ReadyToPayoutGenericMethod",
            "PaymentAsia-crypto": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Paymero": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Perfect-money": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Piastrix": "#/components/schemas/ReadyToPayoutGenericMethod",
            "plaid-account": "#/components/schemas/ReadyToPayoutGenericMethod",
            "PayTabs": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Paysafecard": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Paysafecash": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Pay4Fun": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Paynote": "#/components/schemas/ReadyToPayoutGenericMethod",
            "PinPay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "PIX": "#/components/schemas/ReadyToPayoutGenericMethod",
            "phone": "#/components/schemas/ReadyToPayoutGenericMethod",
            "PhonePe": "#/components/schemas/ReadyToPayoutGenericMethod",
            "POLi": "#/components/schemas/ReadyToPayoutGenericMethod",
            "PostFinance-card": "#/components/schemas/ReadyToPayoutGenericMethod",
            "PostFinance-e-finance": "#/components/schemas/ReadyToPayoutGenericMethod",
            "QIWI": "#/components/schemas/ReadyToPayoutGenericMethod",
            "QPay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "QQPay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "rapyd-checkout": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Resurs": "#/components/schemas/ReadyToPayoutGenericMethod",
            "SafetyPay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "SEPA": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Skrill": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Skrill Rapid Transfer": "#/components/schemas/ReadyToPayoutGenericMethod",
            "SMSVoucher": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Sofort": "#/components/schemas/ReadyToPayoutGenericMethod",
            "SparkPay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "swift-dbt": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Tele2": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Terminaly-RF": "#/components/schemas/ReadyToPayoutGenericMethod",
            "ToditoCash-card": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Trustly": "#/components/schemas/ReadyToPayoutGenericMethod",
            "UPayCard": "#/components/schemas/ReadyToPayoutGenericMethod",
            "UPI": "#/components/schemas/ReadyToPayoutGenericMethod",
            "USD-coin": "#/components/schemas/ReadyToPayoutGenericMethod",
            "VCreditos": "#/components/schemas/ReadyToPayoutGenericMethod",
            "VegaWallet": "#/components/schemas/ReadyToPayoutGenericMethod",
            "VenusPoint": "#/components/schemas/ReadyToPayoutGenericMethod",
            "voucher": "#/components/schemas/ReadyToPayoutGenericMethod",
            "voucher-2": "#/components/schemas/ReadyToPayoutGenericMethod",
            "voucher-3": "#/components/schemas/ReadyToPayoutGenericMethod",
            "voucher-4": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Webmoney": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Webpay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Webpay-2": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Webpay Card": "#/components/schemas/ReadyToPayoutGenericMethod",
            "WeChat Pay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "wire": "#/components/schemas/ReadyToPayoutGenericMethod",
            "XPay-P2P": "#/components/schemas/ReadyToPayoutGenericMethod",
            "XPay-QR": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Yandex-money": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Zotapay": "#/components/schemas/ReadyToPayoutGenericMethod",
            "Zimpler": "#/components/schemas/ReadyToPayoutGenericMethod"
          }
        },
        "oneOf": [
          {
            "$ref": "#/components/schemas/ReadyToPayoutPaymentCardMethod"
          },
          {
            "$ref": "#/components/schemas/ReadyToPayoutGenericMethod"
          }
        ]
      },
      "PostSubscription": {
        "type": "object",
        "required": [
          "billingPortalId",
          "items"
        ],
        "properties": {
          "billingPortalId": {
            "type": "string",
            "description": "ID of the billing portal.",
            "maxLength": 50,
            "example": "bill_prt_0YV7K5TYV5D1P9ZNKDT39KZC3C"
          },
          "items": {
            "type": "array",
            "description": "Details of items in the order.",
            "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 units of the product on the given plan.",
                  "type": "integer",
                  "minimum": 0,
                  "maximum": 1000000000
                },
                "usageLimits": {
                  "type": [
                    "object",
                    "null"
                  ],
                  "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",
                        "null"
                      ],
                      "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 fired.\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",
                        "null"
                      ],
                      "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
                    }
                  }
                }
              }
            }
          },
          "billingAddress": {
            "description": "Billing address details.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          },
          "deliveryAddress": {
            "description": "Delivery address details.",
            "oneOf": [
              {
                "$ref": "#/components/schemas/ContactObject"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "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."
                }
              },
              "oneOf": [
                {
                  "required": [
                    "start"
                  ],
                  "properties": {
                    "end": {
                      "not": {}
                    }
                  }
                },
                {
                  "required": [
                    "end"
                  ],
                  "properties": {
                    "start": {
                      "not": {}
                    }
                  }
                },
                {
                  "required": [
                    "start",
                    "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"
          }
        }
      },
      "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",
                    "data-export-failed",
                    "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"
                  ]
                }
              }
            }
          }
        }
      },
      "CheckoutFormId": {
        "type": "string",
        "description": "ID of the checkout form.",
        "readOnly": true,
        "maxLength": 50,
        "example": "chkt_frm_0YV8XZ6174C2MBS5011SAZNMBP"
      }
    },
    "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"
            }
          }
        }
      },
      "Conflict": {
        "description": "Conflict.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Conflict"
            }
          }
        }
      },
      "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"
            }
          }
        }
      },
      "NotFound": {
        "description": "Resource not found.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/NotFound"
            }
          }
        }
      },
      "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"
          }
        }
      },
      "BadRequest": {
        "description": "Server could not understand the request due to invalid syntax.",
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/BadRequest"
            }
          }
        }
      },
      "DataExportValidationError": {
        "description": "Invalid data sent, or the export exceeds the maximum record limit.",
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/ValidationError"
                },
                {
                  "$ref": "#/components/schemas/DataExportLimitExceeded"
                }
              ]
            }
          }
        }
      },
      "NoContent": {
        "description": "Request accepted.\nNo response body returned."
      }
    },
    "requestBodies": {
      "AccountRegistrationSettings": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/AccountRegistrationSettings"
            }
          }
        },
        "description": "Account registration settings resource.",
        "required": true
      },
      "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": {
                  "deprecated": true,
                  "description": "ID of the payout request for which the transaction is fully allocated.\n\n> **Note:** Use the payout request allocation flow instead of this field.\nCreate an allocation with `POST /payout-request-allocations`,\nthen initiate processing with `POST /payout-request-allocations/process`.",
                  "writeOnly": true,
                  "type": "string",
                  "maxLength": 50
                }
              }
            }
          }
        },
        "description": "Transaction resource.",
        "required": true
      },
      "ApiKey": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/ApiKey"
            }
          }
        },
        "description": "ApiKey resource.",
        "required": true
      },
      "PostCredential": {
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/PostSmtpCredential"
                },
                {
                  "$ref": "#/components/schemas/PostWebhookCredential"
                },
                {
                  "$ref": "#/components/schemas/PostExperianCredential"
                },
                {
                  "$ref": "#/components/schemas/PostMailgunCredential"
                },
                {
                  "$ref": "#/components/schemas/PostOAuth2Credential"
                },
                {
                  "$ref": "#/components/schemas/PostPostmarkCredential"
                },
                {
                  "$ref": "#/components/schemas/PostSendGridCredential"
                },
                {
                  "$ref": "#/components/schemas/PostAwsSesCredential"
                },
                {
                  "$ref": "#/components/schemas/PostTaxJarCredential"
                },
                {
                  "$ref": "#/components/schemas/PostAvalaraCredential"
                },
                {
                  "$ref": "#/components/schemas/PostPlaidCredential"
                }
              ],
              "discriminator": {
                "propertyName": "type",
                "mapping": {
                  "smtp": "#/components/schemas/PostSmtpCredential",
                  "webhook": "#/components/schemas/PostWebhookCredential",
                  "experian": "#/components/schemas/PostExperianCredential",
                  "mailgun": "#/components/schemas/PostMailgunCredential",
                  "oauth2": "#/components/schemas/PostOAuth2Credential",
                  "postmark": "#/components/schemas/PostPostmarkCredential",
                  "sendgrid": "#/components/schemas/PostSendGridCredential",
                  "aws-ses": "#/components/schemas/PostAwsSesCredential",
                  "taxjar": "#/components/schemas/PostTaxJarCredential",
                  "avalara": "#/components/schemas/PostAvalaraCredential",
                  "plaid": "#/components/schemas/PostPlaidCredential"
                }
              }
            }
          }
        },
        "description": "Service credential resource.",
        "required": true
      },
      "PatchCredential": {
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "$ref": "#/components/schemas/PatchServiceCredential"
                },
                {
                  "$ref": "#/components/schemas/PatchPlaidCredential"
                },
                {
                  "$ref": "#/components/schemas/PatchTaxJarCredential"
                }
              ],
              "discriminator": {
                "propertyName": "type",
                "mapping": {
                  "smtp": "#/components/schemas/PatchServiceCredential",
                  "webhook": "#/components/schemas/PatchServiceCredential",
                  "mailgun": "#/components/schemas/PatchServiceCredential",
                  "sendgrid": "#/components/schemas/PatchServiceCredential",
                  "aws-ses": "#/components/schemas/PatchServiceCredential",
                  "oauth2": "#/components/schemas/PatchServiceCredential",
                  "postmark": "#/components/schemas/PatchServiceCredential",
                  "experian": "#/components/schemas/PatchServiceCredential",
                  "avalara": "#/components/schemas/PatchServiceCredential",
                  "plaid": "#/components/schemas/PatchPlaidCredential",
                  "taxjar": "#/components/schemas/PatchTaxJarCredential"
                }
              }
            }
          }
        },
        "description": "Service credential resource.",
        "required": true
      },
      "RuleSet": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/RuleSet"
            }
          }
        },
        "description": "Ruleset resource.",
        "required": true
      },
      "RuleSetDraft": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/RuleSetDraft"
            }
          }
        },
        "description": "Draft ruleset resource.",
        "required": true
      },
      "GatewayAccount": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GatewayAccount"
            }
          }
        },
        "description": "Gateway Account resource.",
        "required": true
      },
      "GatewayAccountDowntimeSchedule": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GatewayAccountDowntimeSchedule"
            }
          }
        },
        "description": "Gateway Account downtime schedule resource.",
        "required": true
      },
      "GridSegment": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GridSegment"
            }
          }
        },
        "description": "Segment resource.",
        "required": true
      },
      "PostOrganization": {
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Organization"
                },
                {
                  "required": [
                    "name",
                    "website",
                    "country",
                    "reportCurrency"
                  ]
                }
              ]
            }
          }
        },
        "description": "Create organization request."
      },
      "PatchOrganization": {
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "$ref": "#/components/schemas/Organization"
                },
                {
                  "properties": {
                    "website": {
                      "readOnly": true
                    },
                    "reportCurrency": {
                      "readOnly": true
                    }
                  }
                }
              ]
            }
          }
        },
        "description": "Update Organization Request."
      },
      "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"
                  ],
                  "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. This status requires the `canceledBy` field."
                  }
                },
                "canceledBy": {
                  "description": "Initiator of the cancellation.\nRequired when `status` is `canceled`.",
                  "type": "string",
                  "enum": [
                    "customer",
                    "merchant",
                    "system"
                  ]
                },
                "cancellationDescription": {
                  "description": "Description of the cancellation reason.",
                  "type": [
                    "string",
                    "null"
                  ],
                  "maxLength": 255
                },
                "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- Transition to `ready`, `approved`, `in-progress`, `merged`, `split`, or `canceled`.\n- Have allocations created.\n- Start allocation processing.\n- Cancel pending allocations.\n\nA blocked payout request can still transition to the `fulfilled` status if allocation processing starts before the payout request is blocked.",
                  "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."
      },
      "PatchPayoutRequestBatch": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "title": "Patch payout request batch",
              "properties": {
                "description": {
                  "description": "Description of the batch.\nOmit this property when not updating the description.\nDo not send `null`; use a string value when this property is present.",
                  "type": "string",
                  "maxLength": 255
                },
                "allocationOrder": {
                  "description": "Order for auto-allocation of payout requests in this batch.\nWhen set, this field overrides the organization-level allocation order during batch auto-allocation.\nMust contain `selected-payment-instrument` exactly once.\nValid values: `payment-card` (payment cards), `alternative-payment-methods` (catch-all for alternative payment methods), `selected-payment-instrument` (customer-requested instrument), or any payment method API name (for example, `paypal`, `Interac-eTransfer`).\nOmit this property when not updating the allocation order.\nDo not send `null`; use an array value when this property is present.",
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "minItems": 2,
                  "maxItems": 25,
                  "uniqueItems": true,
                  "example": [
                    "paypal",
                    "Interac-eTransfer",
                    "payment-card",
                    "alternative-payment-methods",
                    "selected-payment-instrument"
                  ]
                }
              }
            }
          }
        },
        "description": "Fields for updating the payout request batch.\nAt least one property must be present.\nDo not set `description` or `allocationOrder` to `null`."
      },
      "GlobalWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/GlobalWebhook"
            }
          }
        },
        "description": "Webhook to create or update.",
        "required": true
      },
      "User": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/User"
            }
          }
        },
        "description": "User resource.",
        "required": true
      },
      "Website": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/Website"
            }
          }
        },
        "description": "Website resource.",
        "required": true
      },
      "DataExport": {
        "content": {
          "application/json": {
            "schema": {
              "$ref": "#/components/schemas/DataExport"
            }
          }
        },
        "description": "Data Export Request.",
        "required": true
      },
      "PatchAccountPassword": {
        "content": {
          "application/json": {
            "schema": {
              "required": [
                "currentPassword",
                "newPassword"
              ],
              "properties": {
                "currentPassword": {
                  "type": "string",
                  "format": "password",
                  "description": "Current password.\nThis value is used to request a password change."
                },
                "newPassword": {
                  "type": "string",
                  "format": "password",
                  "writeOnly": true,
                  "description": "New password.\nThis value replaces the existing password."
                }
              }
            }
          }
        }
      },
      "PostDeposit": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "depositRequestId",
                "amount"
              ],
              "properties": {
                "depositRequestId": {
                  "description": "ID of the deposit request.\nThe created transaction is based on the properties of this deposit request.",
                  "type": "string",
                  "maxLength": 50,
                  "example": "4f6cf35x-2c4y-483z-a0a9-158621f77a21"
                },
                "amount": {
                  "description": "Deposit amount.",
                  "type": "number",
                  "format": "double",
                  "example": 97.97
                },
                "paymentInstrumentId": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "ID of the payment instrument.",
                  "maxLength": 50,
                  "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
                },
                "token": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "ID of the payment token."
                },
                "properties": {
                  "description": "Properties completed by the user in the deposit form.",
                  "type": "object",
                  "additionalProperties": {
                    "type": "string"
                  },
                  "example": {
                    "email": "email@example.com",
                    "max": "33"
                  }
                },
                "riskMetadata": {
                  "$ref": "#/components/schemas/RiskMetadata"
                },
                "redirectUrl": {
                  "$ref": "#/components/schemas/StorefrontTransactionRedirectUrl"
                }
              }
            }
          }
        },
        "required": true
      },
      "PatchInvoice": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "deliveryAddress": {
                  "description": "Invoice delivery address.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ContactObject"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "billingAddress": {
                  "description": "Invoice billing address.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ContactObject"
                    },
                    {
                      "type": "null"
                    }
                  ]
                }
              }
            }
          }
        },
        "required": true
      },
      "PostKycLivenessSession": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "kycRequestId"
              ],
              "properties": {
                "kycRequestId": {
                  "type": "string",
                  "description": "ID of the KYC request that the liveness session is associated with.",
                  "maxLength": 50,
                  "example": "kyc_req_0YV7JMJ3DBCGRBR7K9D4HVGPP5"
                }
              }
            }
          }
        },
        "description": "KYC liveness session.",
        "required": true
      },
      "PatchOrder": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "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"
                },
                "deliveryAddress": {
                  "description": "Order delivery address.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ContactObject"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "billingAddress": {
                  "description": "Order billing address.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ContactObject"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "usageLimits": {
                  "type": "array",
                  "description": "Details of items in the order and corresponding usage limits.",
                  "minItems": 1,
                  "items": {
                    "type": "object",
                    "required": [
                      "itemId",
                      "limits"
                    ],
                    "properties": {
                      "itemId": {
                        "type": "string",
                        "description": "ID of the subscription item.",
                        "maxLength": 50,
                        "example": "sub_01HW2V1Y3A6QPM1NX4WCYHFSRS"
                      },
                      "limits": {
                        "type": [
                          "object",
                          "null"
                        ],
                        "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",
                              "null"
                            ],
                            "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 fired.\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",
                              "null"
                            ],
                            "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 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 until the trial ends.",
                            "example": 20.725
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Order resource.",
        "required": true
      },
      "PostOrderCancellation": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "reason"
              ],
              "properties": {
                "reason": {
                  "description": "Reason for the order cancellation.",
                  "type": "string",
                  "enum": [
                    "did-not-use",
                    "did-not-want",
                    "missing-features",
                    "bugs-or-problems",
                    "do-not-remember",
                    "too-expensive",
                    "other"
                  ]
                },
                "description": {
                  "description": "Description of the cancellation reason in free form.",
                  "type": "string",
                  "maxLength": 255
                }
              }
            }
          }
        },
        "description": "Order resource.",
        "required": true
      },
      "PostOrderPause": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "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"
                }
              }
            }
          }
        },
        "description": "Order resource.",
        "required": true
      },
      "PostPayment": {
        "content": {
          "application/json": {
            "schema": {
              "oneOf": [
                {
                  "type": "object",
                  "title": "For transaction",
                  "required": [
                    "transactionId"
                  ],
                  "properties": {
                    "transactionId": {
                      "$ref": "#/components/schemas/TransactionId"
                    },
                    "riskMetadata": {
                      "$ref": "#/components/schemas/RiskMetadata"
                    },
                    "redirectUrl": {
                      "$ref": "#/components/schemas/StorefrontTransactionRedirectUrl"
                    }
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/PaymentInstructionsToken"
                    },
                    {
                      "$ref": "#/components/schemas/PaymentInstructionsInstrument"
                    }
                  ]
                },
                {
                  "type": "object",
                  "title": "For invoice",
                  "required": [
                    "invoiceId"
                  ],
                  "properties": {
                    "invoiceId": {
                      "type": "string",
                      "description": "Unique resource ID.",
                      "maxLength": 50,
                      "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
                    },
                    "riskMetadata": {
                      "$ref": "#/components/schemas/RiskMetadata"
                    },
                    "redirectUrl": {
                      "$ref": "#/components/schemas/StorefrontTransactionRedirectUrl"
                    }
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/PaymentInstructionsToken"
                    },
                    {
                      "$ref": "#/components/schemas/PaymentInstructionsInstrument"
                    }
                  ]
                },
                {
                  "type": "object",
                  "title": "For amount+currency",
                  "required": [
                    "amount",
                    "currency",
                    "websiteId"
                  ],
                  "properties": {
                    "websiteId": {
                      "$ref": "#/components/schemas/WebsiteId"
                    },
                    "currency": {
                      "$ref": "#/components/schemas/CurrencyCode"
                    },
                    "amount": {
                      "description": "Transaction amount.",
                      "type": "number",
                      "format": "double",
                      "default": 0,
                      "example": 97.97
                    },
                    "riskMetadata": {
                      "$ref": "#/components/schemas/RiskMetadata"
                    },
                    "redirectUrl": {
                      "$ref": "#/components/schemas/StorefrontTransactionRedirectUrl"
                    }
                  },
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/PaymentInstructionsToken"
                    },
                    {
                      "$ref": "#/components/schemas/PaymentInstructionsInstrument"
                    }
                  ]
                }
              ]
            }
          }
        },
        "required": true
      },
      "StorefrontPostPaymentInstrument": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "token"
              ],
              "properties": {
                "token": {
                  "description": "Token ID of the payment instrument.",
                  "type": "string"
                },
                "customFields": {
                  "$ref": "#/components/schemas/ResourceCustomFields"
                }
              }
            }
          }
        },
        "description": "Payment instrument.",
        "required": true
      },
      "StorefrontPatchPaymentInstrument": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "properties": {
                "token": {
                  "description": "Token ID of the payment instrument.",
                  "type": "string"
                },
                "billingAddress": {
                  "description": "Billing address.\nIf this field is supplied,\nit overrides the billing address obtained from the token.",
                  "$ref": "#/components/schemas/ContactObject"
                },
                "customFields": {
                  "$ref": "#/components/schemas/ResourceCustomFields"
                }
              }
            }
          }
        },
        "description": "Payment instrument.",
        "required": true
      },
      "SetupPaymentInstrumentRequest": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "websiteId",
                "currency"
              ],
              "properties": {
                "websiteId": {
                  "$ref": "#/components/schemas/WebsiteId"
                },
                "currency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "amount": {
                  "description": "Amount of the transaction.",
                  "type": "number",
                  "format": "double",
                  "default": 0,
                  "example": 97.97
                },
                "billingAddress": {
                  "description": "Billing address.\nIf a billing address is not supplied the address associated with the payment instrument is used.\nIf no address is associated with the payment instrument,\nthe customer's address is used.",
                  "oneOf": [
                    {
                      "$ref": "#/components/schemas/ContactObject"
                    },
                    {
                      "type": "null"
                    }
                  ]
                },
                "redirectUrl": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "URL to redirect the end-user when an offsite transaction is completed.\nThis field defaults to the configured website URL.\nYou may use `{id}` or `{result}` as placeholders in the URL.\nThese placeholders are replaced with the transaction ID and result.\nFor more information, see [Placeholders](https://www.rebilly.com/docs/automations/email-notifications/#placeholders).",
                  "maxLength": 2083,
                  "format": "uri"
                },
                "riskMetadata": {
                  "$ref": "#/components/schemas/RiskMetadata"
                }
              }
            }
          }
        },
        "description": "Setup transaction resource.",
        "required": true
      },
      "PostPayoutRequest": {
        "content": {
          "application/json": {
            "schema": {
              "type": "object",
              "required": [
                "cashierId",
                "amount",
                "paymentInstrumentId"
              ],
              "properties": {
                "cashierId": {
                  "type": "string",
                  "description": "ID of the cashier resource that sends the payout request.",
                  "maxLength": 50,
                  "example": "cashier_0YV7DE4Z26DQSA1AC92FBJ7SEG"
                },
                "paymentInstrumentId": {
                  "type": "string",
                  "description": "ID of the requested payment instrument to offer for the payout.",
                  "maxLength": 50,
                  "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
                },
                "amount": {
                  "description": "Amount of the payout.",
                  "type": "number",
                  "format": "double"
                }
              }
            }
          }
        },
        "required": true
      },
      "PostRegister": {
        "content": {
          "application/json": {
            "schema": {
              "allOf": [
                {
                  "required": [
                    "username",
                    "password"
                  ],
                  "properties": {
                    "username": {
                      "type": "string",
                      "description": "Username."
                    },
                    "password": {
                      "type": "string",
                      "format": "password",
                      "description": "Password."
                    },
                    "primaryAddress": {
                      "$ref": "#/components/schemas/ContactObject"
                    },
                    "paymentToken": {
                      "type": "string",
                      "description": "Write-only payment token;\nif supplied, it converts into a payment instrument and is set as the `defaultPaymentInstrument`.\nThe value of this property overrides the `defaultPaymentInstrument` in the case that both are supplied.\nThe token may only be used once before it is expired."
                    },
                    "leadSource": {
                      "$ref": "#/components/schemas/LeadSourceData"
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "ApplicationInstanceDisabled": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "organizationId": {
                  "$ref": "#/components/schemas/OrganizationId"
                },
                "applicationId": {
                  "type": "string",
                  "description": "Unique application ID.",
                  "maxLength": 50,
                  "example": "app_01H0HT25X7XXCJGS4H8VJSYF2Y"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "application-instance-disabled"
                  ]
                },
                "_embedded": {
                  "description": "Embedded objects related to the application instance event.",
                  "type": "object",
                  "properties": {
                    "application": {
                      "$ref": "#/components/schemas/Application"
                    }
                  }
                },
                "_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": [
                          "application"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of application instance-related webhook event."
      },
      "ApplicationInstanceEnabled": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "organizationId": {
                  "$ref": "#/components/schemas/OrganizationId"
                },
                "applicationId": {
                  "type": "string",
                  "description": "Unique application ID.",
                  "maxLength": 50,
                  "example": "app_01H0HT25X7XXCJGS4H8VJSYF2Y"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "application-instance-enabled"
                  ]
                },
                "_embedded": {
                  "description": "Embedded objects related to the application instance event.",
                  "type": "object",
                  "properties": {
                    "application": {
                      "$ref": "#/components/schemas/Application"
                    },
                    "applicationInstance": {
                      "$ref": "#/components/schemas/OwnerApplicationInstance"
                    }
                  }
                },
                "_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": [
                          "application",
                          "applicationInstance"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of application instance-related webhook event."
      },
      "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."
      },
      "BalanceTransactionSettled": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "recognitionId": {
                  "description": "ID of the recognized revenue.",
                  "type": "string"
                },
                "invoiceId": {
                  "type": "string",
                  "description": "ID of the invoice.",
                  "maxLength": 50,
                  "example": "in_0YVF9605RKC62BP14NE2R7V2XT"
                },
                "itemId": {
                  "description": "ID of the invoice item.",
                  "type": "string"
                },
                "amount": {
                  "description": "Amount recognized.",
                  "type": "number",
                  "format": "double"
                },
                "currency": {
                  "$ref": "#/components/schemas/CurrencyCode"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "invoice-revenue-recognized"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the invoice revenue recognition 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 revenue recognition-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."
      },
      "GatewayAccountWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "gatewayAccountId": {
                  "type": "string",
                  "description": "ID of the gateway account.",
                  "maxLength": 50,
                  "example": "gw_acc_0YVCXMF26DDNKAERE5NW727S34"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "gateway-account-downtime-ended",
                    "gateway-account-downtime-started",
                    "gateway-account-onboarding-completed",
                    "gateway-account-onboarding-failed"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the gateway account event.",
                  "properties": {
                    "gatewayAccount": {
                      "$ref": "#/components/schemas/GatewayAccount"
                    }
                  }
                },
                "_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": [
                          "gatewayAccount"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of gateway account-related webhook event."
      },
      "GatewayAccountAndGatewayAccountLimit": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "gatewayAccountId": {
                  "type": "string",
                  "description": "ID of the gateway account.",
                  "maxLength": 50,
                  "example": "gw_acc_0YVCXMF26DDNKAERE5NW727S34"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "gateway-account-limit-reached"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the gateway account limit event.",
                  "properties": {
                    "gatewayAccount": {
                      "$ref": "#/components/schemas/GatewayAccount"
                    },
                    "gatewayAccountLimit": {
                      "$ref": "#/components/schemas/GatewayAccountLimit"
                    }
                  }
                },
                "_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": [
                          "gatewayAccount",
                          "gatewayAccountLimit"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of gateway account limit-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-reconciled",
                    "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-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."
      },
      "TransactionWithChildWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "transactionId": {
                  "$ref": "#/components/schemas/TransactionId"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "transaction-partially-refunded",
                    "transaction-refunded",
                    "transaction-voided"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the transaction event.",
                  "properties": {
                    "transaction": {
                      "$ref": "#/components/schemas/Transaction"
                    },
                    "childTransaction": {
                      "$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",
                          "childTransaction"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of transaction-related webhook event."
      },
      "DataExportWebhook": {
        "content": {
          "application/json": {
            "schema": {
              "properties": {
                "dataExportId": {
                  "type": "string",
                  "description": "ID of the data export.",
                  "maxLength": 50,
                  "example": "exp_0YVCNQ2C1AD1RA3HXKP492GNZB"
                },
                "fileId": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "description": "ID of the data export file.\nThis value is `null` if the export failed.",
                  "maxLength": 50,
                  "example": "file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N"
                },
                "recordCount": {
                  "type": "integer",
                  "description": "Total number of records in the export, excluding the header row.\nThis value is `0` if the export failed.",
                  "example": 1500
                },
                "status": {
                  "type": "string",
                  "description": "Status of the data export.\nThis webhook is sent only when the data export reaches a terminal status.\nThis value is never `pending`, `queued`, or `processing`.",
                  "enum": [
                    "completed",
                    "failed"
                  ]
                },
                "failureReason": {
                  "$ref": "#/components/schemas/DataExportFailureReason"
                },
                "eventType": {
                  "type": "string",
                  "description": "Type of event that triggered the webhook.",
                  "enum": [
                    "data-export-completed",
                    "data-export-failed"
                  ]
                },
                "_embedded": {
                  "type": "object",
                  "description": "Embedded objects related to the data export event.",
                  "properties": {
                    "dataExport": {
                      "$ref": "#/components/schemas/DataExport"
                    }
                  }
                },
                "_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": [
                          "dataExport",
                          "download"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        },
        "description": "Payload of data export-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": "Account registration settings",
      "description": "Use account registration settings operations to configure the fields and steps that customers see during account registration."
    },
    {
      "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": "Dashboards",
      "description": "Use dashboard operations to manage the user's dashboard and its tabs with metrics over key performance indicators.\nEach tab is a customizable view of tiles that display report data."
    },
    {
      "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/)."
    }
  ],
  "paths": {
    "/account-registration-settings": {
      "get": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Account registration settings"
        ],
        "summary": "Retrieve account registration settings",
        "operationId": "GetAccountRegistrationSettingsCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of all account registration settings.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "List of account registration settings 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/AccountRegistrationSettings"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Account registration settings"
        ],
        "summary": "Create account registration settings",
        "operationId": "PostAccountRegistrationSettings",
        "x-sdk-operation-name": "create",
        "description": "Creates a new account registration settings resource.",
        "requestBody": {
          "$ref": "#/components/requestBodies/AccountRegistrationSettings"
        },
        "responses": {
          "201": {
            "description": "Account registration 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/AccountRegistrationSettings"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/account-registration-settings/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Account registration settings"
        ],
        "summary": "Retrieve account registration settings",
        "operationId": "GetAccountRegistrationSettings",
        "x-sdk-operation-name": "get",
        "description": "Retrieves account registration settings with a specified ID.",
        "responses": {
          "200": {
            "description": "Account registration settings retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AccountRegistrationSettings"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Core"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Account registration settings"
        ],
        "summary": "Upsert account registration settings",
        "operationId": "PutAccountRegistrationSettings",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates account registration settings with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/AccountRegistrationSettings"
        },
        "responses": {
          "200": {
            "description": "Account registration 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/AccountRegistrationSettings"
                }
              }
            }
          },
          "201": {
            "description": "Account registration 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/AccountRegistrationSettings"
                }
              }
            }
          },
          "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": [
          "Account registration settings"
        ],
        "summary": "Delete account registration settings",
        "operationId": "DeleteAccountRegistrationSettings",
        "x-sdk-operation-name": "delete",
        "description": "Deletes account registration settings with a specified ID.\nDefault account registration settings cannot be deleted.",
        "responses": {
          "204": {
            "description": "Account registration settings 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"
          }
        }
      }
    },
    "/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 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"
              }
            }
          },
          "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"
          }
        ]
      }
    },
    "/customers/{id}/credit-balance": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Retrieve customer credit balance",
        "operationId": "GetCustomerCreditBalance",
        "x-sdk-operation-name": "getCustomerCreditBalance",
        "description": "Retrieves a customer's credit balance grouped by currency.",
        "responses": {
          "200": {
            "description": "Customer credit balance retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerCreditBalance"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/customers/{id}/compliance-screening-report": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Create a compliance screening report",
        "operationId": "PostCustomerComplianceScreeningReport",
        "x-sdk-operation-name": "generateComplianceScreeningReport",
        "description": "Creates a compliance screening report that includes Know Your Customer (KYC) and Anti-Money Laundering (AML) results for a customer.\nThe report is stored as a PDF customer attachment.\nRequires the KYC and AML products to be enabled for the organization.",
        "responses": {
          "201": {
            "description": "Compliance screening report generated.",
            "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"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/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}"
          }
        ]
      }
    },
    "/external-identifiers": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "External identifiers"
        ],
        "summary": "Retrieve external identifiers",
        "operationId": "GetExternalIdentifierCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of external identifiers.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "List of external identifiers 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/ExternalIdentifier"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/{resource}/{resourceId}/external-identifiers/{service}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/externalIdentifierResource"
        },
        {
          "$ref": "#/components/parameters/externalIdentifierResourceId"
        },
        {
          "$ref": "#/components/parameters/externalIdentifierService"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "External identifiers"
        ],
        "summary": "Retrieve an external identifier",
        "operationId": "GetExternalIdentifier",
        "x-sdk-operation-name": "get",
        "x-sdk-resource": "ExternalIdentifiers",
        "description": "Retrieves an external identifier with a specified resource, resource ID and, service name.",
        "responses": {
          "200": {
            "description": "External identifier retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalIdentifier"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "External identifiers"
        ],
        "summary": "Sync an external identifier",
        "operationId": "PostExternalIdentifier",
        "x-sdk-operation-name": "sync",
        "x-sdk-resource": "ExternalIdentifiers",
        "description": "Synchronizes an external identifier with a specified resource, resource ID, and service name.",
        "responses": {
          "204": {
            "description": "External identifier sync 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"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "External identifiers"
        ],
        "summary": "Upsert an external identifier",
        "operationId": "PutExternalIdentifier",
        "x-sdk-operation-name": "update",
        "x-sdk-resource": "ExternalIdentifiers",
        "description": "Creates or updates an external identifier with a specified resource, resource ID, and service name.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExternalIdentifier"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "External identifier 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/ExternalIdentifier"
                }
              }
            }
          },
          "201": {
            "description": "External identifier 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/ExternalIdentifier"
                }
              }
            }
          },
          "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": [
          "Users"
        ],
        "tags": [
          "External identifiers"
        ],
        "summary": "Delete an external identifier",
        "operationId": "DeleteExternalIdentifier",
        "x-sdk-operation-name": "delete",
        "x-sdk-resource": "ExternalIdentifiers",
        "description": "Deletes an external identifier with a specified resource, resource ID, and service name.",
        "responses": {
          "204": {
            "description": "External identifier 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"
          }
        }
      }
    },
    "/external-services-settings": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "External identifiers"
        ],
        "summary": "Retrieve external service settings",
        "operationId": "GetExternalServiceSettings",
        "x-sdk-operation-name": "getExternalServiceSettings",
        "description": "Retrieves external service settings.",
        "responses": {
          "200": {
            "description": "External service settings retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExternalServiceSettings"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "External identifiers"
        ],
        "summary": "Update external service settings",
        "operationId": "PutExternalServiceSettings",
        "x-sdk-operation-name": "updateExternalServiceSettings",
        "description": "Updates external service settings.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExternalServiceSettings"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "External service 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/ExternalServiceSettings"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/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"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application users"
        ],
        "summary": "Retrieve an application instance",
        "operationId": "GetApplicationInstance",
        "x-sdk-operation-name": "get",
        "description": "Retrieves an application instance with the specified ID.",
        "responses": {
          "200": {
            "description": "Application instance 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/ApplicationInstance"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$applicationInstance = $client->applicationInstances()->load('applicationId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const application = await api.applicationInstances.get({applicationId: 'applicationId'});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$applicationInstance = $service->applicationInstances()->get('applicationId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application users"
        ],
        "summary": "Upsert an application instance",
        "operationId": "PutApplicationInstance",
        "x-sdk-operation-name": "upsert",
        "description": "Creates or updates (upserts) an application instance.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationInstance"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Application instance 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/ApplicationInstance"
                }
              }
            }
          },
          "201": {
            "description": "Application instance 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/ApplicationInstance"
                }
              }
            }
          },
          "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": "$applicationInstance = new Rebilly\\Entities\\ApplicationInstance();\n$applicationInstance->setSettings(['color' => 'red', 'limit' => 5]);\n\ntry {\n    $applicationInstance = $client->applicationInstances()->update('applicationId', $applicationInstance);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// define values to upsert\nconst data = {\n  settings: {\n    color: 'red',\n    limit: 5,\n  },\n};\n\nconst apiKey = await api.applicationInstances.upsert({applicationId: 'applicationId', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$applicationInstance = \\Rebilly\\Sdk\\Model\\ApplicationInstance::from([\n    'settings' => ['color' => 'red', 'limit' => 5],\n]);\n\ntry {\n    $applicationInstance = $service->applicationInstances()->upsert('applicationId', $applicationInstance);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application users"
        ],
        "summary": "Delete application instance",
        "operationId": "DeleteApplicationInstance",
        "x-sdk-operation-name": "delete",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Deletes an application instance with the specified ID.",
        "responses": {
          "204": {
            "description": "Application instance deleted."
          },
          "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->applicationInstances()->delete('applicationId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const request = await api.applicationInstances.delete({applicationId: 'applicationId'});\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->applicationInstances()->delete('applicationId');"
          }
        ]
      }
    },
    "/application-instances/{applicationId}/configuration": {
      "parameters": [
        {
          "$ref": "#/components/parameters/applicationId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application users"
        ],
        "summary": "Retrieve an application instance configuration",
        "operationId": "GetApplicationInstanceConfiguration",
        "x-sdk-operation-name": "getConfiguration",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves the configuration of an installed application with a specified ID.",
        "responses": {
          "200": {
            "description": "Application instance configuration 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/ApplicationInstanceConfiguration"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application users"
        ],
        "summary": "Upsert an application instance configuration",
        "operationId": "PutApplicationInstanceConfiguration",
        "x-sdk-operation-name": "upsertConfiguration",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Creates or updates (upserts) an application instance configuration.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ApplicationInstanceConfiguration"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Application instance configuration 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/ApplicationInstanceConfiguration"
                }
              }
            }
          },
          "201": {
            "description": "Application instance configuration 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/ApplicationInstanceConfiguration"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/applications": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application users"
        ],
        "summary": "Retrieve applications",
        "operationId": "GetApplicationCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of applications that are available in the Rebilly App Store.\nApplications may be sorted by: `id`, `name`, `status`, `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 applications 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/UserApplication"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$applications = $client->applications()->search([\n    'filter' => 'status:available',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.applications.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.applications.getAll(params);\n\n// access the collection items, each item is an Application\nsecondCollection.items.forEach(application => console.log(application.fields.name));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$applicationsPaginator = $service->applications()->getAllPaginator(filter: 'status:available', limit: 5);\nforeach ($applicationsPaginator as $applicationPage) {\n    printf(\"Applications page %d/%d\\n\", $applicationsPaginator->key() + 1, $applicationsPaginator->count());\n    foreach ($applicationPage as $application) {\n        printf(\"Application #%s (%s): %s\\n\", $application->getId(), $application->getStatus(), $application->getName());\n    }\n}\n\n// OR\n\n$applications = $service->applications()->getAll(filter: 'status:available');\nforeach ($applications as $application) {\n    printf(\"Application #%s (%s): %s\\n\", $application->getId(), $application->getStatus(), $application->getName());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application owners"
        ],
        "summary": "Register an application",
        "operationId": "PostApplication",
        "x-sdk-operation-name": "create",
        "description": "Registers an application and displays it publicly in the [App Store](https://app.rebilly.com/app-store).\nBefore you submit an application, read the [App Store documentation](https://www.rebilly.com/docs/content/concepts-and-features/app-store/).",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Application"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Application registered.",
            "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/Application"
                }
              }
            }
          },
          "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": "$application = new Rebilly\\Entities\\Application();\n$application->setName('My application');\n$application->setDescription('My application description');\n$application->setLogoId('fileId');\n$application->setPermissions(['GetTransactionCollection']);\n\ntry {\n    $application = $client->applications()->create($application);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new application\nconst data = {\n    name: 'My application',\n    description: 'My application description',\n    logoId: 'fileId',\n    permissions: ['GetTransactionCollection'],\n};\n\nconst application = await api.applications.create({data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$application = new \\Rebilly\\Sdk\\Model\\Application();\n$application->setName('My application');\n$application->setDescription('My application description');\n$application->setLogoId('fileId');\n$application->setPermissions(['GetTransactionCollection']);\n\ntry {\n    $application = $service->applications()->create($application);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/applications/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application users"
        ],
        "summary": "Retrieve application",
        "operationId": "GetApplication",
        "x-sdk-operation-name": "get",
        "description": "Retrieves an application from the Rebilly App Store with the specified ID.",
        "responses": {
          "200": {
            "description": "Application 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/UserApplication"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$application = $client->applications()->load('applicationId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const application = await api.applications.get({id: 'applicationId'});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$application = $service->applications()->get('applicationId');"
          }
        ]
      }
    },
    "/applications/{id}/instances": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application owners"
        ],
        "summary": "Retrieve application instances",
        "operationId": "GetApplicationInstanceCollection",
        "x-sdk-operation-name": "getInstances",
        "description": "Retrieves a list of application instances for the specified application.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Application instances 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/OwnerApplicationInstance"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$applicationInstances = $client->applications()->loadInstances('applicationId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const applicationInstances = await api.applications.getInstances({id: 'applicationId'});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$applicationInstances = $service->applicationInstances()->get('applicationId');"
          }
        ]
      }
    },
    "/applications/{id}/instances/{organizationId}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "$ref": "#/components/parameters/organizationId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application owners"
        ],
        "summary": "Retrieve an application instance",
        "operationId": "GetApplicationInstanceByOrganization",
        "x-sdk-operation-name": "getInstance",
        "description": "Retrieves an application instance with specified application and organization IDs.",
        "responses": {
          "200": {
            "description": "Application instance 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/OwnerApplicationInstance"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$applicationInstance = $client->applications()->loadInstance('applicationId', 'organizationId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const applicationInstance = await api.applications.getInstance({id: 'applicationId', organizationId: 'organizationId'});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$applicationInstance = $service->applications()->getInstance('applicationId', '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.\nReturns a conflict error if the specified ID belongs to an upcoming invoice.",
        "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"
          },
          "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": "$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}/allocate-credit-balance": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Invoices"
        ],
        "summary": "Allocate customer credit balance to an invoice",
        "operationId": "PostInvoiceAllocateCreditBalance",
        "x-sdk-operation-name": "allocateCreditBalance",
        "description": "Allocates existing allocatable credit memos related to the invoice customer.\nSpecific credit memos cannot be provided in the request and are selected automatically.\nAllocation can be capped with `amount`.\nCredit memos are applied automatically in the specified allocation order.\nIf no order is specified, `oldest-first` is used.",
        "requestBody": {
          "description": "Invoice credit memo automatic allocation settings.",
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/InvoiceCreditMemoAllocationRequest"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Credit memos allocated 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/InvoiceCreditMemoAllocationResponse"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/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",
        "parameters": [
          {
            "$ref": "#/components/parameters/mediaTypeJsonPdf"
          }
        ],
        "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"
                }
              },
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "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}/refund": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Core"
        ],
        "tags": [
          "Credit memos"
        ],
        "summary": "Refund a credit memo",
        "operationId": "PostCreditMemoRefund",
        "x-sdk-operation-name": "refund",
        "description": "Refunds a credit memo with a specified ID.\nThe transactions of the last invoice for the order or the invoice directly related to the credit memo are refunded.",
        "responses": {
          "200": {
            "description": "Credit memo 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/CreditMemo"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "description": "Credit memo available amount exceeds the refundable amount of invoice transactions.",
            "$ref": "#/components/responses/Conflict"
          },
          "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.\n\nThe request body schema depends on the KYC document `documentType`.\nThe operation rejects unknown fields.\n\nSend `type` with one of:\n`identity-proof`, `address-proof`, `purchase-proof`, or `funds-proof`.\nThe specified value identifies the `type` of the document match.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "oneOf": [
                  {
                    "$ref": "#/components/schemas/KycIdentityMatchesOverwrite"
                  },
                  {
                    "$ref": "#/components/schemas/KycAddressMatchesOverwrite"
                  },
                  {
                    "$ref": "#/components/schemas/KycPurchaseMatchesOverwrite"
                  },
                  {
                    "$ref": "#/components/schemas/KycFundsMatchesOverwrite"
                  }
                ],
                "discriminator": {
                  "propertyName": "type",
                  "mapping": {
                    "identity-proof": "#/components/schemas/KycIdentityMatchesOverwrite",
                    "address-proof": "#/components/schemas/KycAddressMatchesOverwrite",
                    "purchase-proof": "#/components/schemas/KycPurchaseMatchesOverwrite",
                    "funds-proof": "#/components/schemas/KycFundsMatchesOverwrite"
                  }
                }
              }
            }
          },
          "description": "KYC document matches overwrite payload.",
          "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"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "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"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "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"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "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"
          },
          {
            "$ref": "#/components/parameters/orderExpand"
          }
        ],
        "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 an 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 canceled 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 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/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 the 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 canceled 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 an order timeline 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"
          },
          {
            "$ref": "#/components/parameters/mediaTypeJsonPdf"
          }
        ],
        "responses": {
          "200": {
            "description": "Transaction retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Transaction"
                }
              },
              "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": "$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": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "API keys"
        ],
        "summary": "Retrieve API keys",
        "operationId": "GetApiKeyCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieve a list of API keys.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "List of API keys 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/ApiKey"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$apiKeys = $client->apiKeys()->search([\n    'filter' => 'description:Test',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.apiKeys.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.apiKeys.getAll(params);\n\n// access the collection items, each item is an ApiKey\nsecondCollection.items.forEach(apiKey => console.log(apiKey.fields.description));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$apiKeysPaginator = $service->apiKeys()->getAllPaginator(limit: 5);\nforeach ($apiKeysPaginator as $apiKeysPage) {\n    printf(\"ApiKeys page %d/%d\\n\", $apiKeysPaginator->key() + 1, $apiKeysPaginator->count());\n    foreach ($apiKeysPage as $apiKey) {\n        printf(\"ApiKey #%s: %s\\n\", $apiKey->getId(), $apiKey->getDescription());\n    }\n}\n\n// OR\n\n$apiKeys = $service->apiKeys()->getAll();\nforeach ($apiKeys as $apiKey) {\n    printf(\"ApiKey #%s: %s\\n\", $apiKey->getId(), $apiKey->getDescription());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "API keys"
        ],
        "summary": "Create an API key",
        "operationId": "PostApiKey",
        "x-sdk-operation-name": "create",
        "description": "Create an API key.",
        "requestBody": {
          "$ref": "#/components/requestBodies/ApiKey"
        },
        "responses": {
          "201": {
            "description": "API key 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/ApiKey"
                }
              }
            }
          },
          "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": "$apiKeyForm = new Rebilly\\Entities\\ApiKey();\n$apiKeyForm->setDescription('Test key');\n\ntry {\n    $apiKey = $client->apiKeys()->create($apiKeyForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new API key\nconst data = {\n    description: 'My new API key',\n    type: 'secret'\n};\n\n// the ID is optional\nconst firstKey = await api.apiKeys.create({data});\n\n// or you can provide one\nconst secondKey = await api.apiKeys.create({id: 'my-second-key', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$apiKeyForm = new \\Rebilly\\Sdk\\Model\\ApiKey();\n$apiKeyForm->setDescription('Test key');\n\ntry {\n    $apiKey = $service->apiKeys()->create($apiKeyForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/api-keys/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "API keys"
        ],
        "summary": "Retrieve API key",
        "operationId": "GetApiKey",
        "x-sdk-operation-name": "get",
        "description": "Retrieve API key with a specified ID.",
        "responses": {
          "200": {
            "description": "API key retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiKey"
                }
              }
            }
          },
          "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": "$apiKeys = $client->apiKeys()->load('apiKeyID');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const apiKey = await api.apiKeys.get({id: 'foobar-001'});\nconsole.log(apiKey.fields.description);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$apiKeys = $service->apiKeys()->get('apiKeyID');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "API keys"
        ],
        "summary": "Upsert an API key",
        "operationId": "PutApiKey",
        "x-sdk-operation-name": "update",
        "description": "Create or update (upsert) API key with a specified ID.",
        "responses": {
          "200": {
            "description": "API key updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiKey"
                }
              }
            }
          },
          "201": {
            "description": "API key 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/ApiKey"
                }
              }
            }
          },
          "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"
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/ApiKey"
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$apiKeyForm = new Rebilly\\Entities\\ApiKey();\n$apiKeyForm->setDescription('Test key');\n\ntry {\n    $apiKey = $client->apiKeys()->update('apiKeyID', $apiKeyForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// define values to update\nconst data = {\n    description: 'A better description'\n};\n\nconst apiKey = await api.apiKeys.update({id: 'my-second-key', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$apiKeyForm = new \\Rebilly\\Sdk\\Model\\ApiKey();\n$apiKeyForm->setDescription('Test key');\n\ntry {\n    $apiKey = $service->apiKeys()->update('apiKeyID', $apiKeyForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "API keys"
        ],
        "summary": "Delete API key",
        "operationId": "DeleteApiKey",
        "x-sdk-operation-name": "delete",
        "description": "Deletes an API key with a specified ID.",
        "responses": {
          "204": {
            "description": "API key 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->apiKeys()->delete('apiKeyID');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const request = await api.apiKeys.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->apiKeys()->delete('apiKeyID');"
          }
        ]
      }
    },
    "/balance-transactions": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Users"
        ],
        "tags": [
          "Balance transactions"
        ],
        "summary": "Retrieve balance transactions",
        "description": "Retrieves a list of balance transactions.\n\n> **Important:** This operation is experimental and may change.",
        "operationId": "GetBalanceTransactionCollection",
        "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 balance 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/BalanceTransaction"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/balance-transactions/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Users"
        ],
        "tags": [
          "Balance transactions"
        ],
        "summary": "Retrieve a balance transaction",
        "description": "Retrieves a balance transaction with a specified identifier.\n\n> **Important:** This operation is experimental and may change.",
        "operationId": "GetBalanceTransaction",
        "x-sdk-operation-name": "get",
        "responses": {
          "200": {
            "description": "Balance transaction retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BalanceTransaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/billing-portals": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Billing portals"
        ],
        "summary": "Retrieve billing portals",
        "operationId": "GetBillingPortalCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of billing portals.",
        "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 billing portals 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/BillingPortal"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Billing portals"
        ],
        "summary": "Create a billing portal",
        "operationId": "PostBillingPortal",
        "x-sdk-operation-name": "create",
        "description": "Creates a billing portal.",
        "responses": {
          "201": {
            "description": "Billing portal 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/BillingPortal"
                }
              }
            }
          },
          "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/BillingPortal"
              }
            }
          }
        }
      }
    },
    "/billing-portals/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Billing portals"
        ],
        "summary": "Retrieve a billing portal",
        "operationId": "GetBillingPortal",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a billing portal with a specified ID.",
        "responses": {
          "200": {
            "description": "Billing portal retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BillingPortal"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Billing portals"
        ],
        "summary": "Upsert a billing portal",
        "operationId": "PutBillingPortal",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a billing portal with a specified ID.",
        "responses": {
          "200": {
            "description": "Billing portal 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/BillingPortal"
                }
              }
            }
          },
          "201": {
            "description": "Billing portal 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/BillingPortal"
                }
              }
            }
          },
          "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"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BillingPortal"
              }
            }
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Billing portals"
        ],
        "summary": "Delete a billing portal",
        "operationId": "DeleteBillingPortal",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a billing portal with a specified ID.",
        "responses": {
          "204": {
            "description": "Billing portal 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"
          }
        }
      }
    },
    "/broadcast-messages": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Broadcast messages"
        ],
        "summary": "Retrieve broadcast messages",
        "operationId": "GetBroadcastMessageCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of broadcast messages.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "List of broadcast 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/BroadcastMessage"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Broadcast messages"
        ],
        "summary": "Create a broadcast message",
        "operationId": "PostBroadcastMessage",
        "x-sdk-operation-name": "create",
        "description": "Creates a broadcast message.",
        "responses": {
          "201": {
            "description": "Broadcast 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/BroadcastMessage"
                }
              }
            }
          },
          "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/BroadcastMessage"
              }
            }
          },
          "description": "Broadcast message resource.",
          "required": true
        }
      }
    },
    "/broadcast-messages/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Broadcast messages"
        ],
        "summary": "Retrieve a broadcast message",
        "operationId": "GetBroadcastMessage",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a broadcast message.",
        "responses": {
          "200": {
            "description": "Broadcast message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/BroadcastMessage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Broadcast messages"
        ],
        "summary": "Delete a broadcast message",
        "operationId": "DeleteBroadcastMessage",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a broadcast message with a specified ID.",
        "responses": {
          "204": {
            "description": "Broadcast message deleted."
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Broadcast messages"
        ],
        "summary": "Update a broadcast message",
        "operationId": "PatchBroadcastMessage",
        "x-sdk-operation-name": "update",
        "description": "Updates a broadcast message with a specified ID.",
        "responses": {
          "200": {
            "description": "Broadcast message 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/BroadcastMessage"
                }
              }
            }
          },
          "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/PatchBroadcastMessage"
              }
            }
          },
          "description": "Broadcast message resource.",
          "required": true
        }
      }
    },
    "/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": {
      "get": {
        "deprecated": true,
        "x-products": [
          "Users"
        ],
        "tags": [
          "Checkout forms"
        ],
        "summary": "Retrieve checkout forms",
        "operationId": "GetCheckoutFormCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of checkout forms.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "Checkout forms 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/CheckoutForm"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "deprecated": true,
        "x-products": [
          "Users"
        ],
        "tags": [
          "Checkout forms"
        ],
        "summary": "Create a checkout form",
        "operationId": "PostCheckoutForm",
        "x-sdk-operation-name": "create",
        "description": "Creates a checkout form.",
        "responses": {
          "201": {
            "description": "Checkout form 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/CheckoutForm"
                }
              }
            }
          },
          "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/CheckoutForm"
              }
            }
          }
        }
      }
    },
    "/checkout-forms/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "deprecated": true,
        "x-products": [
          "Users"
        ],
        "tags": [
          "Checkout forms"
        ],
        "summary": "Retrieve a checkout form",
        "operationId": "GetCheckoutForm",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a checkout form with a specified ID.",
        "responses": {
          "200": {
            "description": "Checkout form retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckoutForm"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "deprecated": true,
        "x-products": [
          "Users"
        ],
        "tags": [
          "Checkout forms"
        ],
        "summary": "Upsert a checkout form",
        "operationId": "PutCheckoutForm",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a checkout form with a specified ID.",
        "responses": {
          "200": {
            "description": "Checkout form updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CheckoutForm"
                }
              }
            }
          },
          "201": {
            "description": "Checkout form 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/CheckoutForm"
                }
              }
            }
          },
          "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"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckoutForm"
              }
            }
          }
        }
      },
      "delete": {
        "deprecated": true,
        "x-products": [
          "Users"
        ],
        "tags": [
          "Checkout forms"
        ],
        "summary": "Delete a checkout form",
        "operationId": "DeleteCheckoutForm",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a checkout form with a specified ID.",
        "responses": {
          "204": {
            "description": "Checkout form 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"
          }
        }
      }
    },
    "/service-credentials/{type}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/credentialType"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "tags": [
          "Service credentials"
        ],
        "summary": "Retrieve service credentials",
        "operationId": "GetServiceCredentialCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of service credentials.",
        "responses": {
          "200": {
            "description": "List of service credentials 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/ServiceCredential"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// type is required, other parameters are optional\nconst firstCollection = await api.serviceCredentials.getAll({type: 'webhook'});\n\n// alternatively you can specify one or more of them\nconst params = {type: 'webhook', limit: 20, offset: 100};\nconst secondCollection = await api.serviceCredentials.getAll(params);\n\n// access the collection items, each item is a ServiceCredential\nsecondCollection.items.forEach(serviceCredential => console.log(serviceCredential.fields.status));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Service credentials"
        ],
        "summary": "Create a service credential",
        "operationId": "PostServiceCredential",
        "x-sdk-operation-name": "create",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Creates a service credential.",
        "responses": {
          "201": {
            "description": "Service 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/ServiceCredential"
                }
              }
            }
          },
          "303": {
            "description": "Existing service credential retrieved.",
            "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/ServiceCredential"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/PostCredential"
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// first set the required properties for the new service credential\nconst data = {\n    type: 'webhook',\n    host: 'foobar.test.com',\n    auth: {\n        type: 'none'\n    }\n};\n\nconst credential = await api.serviceCredentials.create({type: 'webhook', data});\n// use the ID to authenticate your webhook in Rebilly\nconsole.log(credential.fields.id);\n"
          }
        ]
      }
    },
    "/service-credentials/{type}/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/credentialType"
        },
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Service credentials"
        ],
        "summary": "Retrieve a service credential",
        "operationId": "GetServiceCredential",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a service credential with a specified ID.",
        "responses": {
          "200": {
            "description": "Service credential retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceCredential"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const credential = await api.serviceCredentials.get({type: 'webhook', id: 'service-credential-1'});\nconsole.log(credential.fields.status);\n"
          }
        ]
      },
      "patch": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Service credentials"
        ],
        "summary": "Update a service credential",
        "operationId": "PatchServiceCredential",
        "x-sdk-operation-name": "update",
        "description": "Updates a service credential with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PatchCredential"
        },
        "responses": {
          "200": {
            "description": "Service 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/ServiceCredential"
                }
              }
            }
          },
          "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": "// first set the status to update for the service credential\nconst data = {\n    type: 'webhook',\n    status: 'deactivated'\n};\n\nconst credential = await api.serviceCredentials.update({type: 'webhook', id: 'service-credential-1', data});\n"
          }
        ]
      }
    },
    "/service-credentials/{type}/{id}/items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/credentialType"
        },
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Service credentials"
        ],
        "summary": "List credential root items",
        "operationId": "GetServiceCredentialItemCollection",
        "x-sdk-operation-name": "getItems",
        "description": "Retrieves a list of root items for a specified credential.",
        "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 credential root items 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/GoogleSpreadsheet"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// type and id are required, other parameters are optional\nconst firstCollection = await api.serviceCredentials.getItems({type: 'oauth2', id: 'service-credential-1'});\n\n// alternatively you can specify one or more of them\nconst params = {type: 'oauth2', id: 'service-credential-1', limit: 20, offset: 100};\nconst secondCollection = await api.serviceCredentials.getItems(params);\n"
          }
        ]
      }
    },
    "/custom-domains": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Custom domains"
        ],
        "summary": "Retrieve custom domains",
        "operationId": "GetCustomDomainCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieve a list of custom domains.",
        "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 custom domains 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/CustomDomain"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Custom domains"
        ],
        "summary": "Create a custom domain",
        "operationId": "PostCustomDomain",
        "x-sdk-operation-name": "create",
        "description": "Create a custom domain.",
        "responses": {
          "201": {
            "description": "Custom domain 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/CustomDomain"
                }
              }
            }
          },
          "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/CustomDomain"
              }
            }
          }
        }
      }
    },
    "/custom-domains/{domain}": {
      "parameters": [
        {
          "name": "domain",
          "in": "path",
          "description": "Resource domain.",
          "required": true,
          "schema": {
            "type": "string",
            "maxLength": 255,
            "pattern": "^[@~\\-\\.\\w]+$"
          }
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Custom domains"
        ],
        "summary": "Retrieve a custom domain",
        "operationId": "GetCustomDomain",
        "x-sdk-operation-name": "get",
        "description": "Retrieve a custom domain with a specified ID.",
        "responses": {
          "200": {
            "description": "Custom domain retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomDomain"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Custom domains"
        ],
        "summary": "Delete a custom domain",
        "operationId": "DeleteCustomDomain",
        "x-sdk-operation-name": "delete",
        "description": "Delete a custom domain with a specified ID.",
        "responses": {
          "204": {
            "description": "Custom domains 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"
          }
        }
      }
    },
    "/email-delivery-setting-verifications/{token}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/token"
        }
      ],
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email delivery settings"
        ],
        "summary": "Verify an email delivery setting",
        "operationId": "PutEmailDeliverySettingsVerification",
        "x-sdk-operation-name": "verify",
        "x-sdk-resource": "EmailDeliverySettings",
        "description": "Verifies an email delivery setting.",
        "responses": {
          "200": {
            "description": "Email delivery setting verified.",
            "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/EmailDeliverySetting"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/email-delivery-settings": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email delivery settings"
        ],
        "summary": "Retrieve email delivery settings",
        "operationId": "GetEmailDeliverySettingCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves email delivery settings.",
        "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 email delivery settings 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/EmailDeliverySetting"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email delivery settings"
        ],
        "summary": "Create an email delivery setting",
        "operationId": "PostEmailDeliverySetting",
        "x-sdk-operation-name": "create",
        "description": "Creates an email delivery setting.\nEmail delivery settings are used together with email messages,\nor templates, to send emails.",
        "responses": {
          "201": {
            "description": "Email delivery setting 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/EmailDeliverySetting"
                }
              }
            }
          },
          "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/EmailDeliverySetting"
              }
            }
          },
          "description": "Email delivery setting resource.",
          "required": true
        }
      }
    },
    "/email-delivery-settings/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email delivery settings"
        ],
        "summary": "Retrieve an email delivery setting",
        "operationId": "GetEmailDeliverySetting",
        "x-sdk-operation-name": "get",
        "description": "Retrieves an email delivery setting with a specified ID.",
        "responses": {
          "200": {
            "description": "Email delivery setting retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailDeliverySetting"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email delivery settings"
        ],
        "summary": "Delete an email delivery setting",
        "operationId": "DeleteEmailDeliverySetting",
        "x-sdk-operation-name": "delete",
        "description": "Deletes an email delivery setting with a specified ID.",
        "responses": {
          "204": {
            "description": "Email delivery setting deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email delivery settings"
        ],
        "summary": "Update an email delivery setting",
        "operationId": "PatchEmailDeliverySetting",
        "x-sdk-operation-name": "update",
        "description": "Updates an email delivery setting with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmailDeliverySetting"
              }
            }
          },
          "description": "Email delivery setting resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Email delivery setting 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/EmailDeliverySetting"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/email-delivery-settings/{id}/resend-email-verification": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email delivery settings"
        ],
        "summary": "Resend email delivery setting verification email",
        "operationId": "PostResendEmailDeliverySettingVerification",
        "x-sdk-operation-name": "resendVerification",
        "description": "Resends a verification email for an email delivery setting with a specified ID.",
        "responses": {
          "200": {
            "description": "Verification email sent.",
            "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/EmailDeliverySetting"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/email-messages": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email messages"
        ],
        "summary": "Retrieve email messages",
        "operationId": "GetEmailMessageCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of email messages.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "List of email 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/EmailMessage"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email messages"
        ],
        "summary": "Create an email message",
        "operationId": "PostEmailMessage",
        "x-sdk-operation-name": "create",
        "description": "Creates an email message.",
        "responses": {
          "201": {
            "description": "Email 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/EmailMessage"
                }
              }
            }
          },
          "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/EmailMessage"
              }
            }
          },
          "description": "Email message resource.",
          "required": true
        }
      }
    },
    "/email-messages/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email messages"
        ],
        "summary": "Retrieve an email message",
        "operationId": "GetEmailMessage",
        "x-sdk-operation-name": "get",
        "description": "Retrieves an email message with a specified ID.",
        "responses": {
          "200": {
            "description": "Email message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EmailMessage"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email messages"
        ],
        "summary": "Delete an email message",
        "operationId": "DeleteEmailMessage",
        "x-sdk-operation-name": "delete",
        "description": "Deletes an email message with a specified ID.",
        "responses": {
          "204": {
            "description": "Email message deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "patch": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email messages"
        ],
        "summary": "Send an email message",
        "operationId": "PatchEmailMessage",
        "x-sdk-operation-name": "send",
        "description": "Sends an email message.",
        "responses": {
          "200": {
            "description": "Email message 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/EmailMessage"
                }
              }
            }
          },
          "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"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "title": "PatchEmailMessageRequest",
                "required": [
                  "status"
                ],
                "properties": {
                  "status": {
                    "description": "Status of the email message.",
                    "type": "string",
                    "enum": [
                      "outbox"
                    ]
                  }
                }
              }
            }
          },
          "description": "Email message status.",
          "required": true
        }
      }
    },
    "/email-notifications": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email notifications"
        ],
        "summary": "Retrieve email notification events",
        "operationId": "GetEmailNotificationCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list email notification events.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "List of email notification events 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/EmailNotification"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/events": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Retrieve system events",
        "operationId": "GetEventCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of system events.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of system events 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/SystemEvent"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.events.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100};\nconst secondCollection = await api.events.getAll(params);\n\n// access the collection items, each item is a SystemEvent\nsecondCollection.items.forEach(event => console.log(event.fields.eventType));\n"
          }
        ]
      }
    },
    "/events/{eventType}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Retrieve event information",
        "operationId": "GetEvent",
        "x-sdk-operation-name": "get",
        "description": "Retrieves event information for a specified event type.",
        "responses": {
          "200": {
            "description": "Rules retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SystemEvent"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const eventDetails = await api.events.get({eventType: 'gateway-account-created'});\nconsole.log(eventDetails.fields.rulesCount);"
          }
        ]
      }
    },
    "/events/{eventType}/rules": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Retrieve event rules",
        "operationId": "GetEventRuleCollection",
        "x-sdk-operation-name": "getRules",
        "description": "Retrieves rules associated with a specified event type.",
        "responses": {
          "200": {
            "description": "Rules retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuleSet"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const event = await api.events.getRules({eventType: 'transaction-processed'});\nconsole.log(event.fields.rules);"
          }
        ]
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Update event rules",
        "operationId": "PutEventRule",
        "x-sdk-operation-name": "createRules",
        "description": "Updates rules associated with a specified event type.",
        "responses": {
          "200": {
            "description": "Rules 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/RuleSet"
                }
              }
            }
          },
          "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"
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/RuleSet"
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// define at least one rule\nconst data = {\n    rules: [\n        {\n            name: 'The One Rule',\n            status: 'active',\n            final: true,\n            criteria: {},\n            actions: [\n                {\n                     name: 'blocklist',\n                     status: 'active',\n                     type: 'email',\n                     ttl: 789\n                },\n                {\n                     name: 'stop-subscriptions',\n                     status: 'active'\n                }\n            ]\n        }\n\n    ]\n};\n\nconst ruleset = await api.events.createRules({eventType: 'risk-score-changed', data});\nconsole.log(ruleset.fields.version);\n\n\n\n// updating rules\n\n// define the ruleset to override the current values within\n// the event\nconst data = {\n    rules: [\n        {\n            name: 'The One Rule',\n            status: 'active',\n            final: true,\n            criteria: {},\n            actions: [\n                {\n                     name: 'blocklist',\n                     status: 'active',\n                     type: 'email',\n                     ttl: 789\n                },\n                {\n                     name: 'stop-subscriptions',\n                     status: 'active'\n                }\n            ]\n        }\n\n    ]\n};\n\nconst ruleset = await api.events.updateRules({eventType: 'risk-score-changed', data});\n// each time the event's ruleset is modified\n// the version number is incremented\nconsole.log(ruleset.fields.version);\n"
          }
        ]
      }
    },
    "/events/{eventType}/timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules timeline"
        ],
        "summary": "Retrieve rules engine timeline messages",
        "operationId": "GetRuleSetCollection",
        "x-sdk-operation-name": "getAllTimelineMessages",
        "description": "Retrieves a list of rules engine 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 rules engine 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/RulesEngineTimeline"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules timeline"
        ],
        "summary": "Create a rules engine timeline comment",
        "operationId": "PostRuleSetTimeline",
        "x-sdk-operation-name": "createTimelineComment",
        "description": "Creates a rules engine timeline comment.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RulesEngineTimeline"
              }
            }
          },
          "description": "Rules engine timeline resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Rules engine 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/RulesEngineTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/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"
          }
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules timeline"
        ],
        "summary": "Retrieve a rules engine timeline message",
        "operationId": "GetRuleSetTimeline",
        "x-sdk-operation-name": "getTimelineMessage",
        "description": "Retrieves a rules engine timeline message with a specified ID.",
        "responses": {
          "200": {
            "description": "Rules engine message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RulesEngineTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules timeline"
        ],
        "summary": "Delete a rules engine timeline message",
        "operationId": "DeleteRuleSetTimeline",
        "x-sdk-operation-name": "deleteTimelineMessage",
        "description": "Deletes a rules engine timeline message with a specified ID.",
        "responses": {
          "204": {
            "description": "Rules engine 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"
          }
        }
      }
    },
    "/events/{eventType}/rules/history": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Retrieve change history of a ruleset",
        "operationId": "GetEventRuleHistoryCollection",
        "x-sdk-operation-name": "getRulesHistory",
        "description": "Retrieves the change history of a ruleset with a specified event type.\nAll ruleset changes are recorded in the change history.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFields"
          }
        ],
        "responses": {
          "200": {
            "description": "Ruleset history 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/RuleSetHistoryItem"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// get the latest 20 versions for this event ID\nconst history = await api.events.getRulesVersionNumber({eventType: 'risk-score-changed', limit: 20});\n// each item exposes the version and `createdTime`\nhistory.items.forEach(edit => console.log(edit.fields.version));"
          }
        ]
      }
    },
    "/events/{eventType}/rules/history/{version}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        },
        {
          "$ref": "#/components/parameters/rulesVersion"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Retrieve change history record of a ruleset",
        "operationId": "GetEventRuleHistory",
        "x-sdk-operation-name": "getRulesVersionNumber",
        "description": "Retrieves the change history record of a ruleset with a specified event type.\nA history record is created each time rules are changed.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFields"
          }
        ],
        "responses": {
          "200": {
            "description": "Ruleset history record retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuleSetHistoryItem"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// get version #2 details for this event ID\nconst history = await api.events.getRulesVersionNumber({eventType: 'risk-score-changed', version: 2});\n// the history exposes the version number and its `createdTime`\nconsole.log(history.fields.createdTime);"
          }
        ]
      }
    },
    "/events/{eventType}/rules/versions/{version}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        },
        {
          "$ref": "#/components/parameters/rulesVersion"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Retrieve a version of a ruleset",
        "operationId": "GetEventRuleVersion",
        "x-sdk-operation-name": "getRulesVersionDetail",
        "description": "Retrieves a version of a ruleset with a specified event type.\nA new version is created each time you change a rule.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFields"
          }
        ],
        "responses": {
          "200": {
            "description": "Ruleset version retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuleSetVersion"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// get version #2 for this event ID\nconst version = await api.events.getRulesVersionDetail({eventType: 'risk-score-changed', version: 2});\n// the version exposes the ruleset \nconsole.log(version.fields.rules);"
          }
        ]
      }
    },
    "/events/{eventType}/rules/drafts": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Retrieve draft rulesets",
        "operationId": "GetEventRuleSetDraftCollection",
        "x-sdk-operation-name": "getAllDraftRulesets",
        "description": "Retrieves a list of draft rulesets for a specified event type.\nThe result are sorted by updated time in descending order.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFields"
          }
        ],
        "responses": {
          "200": {
            "description": "Draft rulesets 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/RuleSetDraft"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Create a draft ruleset",
        "operationId": "PostEventRuleSetDraft",
        "x-sdk-operation-name": "createDraftRuleset",
        "description": "Creates a draft ruleset for a specified event type.",
        "responses": {
          "201": {
            "description": "Draft ruleset 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/RuleSetDraft"
                }
              }
            }
          },
          "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"
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/RuleSetDraft"
        }
      }
    },
    "/events/{eventType}/rules/drafts/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        },
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Retrieve a draft ruleset",
        "operationId": "GetEventRuleSetDraft",
        "x-sdk-operation-name": "getDraftRuleset",
        "description": "Retrieves a draft ruleset with a specified ID and event type.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionFields"
          }
        ],
        "responses": {
          "200": {
            "description": "Draft ruleset retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RuleSetDraft"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Delete a draft ruleset",
        "operationId": "DeleteEventRuleSetDraft",
        "x-sdk-operation-name": "deleteDraftRuleset",
        "description": "Deletes a draft ruleset with a specified ID and event type.",
        "responses": {
          "204": {
            "description": "Draft ruleset 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"
          }
        }
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Update a draft ruleset",
        "operationId": "PutEventRuleSetDraft",
        "x-sdk-operation-name": "updateDraftRuleset",
        "description": "Updates a draft ruleset for a specified event type.",
        "responses": {
          "200": {
            "description": "Draft ruleset 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/RuleSetDraft"
                }
              }
            }
          },
          "201": {
            "description": "Draft ruleset 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/RuleSetDraft"
                }
              }
            }
          },
          "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"
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/RuleSetDraft"
        }
      }
    },
    "/forgot-password": {
      "servers": [
        {
          "url": "https://api-sandbox.rebilly.com",
          "description": "Sandbox server"
        },
        {
          "url": "https://api.rebilly.com",
          "description": "Live server"
        }
      ],
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Reset password"
        ],
        "summary": "Request a password reset",
        "operationId": "PostForgotPasswordRequest",
        "x-sdk-operation-name": "forgotPassword",
        "x-sdk-resource": "Account",
        "description": "Sends an email with a link containing a token to reset a user password.",
        "security": [],
        "responses": {
          "204": {
            "description": "Email sent."
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ForgotPassword"
              }
            }
          },
          "description": "Forgot password resource.",
          "required": true
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$forgotPasswordForm = new Rebilly\\Entities\\ForgotPassword();\n$forgotPasswordForm->setEmail('johndoe@test.com');\n\ntry {\n    $client->users()->forgotPassword($forgotPasswordForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "const data = {\n    email: 'acme+test@rebilly.com'\n};\n\nconst request = await api.account.forgotPassword({data});\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$forgotPasswordForm = new \\Rebilly\\Sdk\\Model\\ForgotPassword();\n$forgotPasswordForm->setEmail('johndoe@test.com');\n\ntry {\n    $service->account()->forgotPassword($forgotPasswordForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/gateway-accounts": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Retrieve gateway accounts",
        "operationId": "GetGatewayAccountCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of gateway accounts.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionFields"
          }
        ],
        "responses": {
          "200": {
            "description": "List of gateway 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/GatewayAccount"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$gatewayAccounts = $client->$gatewayAccounts()->search([\n    'filter' => 'currency:USD',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.gatewayAccounts.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.gatewayAccounts.getAll(params);\n\n// access the collection items, each item is a GatewayAccount\nsecondCollection.items.forEach(gatewayAccount => console.log(gatewayAccount.fields.gatewayName));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$gatewayAccountsPaginator = $service->gatewayAccounts()->getAllPaginator(limit: 5, filter: 'currency:USD');\nforeach ($gatewayAccountsPaginator as $gatewayAccountsPage) {\n    printf(\"Gateway accounts page %d/%d\\n\", $gatewayAccountsPaginator->key() + 1, $gatewayAccountsPaginator->count());\n    foreach ($gatewayAccountsPage as $gatewayAccount) {\n        printf(\"Gateway account #%s: %s\\n\", $gatewayAccount->getId(), $gatewayAccount->getGatewayName());\n    }\n}\n\n// OR\n\n$gatewayAccounts = $service->gatewayAccounts()->getAll(filter: 'currency:USD');\nforeach ($gatewayAccounts as $gatewayAccount) {\n    printf(\"Gateway account #%s: %s\\n\", $gatewayAccount->getId(), $gatewayAccount->getGatewayName());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Create a gateway account",
        "operationId": "PostGatewayAccount",
        "x-sdk-operation-name": "create",
        "description": "Creates a gateway account.",
        "requestBody": {
          "$ref": "#/components/requestBodies/GatewayAccount"
        },
        "responses": {
          "201": {
            "description": "Gateway 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/GatewayAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "description": "Invalid data sent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvalidError"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$gatewayAccountForm = new Rebilly\\Entities\\GatewayAccount();\n\n$gatewayAccountForm->setGatewayName('A1Gateway');\n$gatewayAccountForm->setAcquirerName('Bank of Rebilly');\n$gatewayAccountForm->setOrganizationId('organizationId');\n$gatewayAccountForm->setMerchantCategoryCode(5734);\n$gatewayAccountForm->setWebsites([\n    'websiteId1',\n    'websiteId2',\n]);\n$gatewayAccountForm->setPaymentCardSchemes([\n    Rebilly\\Entities\\PaymentCardScheme::SCHEME_VISA,\n    Rebilly\\Entities\\PaymentCardScheme::SCHEME_MASTERCARD,\n]);\n$gatewayAccountForm->setMethod(Rebilly\\Entities\\PaymentMethod::METHOD_CASH);\n\n$gatewayConfig = [\n    'accountId' => 'test',\n    'password' => '123',\n];\n\n$gatewayAccountForm->setGatewayConfig($gatewayConfig);\n\ntry {\n    $gatewayAccount = $client->gatewayAccounts()->create($gatewayAccountForm);\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 gateway account\nconst data = {\n    gatewayName: 'RebillyProcessor',\n    acquirerName: 'RebillyProcessor',\n    merchantCategoryCode: 0,\n    acceptedCurrencies: ['USD'],\n    method: 'payment-card',\n    paymentCardSchemes: [\n        'Visa', 'MasterCard', 'American Express', \n        'Discover', 'Diners Club', 'JCB'\n    ],\n    // the gatewayConfig varies for each gateway name, \n    // see the API spec for details\n    gatewayConfig: {},\n};\n\n// the ID is optional\nconst firstKey = await api.gatewayAccounts.create({data});\n\n// or you can provide one\nconst secondKey = await api.gatewayAccounts.create({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$gatewayAccountForm = new \\Rebilly\\Sdk\\Model\\Stripe();\n$gatewayAccountForm->setAcquirerName('Bank of Rebilly');\n$gatewayAccountForm->setMerchantCategoryCode('5734');\n$gatewayAccountForm->setPaymentCardSchemes([\n    'Visa',\n    'MasterCard',\n]);\n$gatewayAccountForm->setMethod('payment-card');\n\ntry {\n    $gatewayAccount = $service->gatewayAccounts()->create($gatewayAccountForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/gateway-accounts/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Retrieves a gateway account",
        "operationId": "GetGatewayAccount",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a gateway account with a specified ID.",
        "responses": {
          "200": {
            "description": "Gateway account retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GatewayAccount"
                }
              }
            }
          },
          "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": "$gatewayAccount = $client->gatewayAccounts()->load('gatewayAccountId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const gatewayAccount = await api.gatewayAccounts.get({id: 'foobar-001'});\nconsole.log(gatewayAccount.fields.gatewayName);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$gatewayAccount = $service->gatewayAccounts()->get('gatewayAccountId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Upsert a gateway account",
        "operationId": "PutGatewayAccount",
        "x-sdk-operation-name": "upsert",
        "description": "Creates or updates (upserts) a gateway account with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/GatewayAccount"
        },
        "responses": {
          "200": {
            "description": "Gateway 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/GatewayAccount"
                }
              }
            }
          },
          "201": {
            "description": "Gateway 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/GatewayAccount"
                }
              }
            }
          },
          "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": "$gatewayAccountForm = new Rebilly\\Entities\\GatewayAccount();\n\n$gatewayAccountForm->setGatewayName('A1Gateway');\n$gatewayAccountForm->setAcquirerName('Bank of Rebilly');\n$gatewayAccountForm->setOrganizationId('organizationId');\n$gatewayAccountForm->setMerchantCategoryCode(5734);\n$gatewayAccountForm->setWebsites([\n    'websiteId1',\n    'websiteId2',\n]);\n$gatewayAccountForm->setPaymentCardSchemes([\n    Rebilly\\Entities\\PaymentCardScheme::SCHEME_VISA,\n    Rebilly\\Entities\\PaymentCardScheme::SCHEME_MASTERCARD,\n]);\n$gatewayAccountForm->setMethod(Rebilly\\Entities\\PaymentMethod::METHOD_CASH);\n\n$gatewayConfig = [\n    'accountId' => 'test',\n    'password' => '123',\n];\n\n$gatewayAccountForm->setGatewayConfig($gatewayConfig);\n\ntry {\n    $gatewayAccount = $client->gatewayAccounts()->update('gatewayAccountId', $gatewayAccountForm);\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 gateway account\nconst data = {\n    gatewayName: 'RebillyProcessor',\n    acquirerName: 'RebillyProcessor',\n    merchantCategoryCode: 0,\n    acceptedCurrencies: ['USD'],\n    method: 'payment-card',\n    paymentCardSchemes: [\n        'Visa', 'MasterCard', 'American Express', \n        'Discover', 'Diners Club', 'JCB'\n    ],\n    // the gatewayConfig varies for each gateway name, \n    // see the API spec for details\n    gatewayConfig: {},\n};\n\n// the ID is optional\nconst firstKey = await api.gatewayAccounts.create({data});\n\n// or you can provide one\nconst secondKey = await api.gatewayAccounts.create({id: 'my-second-id', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$gatewayAccountForm = new \\Rebilly\\Sdk\\Model\\Stripe();\n$gatewayAccountForm->setAcquirerName('Bank of Rebilly');\n$gatewayAccountForm->setMerchantCategoryCode('5734');\n$gatewayAccountForm->setPaymentCardSchemes([\n    'Visa',\n    'MasterCard',\n]);\n$gatewayAccountForm->setMethod('payment-card');\n\ntry {\n    $gatewayAccount = $service->gatewayAccounts()->update('gatewayAccountId', $gatewayAccountForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "patch": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Update a gateway account",
        "operationId": "PatchGatewayAccount",
        "x-sdk-operation-name": "update",
        "description": "Updates a gateway account with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/GatewayAccount"
        },
        "responses": {
          "200": {
            "description": "Gateway 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/GatewayAccount"
                }
              }
            }
          },
          "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": "// build data with only the fields you wish to update\nconst data = {\n    paymentCardSchemes: [\n            'Visa', 'MasterCard', 'American Express'\n    ]\n};\n\nconst secondKey = await api.gatewayAccounts.update({id: 'my-second-id', data});"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Delete a gateway account",
        "operationId": "DeleteGatewayAccount",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a gateway account with a specified ID.",
        "responses": {
          "204": {
            "description": "Gateway account 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->gatewayAccounts()->delete('gatewayAccountId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const request = await api.gatewayAccounts.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->gatewayAccounts()->delete('gatewayAccountId');"
          }
        ]
      }
    },
    "/gateway-accounts/{id}/close": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Close a gateway account",
        "operationId": "PostGatewayAccountClosure",
        "x-sdk-operation-name": "close",
        "description": "Closes a gateway account with a specified ID.\nThis process is also known as archiving.\n\nWhen a gateway account is closed,\nthe gateway cannot process transactions and the `status` attribute is set to `closed`.\n\n>**Important:** Closing a gateway account cannot be undone. Do so with caution.",
        "responses": {
          "201": {
            "description": "Gateway account closed.",
            "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/GatewayAccount"
                }
              }
            }
          },
          "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 gatewayAccount = await api.gatewayAccounts.close({id: 'foobar-001'});\nconsole.log(gatewayAccount.fields.status);"
          }
        ]
      }
    },
    "/gateway-accounts/{id}/disable": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Disable a gateway account",
        "operationId": "PostGatewayAccountDisablement",
        "x-sdk-operation-name": "disable",
        "description": "Disables a gateway account with a specified ID.\n\nWhen a gateway account is disabled,\nthe gateway cannot process transactions and the `status` attribute is set to `inactive`.",
        "responses": {
          "201": {
            "description": "Gateway account disabled.",
            "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/GatewayAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "description": "Gateway account is pending activation and cannot be disabled."
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const gatewayAccount = await api.gatewayAccounts.disable({id: 'foobar-001'});\nconsole.log(gatewayAccount.fields.status);"
          }
        ]
      }
    },
    "/gateway-accounts/{id}/downtime-schedules": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "List gateway account downtime schedules",
        "operationId": "GetGatewayAccountDowntimeScheduleCollection",
        "x-sdk-operation-name": "getAllDowntimeSchedules",
        "description": "Retrieves a list of downtime schedules for a gateway account with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of gateway account downtime schedules 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/GatewayAccountDowntimeSchedule"
                  }
                }
              }
            }
          },
          "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.gatewayAccounts.getAllDowntimeSchedules({id: 'my-gateway'});\n\n// alternatively you can specify one or more of them\nconst params = {id: 'my-gateway', limit: 20, offset: 100};\nconst secondCollection = await api.gatewayAccounts.getAllDowntimeSchedules(params);\n\n// access the collection items, each item is a GatewayAccountDowntimeSchedule\nsecondCollection.items\n    .forEach(gatewayAccount => console.log(gatewayAccount.fields.reason));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Create a gateway account downtime schedule",
        "operationId": "PostGatewayAccountDowntimeSchedule",
        "x-sdk-operation-name": "createDowntimeSchedule",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Creates a downtime schedule for a gateway account with a specified ID.",
        "responses": {
          "201": {
            "description": "Gateway account downtime schedule 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/GatewayAccountDowntimeSchedule"
                }
              }
            }
          },
          "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"
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/GatewayAccountDowntimeSchedule"
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// first set the required properties for\n// the new gateway account downtime schedule\nconst data = {\n    startTime: '2018-08-02T15:13:23Z',\n    endTime: '2018-08-02T15:13:23Z'\n};\n\n// the gateway ID is required\nconst secondKey = await api.gatewayAccounts.createDowntimeSchedule({id: 'my-second-id', data});"
          }
        ]
      }
    },
    "/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"
          }
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Retrieve a gateway account downtime schedule",
        "operationId": "GetGatewayAccountDowntimeSchedule",
        "x-sdk-operation-name": "getDowntimeSchedule",
        "description": "Retrieves a gateway account downtime schedule with a specified ID.",
        "responses": {
          "200": {
            "description": "Gateway downtime schedule retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GatewayAccountDowntimeSchedule"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const downtimeSchedule = await api.gatewayAccounts.getDowntimeSchedule({id: 'foobar-001', downtimeScheduleId: 'foobar-202'});\nconsole.log(downtimeSchedule.fields.reason);"
          }
        ]
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Update a gateway account downtime schedule",
        "operationId": "PutGatewayAccountDowntimeSchedule",
        "x-sdk-operation-name": "updateDowntimeSchedule",
        "description": "Updates a gateway account downtime schedule with a specified ID.",
        "responses": {
          "200": {
            "description": "Gateway account downtime schedule 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/GatewayAccountDowntimeSchedule"
                }
              }
            }
          },
          "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"
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/GatewayAccountDowntimeSchedule"
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// first set the required properties for\n// the update gateway account downtime schedule\nconst data = {\n    startTime: '2018-08-02T15:13:23Z',\n    endTime: '2018-08-02T15:13:23Z'\n};\n\n// the gateway ID is required\nconst secondKey = await api.gatewayAccounts\n    .updateDowntimeSchedule({id: 'my-second-id', downtimeScheduleId: 'schedule-id', data});"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Delete a gateway account downtime schedule",
        "operationId": "DeleteGatewayAccountDowntimeSchedule",
        "x-sdk-operation-name": "deleteDowntimeSchedule",
        "description": "Deletes a gateway account downtime schedule with a specified ID.",
        "responses": {
          "204": {
            "description": "Gateway account downtime schedule 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"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const request = await api.gatewayAccounts\n    .deleteDowntimeSchedule({id: 'my-second-key', downtimeScheduleId: 'schedule-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"
          }
        ]
      }
    },
    "/gateway-accounts/{id}/enable": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Enable a gateway account",
        "operationId": "PostGatewayAccountEnablement",
        "x-sdk-operation-name": "enable",
        "description": "Enables a gateway account with a specified ID.\n\nWhen a gateway account is enabled,\nthe gateway can process transactions and the `status` attribute is set to `active`.",
        "responses": {
          "201": {
            "description": "Gateway account enabled.",
            "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/GatewayAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "description": "Gateway account is pending activation and cannot be enabled."
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const gatewayAccount = await api.gatewayAccounts.enable({id: 'foobar-001'});\nconsole.log(gatewayAccount.fields.status);"
          }
        ]
      }
    },
    "/gateway-accounts/{id}/limits": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Retrieve gateway account limits",
        "operationId": "GetGatewayAccountLimitCollection",
        "x-sdk-operation-name": "getAllVolumeLimits",
        "description": "Retrieves a list of limits for a gateway account with a specified ID.",
        "responses": {
          "200": {
            "description": "List of gateway account limits retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/GatewayAccountLimit"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/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"
            ]
          }
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Retrieve a gateway account limit",
        "operationId": "GetGatewayAccountLimit",
        "x-sdk-operation-name": "getVolumeLimit",
        "description": "Retrieves a gateway account limit with a specified ID.",
        "responses": {
          "200": {
            "description": "Gateway account limit retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GatewayAccountLimit"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Update a gateway account limit",
        "operationId": "PutGatewayAccountLimit",
        "x-sdk-operation-name": "updateVolumeLimit",
        "description": "Updates a gateway account limit with a specified ID.",
        "responses": {
          "200": {
            "description": "Gateway account limit updated.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GatewayAccountLimit"
                }
              }
            }
          },
          "201": {
            "description": "Gateway account limit 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/GatewayAccountLimit"
                }
              }
            }
          },
          "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"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GatewayAccountLimit"
              }
            }
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Delete a gateway account limit",
        "operationId": "DeleteGatewayAccountLimit",
        "x-sdk-operation-name": "deleteVolumeLimit",
        "description": "Deletes a gateway account limit with a specified ID.",
        "responses": {
          "204": {
            "description": "Gateway account limit 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"
          }
        }
      }
    },
    "/gateway-accounts/{id}/timeline": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts timeline"
        ],
        "summary": "Retrieve gateway account timeline messages",
        "operationId": "GetGatewayAccountTimelineCollection",
        "x-sdk-operation-name": "getAllTimelineMessages",
        "description": "Retrieves a list of timeline messages associated with a specified gateway account ID.",
        "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 gateway account 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/GatewayAccountTimeline"
                  }
                }
              }
            }
          },
          "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.gatewayAccounts\n    .getAllTimelineMessages({id: 'my-gateway'});\n\n// alternatively you can specify one or more of them\nconst params = {id: 'my-gateway', limit: 20, offset: 100};\nconst secondCollection = await api.gatewayAccounts.getAllTimelineMessages(params);\n\n// access the collection items, each item is a GatewayAccountTimeline\nsecondCollection.items\n    .forEach(message => console.log(message.fields.eventType));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts timeline"
        ],
        "summary": "Create a gateway account timeline comment",
        "operationId": "PostGatewayAccountTimeline",
        "x-sdk-operation-name": "createTimelineComment",
        "description": "Creates a timeline comment on gateway account with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GatewayAccountTimeline"
              }
            }
          },
          "description": "Gateway account timeline resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Gateway account 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/GatewayAccountTimeline"
                }
              }
            }
          },
          "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    .gatewayAccounts.createTimelineComment({id: 'my-gateway-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-gateway-id',\n    data: {\n        message,\n    },\n};\nconst secondComment = await api.gatewayAccounts.createTimelineComment(params);"
          }
        ]
      }
    },
    "/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"
          }
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts timeline"
        ],
        "summary": "Retrieve a gateway timeline message",
        "operationId": "GetGatewayAccountTimeline",
        "x-sdk-operation-name": "getTimelineMessage",
        "description": "Retrieves a gateway timeline message with a specified ID.",
        "responses": {
          "200": {
            "description": "Gateway timeline message retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GatewayAccountTimeline"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const message = await api.gatewayAccounts\n    .getTimelineMessage({id: 'foobar-001', messageId: 'message-202'});\nconsole.log(message.fields.eventType);"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts timeline"
        ],
        "summary": "Delete a gateway timeline message",
        "operationId": "DeleteGatewayAccountTimeline",
        "x-sdk-operation-name": "deleteTimelineMessage",
        "description": "Deletes a gateway timeline message with a specified ID.",
        "responses": {
          "204": {
            "description": "Gateway account 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.gatewayAccounts\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"
          }
        ]
      }
    },
    "/gateway-accounts/{id}/check-credentials": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Verify gateway account credentials",
        "operationId": "PostGatewayAccountCheckCredentials",
        "x-sdk-operation-name": "checkCredentials",
        "description": "Verifies that supplied credentials are valid for a specified gateway account ID.",
        "responses": {
          "204": {
            "description": "Supplied credentials are valid.",
            "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"
          },
          "422": {
            "description": "Supplied credentials are not valid."
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/gateway-accounts/{id}/financial-settings": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Retrieve financial settings of a gateway account",
        "operationId": "GetGatewayAccountFinancialSettings",
        "x-sdk-operation-name": "getFinancialSettings",
        "description": "Retrieves the financial settings of a gateway account with a specified ID.\n\n> **Important:** This operation is experimental and may not be backward compatible.",
        "responses": {
          "200": {
            "description": "Financial settings retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GatewayAccountFinancialSettings"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Set financial settings",
        "operationId": "PutGatewayAccountFinancialSettings",
        "x-sdk-operation-name": "setFinancialSettings",
        "description": "Sets financial settings for a gateway account with a specified ID.\n\n> **Important:** This operation is experimental and may not be backward compatible.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GatewayAccountFinancialSettings"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Gateway account financial 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/GatewayAccountFinancialSettings"
                }
              }
            }
          },
          "201": {
            "description": "Gateway account financial 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/GatewayAccountFinancialSettings"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/digital-wallets/onboarding/apple-pay": {
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "summary": "Register a domain for Apple Pay",
        "operationId": "PostDigitalWalletOnboardingApplePay",
        "x-sdk-operation-name": "create",
        "description": "Registers a domain for Apple Pay.\n\nUse this operation to register the domain with Apple Pay,\nor to check if it is already registered.\nWhen the domain is registered, you can use Apple Pay with your embedded integrations.\n\nFor more information, see [Set up Apple Pay](/docs/dev-docs/digital-wallets#set-up-apple-pay).",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DigitalWalletOnboardingApplePay"
              }
            }
          },
          "description": "Apple pay domain registration request.",
          "required": true
        },
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          }
        ],
        "responses": {
          "200": {
            "description": "Action executed without error.",
            "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/DigitalWalletOnboardingApplePay"
                }
              }
            }
          },
          "201": {
            "description": "Domain registered with Apple Pay.",
            "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/DigitalWalletOnboardingApplePay"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/grid-segments": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Segments"
        ],
        "summary": "Retrieve a user's segments",
        "operationId": "GetGridSegmentCollection",
        "x-sdk-operation-name": "getAll",
        "x-sdk-resource": "Segments",
        "description": "Retrieves a user's UI segments.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "Segments 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/GridSegment"
                  }
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Segments"
        ],
        "summary": "Create a new UI segment",
        "operationId": "PostGridSegment",
        "x-sdk-operation-name": "create",
        "x-sdk-resource": "Segments",
        "description": "Creates a new UI segment for yourself or to share with others within your organization.",
        "responses": {
          "201": {
            "description": "Segment 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/GridSegment"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "requestBody": {
          "$ref": "#/components/requestBodies/GridSegment"
        }
      }
    },
    "/grid-segments/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Segments"
        ],
        "summary": "Retrieve a segment",
        "operationId": "GetGridSegment",
        "x-sdk-operation-name": "get",
        "x-sdk-resource": "Segments",
        "description": "Retrieves a UI segment with a specified ID.",
        "responses": {
          "200": {
            "description": "Segment 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/GridSegment"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Segments"
        ],
        "summary": "Update a segment",
        "operationId": "PutGridSegment",
        "x-sdk-operation-name": "update",
        "x-sdk-resource": "Segments",
        "description": "Updates a segment with a specified ID.",
        "responses": {
          "200": {
            "description": "Segment 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/GridSegment"
                }
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GridSegment"
              }
            }
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Segments"
        ],
        "summary": "Delete a segment",
        "operationId": "DeleteGridSegment",
        "x-sdk-operation-name": "delete",
        "x-sdk-resource": "Segments",
        "description": "Deletes a segment with a specified ID.\nThis operation also removes all shares of the deleted segment.\n\n> **Important:** This operation can only be performed by the segment owner.",
        "responses": {
          "204": {
            "description": "Segment deleted.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            }
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/integrations": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Integrations"
        ],
        "summary": "Retrieve integrations",
        "operationId": "GetIntegrationCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of integrations.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "List of integrations 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/Integration"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/integrations/{label}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/integrationLabel"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Integrations"
        ],
        "summary": "Retrieve an integration for specific label",
        "operationId": "GetIntegration",
        "x-sdk-operation-name": "get",
        "description": "Retrieves an integration with a specified label.",
        "responses": {
          "200": {
            "description": "Integration retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Integration"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/lists": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Lists"
        ],
        "summary": "Retrieve lists",
        "operationId": "GetListCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a collection of lists.\nThis operation returns the most recent version of each list.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFields"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "Collection of lists 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/ValueList"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.lists.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.lists.getAll(params);\n\n// access the collection items, each item is a ValueList\nsecondCollection.items.forEach(list => console.log(list.fields.name));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$listsPaginator = $service->lists()->getAllPaginator(limit: 5, filter: 'description:testDescription');\nforeach ($listsPaginator as $listPage) {\n    printf(\"Lists page %d/%d\\n\", $listsPaginator->key() + 1, $listsPaginator->count());\n    foreach ($listPage as $list) {\n        printf(\"List #%s (%s): %s\\n\", $list->getId(), $list->getDescription(), $list->getVersion());\n    }\n}\n\n// OR\n\n$lists = $service->lists()->getAll(filter: 'description:testDescription');\nforeach ($lists as $list) {\n    printf(\"List #%s (%s): %s\\n\", $list->getId(), $list->getDescription(), $list->getVersion());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Lists"
        ],
        "summary": "Create a list",
        "operationId": "PostList",
        "x-sdk-operation-name": "create",
        "description": "Creates a new list.",
        "responses": {
          "201": {
            "description": "List 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/ValueList"
                }
              }
            }
          },
          "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/ValueList"
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new list\nconst data = {\n    name: 'My value list',\n    values: [\n        'foobar-0001', 'foobar-0002',  'foobar-0003',\n        'foobar-0004', 'foobar-0005', 'foobar-0006'  \n    ]\n};\n\n// the ID is optional\nconst firstList = await api.lists.create({data});\n\n// or you can provide one\nconst secondList = await api.lists.create({id: 'my-second-key', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$list = \\Rebilly\\Sdk\\Model\\ValueList::from()\n    ->setDescription('testDescription')\n    ->setValues(['value1', 'value2', 'value3']);\n\ntry {\n    $list = $service->lists()->create($list);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/lists/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Lists"
        ],
        "summary": "Retrieve latest list version",
        "operationId": "GetList",
        "x-sdk-operation-name": "getLatestVersion",
        "description": "Retrieves the latest version of a list with a specified ID.",
        "responses": {
          "200": {
            "description": "List retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValueList"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// get the latest version\nconst latest = await api.lists.get({id: 'foobar-001'});\n\n// get an older version\nconst older = await api.lists.get({id: 'foobar-001', version: 12});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$list = $service->lists()->getLatestVersion('listId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Lists"
        ],
        "summary": "Upsert a list",
        "operationId": "PutList",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a list with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ValueList"
              }
            }
          },
          "description": "List resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "List 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/ValueList"
                }
              }
            }
          },
          "201": {
            "description": "List 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/ValueList"
                }
              }
            }
          },
          "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": "// creating a list\nconst data = {\n    name: 'My value list',\n    values: [\n        'foobar-0001', 'foobar-0002',  'foobar-0003',\n        'foobar-0004', 'foobar-0005', 'foobar-0006'  \n    ]\n};\n\n// the ID is optional\nconst firstList = await api.lists.create({data});\n\n// or you can provide one\nconst secondList = await api.lists.create({id: 'my-second-key', data});\n\n\n\n// updating a list\nconst data = {\n    name: 'My better list',\n    values: [\n        'foobar-0004', 'foobar-0005', 'foobar-0006'  \n    ]\n};\n\nconst list = await api.lists.update({id: 'my-second-key', data});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$list = \\Rebilly\\Sdk\\Model\\ValueList::from()\n    ->setDescription('testDescription')\n    ->setValues(['value1', 'value2', 'value3']);\n\ntry {\n    $list = $service->lists()->update('listId', $list);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Lists"
        ],
        "summary": "Delete a list",
        "operationId": "DeleteList",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a list with a specified ID.",
        "responses": {
          "204": {
            "description": "List 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": {
            "description": "Specified list is in use in a rule and cannot be deleted."
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const request = await api.lists.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->lists()->delete('listId');"
          }
        ]
      }
    },
    "/lists/{id}/{version}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "name": "version",
          "in": "path",
          "required": true,
          "description": "Version of the list.",
          "schema": {
            "type": "integer",
            "minimum": 1
          }
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Lists"
        ],
        "summary": "Retrieve specific list version",
        "operationId": "GetListVersion",
        "x-sdk-operation-name": "getByVersion",
        "description": "Retrieves a specified version of a list with a specified ID.",
        "responses": {
          "200": {
            "description": "List version retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ValueList"
                }
              }
            }
          },
          "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$list = $service->lists()->getByVersion('listId', 1);"
          }
        ]
      }
    },
    "/memberships": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Memberships"
        ],
        "summary": "Retrieve memberships",
        "operationId": "GetMembershipCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of organization memberships.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of organization memberships 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/Membership"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/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"
          }
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Memberships"
        ],
        "summary": "Retrieve a membership",
        "operationId": "GetMembership",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a membership with a specified organization ID and user ID.",
        "responses": {
          "200": {
            "description": "Membership retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Membership"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Memberships"
        ],
        "summary": "Upsert membership",
        "operationId": "PutMembership",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a membership with a specified organization ID and user ID.\nOnly the organization owner can grant organization membership to new users.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Membership"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Membership 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/Membership"
                }
              }
            }
          },
          "201": {
            "description": "Membership 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/Membership"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Memberships"
        ],
        "summary": "Delete a membership",
        "operationId": "DeleteMembership",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a membership with a specified organization ID and user ID.",
        "responses": {
          "204": {
            "description": "Membership 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"
          }
        }
      }
    },
    "/organizations": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Organizations"
        ],
        "summary": "Retrieve organizations",
        "operationId": "GetOrganizationCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of organizations.",
        "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 organizations 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/Organization"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Organizations"
        ],
        "summary": "Create an organization",
        "operationId": "PostOrganization",
        "x-sdk-operation-name": "create",
        "description": "Creates an organization.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PostOrganization"
        },
        "responses": {
          "201": {
            "description": "Organization 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/Organization"
                }
              }
            }
          },
          "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": "$organizationForm = new Rebilly\\Entities\\Organization();\n$organizationForm->setName('Test Organization');\n$organizationForm->setCountry('US');\n\ntry {\n    $organization = $client->organizations()->create($organizationForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$organizationForm = new \\Rebilly\\Sdk\\Model\\PostOrganizationRequest();\n$organizationForm->setName('Test Organization');\n$organizationForm->setCountry('US');\n\ntry {\n    $organization = $service->organizations()->create($organizationForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/organizations/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Organizations"
        ],
        "summary": "Retrieve an organization",
        "operationId": "GetOrganization",
        "x-sdk-operation-name": "get",
        "description": "Retrieves an organization with a specified ID.",
        "responses": {
          "200": {
            "description": "Organization retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Organization"
                }
              }
            }
          },
          "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": "$organization = $client->organizations()->load('organizationId');\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$organization = $service->organizations()->get('organizationId');"
          }
        ]
      },
      "patch": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Organizations"
        ],
        "summary": "Update an organization",
        "operationId": "PatchOrganization",
        "x-sdk-operation-name": "update",
        "description": "Updates an organization with a specified organization ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PatchOrganization"
        },
        "responses": {
          "200": {
            "description": "Organization 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/Organization"
                }
              }
            }
          },
          "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": "$organizationForm = new Rebilly\\Entities\\Organization();\n$organizationForm->setName('Test Organization');\n$organizationForm->setCountry('US');\n\ntry {\n    $organization = $client->organizations()->update('organizationId', $organizationForm);\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$organizationForm = new \\Rebilly\\Sdk\\Model\\PatchOrganizationRequest();\n$organizationForm->setName('Test Organization');\n$organizationForm->setCountry('US');\n\ntry {\n    $organization = $service->organizations()->update('organizationId', $organizationForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/payment-cards-bank-names": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Payment instruments"
        ],
        "summary": "Retrieve payment card issuing bank names",
        "operationId": "GetPaymentCardBankNameCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of payment card issuing bank names.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "List of payment card issuing bank names 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",
                  "title": "GetPaymentCardsBankNamesResponse",
                  "items": {
                    "type": "object",
                    "properties": {
                      "name": {
                        "description": "Name of the bank.",
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/payment-methods": {
      "servers": [
        {
          "url": "https://api-sandbox.rebilly.com",
          "description": "Sandbox server"
        },
        {
          "url": "https://api.rebilly.com",
          "description": "Live server"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Metadata"
        ],
        "summary": "Retrieve payment method metadata",
        "operationId": "GetPaymentMethodCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves payment method metadata.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "security": [],
        "responses": {
          "200": {
            "description": "Payment methods metadata received.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PaymentMethodMetadata"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/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\\. -]+$"
          }
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Metadata"
        ],
        "summary": "Retrieve metadata of a payment method",
        "operationId": "GetPaymentMethod",
        "x-sdk-operation-name": "get",
        "description": "Retrieves the metadata of a payment method with a specified `apiName`.",
        "security": [],
        "responses": {
          "200": {
            "description": "Payment method metadata received.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentMethodMetadata"
                }
              }
            }
          }
        }
      }
    },
    "/payment-gateways-metadata": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Metadata"
        ],
        "summary": "Retrieve payment gateway metadata",
        "operationId": "GetPaymentGatewayMetadataCollection",
        "x-sdk-operation-name": "getAll",
        "x-sdk-skip": true,
        "description": "Retrieves payment gateway metadata.",
        "security": [],
        "responses": {
          "200": {
            "description": "Payment gateway metadata received.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/PaymentGatewayMetadata"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/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\\. -]+$"
          }
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Metadata"
        ],
        "summary": "Retrieve payment gateway metadata",
        "operationId": "GetPaymentGatewayMetadata",
        "x-sdk-operation-name": "get",
        "x-sdk-skip": true,
        "description": "Retrieves metadata for a gateway with a specified ID.",
        "security": [],
        "responses": {
          "200": {
            "description": "Payment gateway metadata received.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaymentGatewayMetadata"
                }
              }
            }
          }
        }
      }
    },
    "/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`, `splitReason`, `createdTime`, `updatedTime`, `currency`, `amount`.",
        "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/{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 payout request that is in `pending`, `ready`, or `approved` status into two or more separate requests.\n\nUse this operation when the full amount cannot be processed due to amount restrictions, but a smaller amount can be processed.\nFor example, if a payout request for `$4,000` cannot be processed, but `$3,000` can be processed, split the request into two. This allows you to approve and process `$3,000` instead of blocking the entire request.\n\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.\nEach new payout request is created in `pending` status.\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/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}/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"
                          }
                        ]
                      },
                      "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",
                          null
                        ],
                        "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`, `waiting-completion` 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/collectionQuery"
          },
          {
            "$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"
          }
        }
      },
      "patch": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Update a payout request batch",
        "operationId": "PatchPayoutRequestBatch",
        "x-sdk-operation-name": "patch",
        "description": "Partially updates a payout request batch with a specified ID.\nUse this operation to update the description and allocation order.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PatchPayoutRequestBatch"
        },
        "responses": {
          "200": {
            "description": "Payout request batch 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/PayoutRequestBatch"
                }
              }
            }
          },
          "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-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Delete a payout request batch",
        "operationId": "DeletePayoutRequestBatch",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a payout request batch with a specified ID and clears the `batchId` field from every payout request in the batch.\nThis operation preserves every payout request, status, and blocked state.\nThis operation is atomic. It clears all `batchId` fields or leaves them all unchanged.",
        "responses": {
          "204": {
            "description": "Payout request batch 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"
          }
        }
      }
    },
    "/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/{id}/payout-requests": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Add requests to a payout request batch",
        "operationId": "PostPayoutRequestsToBatch",
        "x-sdk-operation-name": "addPayoutRequests",
        "description": "Adds payout requests to a batch with a specified ID.\nAccepts payout requests in any status, with or without allocations.\nA batch contains a maximum of 1000 payout requests.\n\nProvide exactly one of the following fields:\n- `payoutRequestIds` to add specific payout requests.\n- `filter` to add payout requests that match the filter when the operation runs.\n\nIf any explicitly specified payout request is already associated with a batch,\nthe operation returns a `409 Conflict` response.\nFilter results exclude payout requests that are already associated with a batch.\nIf more payout requests match the filter than the batch can contain,\nthe operation adds only the oldest matching requests up to the batch limit,\nsorted by creation time.\nIf adding explicitly specified payout requests would increase the batch to more than 1000 requests,\nthe operation returns a `409 Conflict` response.\nIf the batch has reached its payout request limit,\nthe operation returns a `409 Conflict` response for either selection method.\nThis operation is atomic. If a conflict occurs, the operation adds no payout requests to the batch.",
        "requestBody": {
          "required": true,
          "description": "Selection of payout requests to add to the batch.",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "oneOf": [
                  {
                    "title": "Explicit IDs",
                    "additionalProperties": false,
                    "required": [
                      "payoutRequestIds"
                    ],
                    "properties": {
                      "payoutRequestIds": {
                        "description": "IDs of the payout requests to add to the batch.",
                        "type": "array",
                        "minItems": 1,
                        "maxItems": 1000,
                        "uniqueItems": true,
                        "items": {
                          "type": "string",
                          "maxLength": 50,
                          "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
                        }
                      }
                    }
                  },
                  {
                    "title": "Filter-based",
                    "additionalProperties": false,
                    "required": [
                      "filter"
                    ],
                    "properties": {
                      "filter": {
                        "description": "Filter string that selects payout requests to add to the batch.\nThis field uses the same format as filter parameters for collections.\nUse semicolons to separate multiple filter conditions.\n\nAvailable fields for filtering: `id`, `status`, `websiteId`, `customerId`, `currency`, `amount`, `createdTime`, `updatedTime`.\n\nThis operation ignores a `batchId` filter.\nFilter results always exclude payout requests that are already associated with a batch.\nIf the filter matches more payout requests than the batch can contain,\nthe operation adds only the oldest matching requests up to the batch limit,\nsorted by creation time.",
                        "type": "string",
                        "minLength": 1,
                        "example": "status:pending;websiteId:ws_0YVDMDE2BMC6KBB5MX76RF6T80"
                      }
                    }
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Payout requests added to the batch.",
            "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"
                }
              }
            }
          },
          "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"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "409": {
            "description": "Batch limit reached or would be exceeded, or one or more explicitly specified payout requests are already associated with a batch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Conflict"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-batches/{id}/payout-requests/remove": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Remove requests from a payout request batch",
        "operationId": "PostRemovePayoutRequestsFromBatch",
        "x-sdk-operation-name": "removePayoutRequests",
        "description": "Removes specified payout requests from a batch with a specified ID by clearing `batchId` on each request.\nThis operation preserves each payout request, status, and blocked state.\nRemoves requests regardless of status or allocations.\n\nThis operation is atomic.\nIf any payout request is not associated with the specified batch,\nthe operation clears no associations with the batch.",
        "requestBody": {
          "required": true,
          "description": "Payout requests to remove from the batch.",
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": false,
                "required": [
                  "payoutRequestIds"
                ],
                "properties": {
                  "payoutRequestIds": {
                    "description": "IDs of the payout requests to remove from the batch.",
                    "type": "array",
                    "minItems": 1,
                    "maxItems": 1000,
                    "uniqueItems": true,
                    "items": {
                      "type": "string",
                      "maxLength": 50,
                      "example": "pout_req_0YVDMDE2BMC6KBB5MX76RF6T80"
                    }
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Payout requests removed from the batch.",
            "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": {
            "description": "One or more payout requests are not associated with the specified batch.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Conflict"
                }
              }
            }
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/payout-request-batches/{id}/unblock": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "summary": "Unblock payout requests in a batch",
        "operationId": "PostPayoutRequestBatchUnblock",
        "x-sdk-operation-name": "unblock",
        "description": "Unblocks every blocked payout request in a batch with a specified ID.\nLeaves payout requests without a block unchanged.\nProcesses all requests in the batch, up to the 1000-request batch limit, without changing batch membership.\nThis operation is atomic.",
        "responses": {
          "200": {
            "description": "Payout requests in the batch unblocked.",
            "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/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"
          }
        }
      }
    },
    "/permissions-emulation": {
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Profile"
        ],
        "summary": "Start permissions emulation",
        "operationId": "PostPermissionsEmulation",
        "x-sdk-operation-name": "startPermissionsEmulation",
        "x-sdk-resource": "Profile",
        "description": "Starts permissions emulation.\n\nEmulation during emulation is not supported. If request sent during an ongoing emulation then 403 is sent in response.\n\nEscalation is not supported.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "title": "PostPermissionsEmulationRequest",
                "required": [
                  "permissions"
                ],
                "properties": {
                  "permissions": {
                    "description": "List of permissions to be emulated.",
                    "$ref": "#/components/schemas/AclPermissions"
                  }
                }
              }
            }
          },
          "required": true
        },
        "responses": {
          "201": {
            "description": "Session 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/Session"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Profile"
        ],
        "summary": "Stop permissions emulation",
        "operationId": "DeletePermissionsEmulation",
        "x-sdk-operation-name": "stopPermissionsEmulation",
        "x-sdk-resource": "Profile",
        "description": "Stops permissions emulation.\n\nSession permissions are restored to the state before emulation began.\nIf emulations have not started then `403` is sent in response.",
        "responses": {
          "201": {
            "description": "Session restored.",
            "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/Session"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "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"
          }
        }
      }
    },
    "/previews/rule-actions/send-email": {
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Rules"
        ],
        "summary": "Send a test email",
        "operationId": "PostPreviewRuleActionEmailSending",
        "x-sdk-operation-name": "sendEmailRuleAction",
        "description": "Sends a test email.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "description": "Send a test email.",
                "$ref": "#/components/schemas/RulesEmailNotification"
              }
            }
          },
          "description": "Test email resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Test email sent.",
            "headers": {
              "X-RateLimit-Limit": {
                "$ref": "#/components/headers/X-RateLimit-Limit"
              },
              "X-RateLimit-Remaining": {
                "$ref": "#/components/headers/X-RateLimit-Remaining"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "description": "Send a test email.",
                  "$ref": "#/components/schemas/RulesEmailNotification"
                }
              }
            }
          },
          "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 build the email data including\n// the credential hash\nconst data = {\n    bodyText: 'hello world',\n    bodyHTML: `<strong>hello world</strong>`,\n    sender: 'john.doe+test@grr.la',\n    recipients: ['john.doe+test@grr.la'],\n    subject: 'testing email preview',\n    // created prior to the test\n    credentialHash: 'dcf6e32f2daee457a1db8ce5fdfbe200'\n};\n\nconst email = await api.previews.sendEmailRuleAction({data});"
          }
        ]
      }
    },
    "/previews/webhooks": {
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Webhooks"
        ],
        "summary": "Send a test webhook",
        "operationId": "PostPreviewWebhook",
        "x-sdk-operation-name": "webhook",
        "description": "Sends a test webhook.",
        "requestBody": {
          "$ref": "#/components/requestBodies/GlobalWebhook"
        },
        "responses": {
          "204": {
            "description": "Test webhook sent.",
            "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": {
            "description": "Invalid data sent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvalidError"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// first build the webhook data including\n// the credential hash\nconst data = {\n    eventsFilter: [],\n    status: 'active',\n    method: 'POST',\n    headers: {},\n    // hookb.in is a great tool for\n    // previewing webhooks\n    url: 'https://hookb.in/Oe90ZRmdeWUGWg1MGKQV',\n    // created prior to the test\n    credentialHash: 'dcf6e32f2daee457a1db8ce5fdfbe200'\n};\n\nconst request = await api.previews.webhooks({data});\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"
          }
        ]
      }
    },
    "/profile": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Profile"
        ],
        "summary": "Retrieve user's own profile",
        "operationId": "GetProfile",
        "x-sdk-operation-name": "get",
        "description": "Retrieves the user's own profile as requested by the user.",
        "responses": {
          "200": {
            "description": "Profile retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Profile"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const profile = await api.profile.get();\nconsole.log(profile.fields.email);"
          }
        ]
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Profile"
        ],
        "summary": "Update a user profile",
        "operationId": "PutProfile",
        "x-sdk-operation-name": "update",
        "description": "Updates user profile.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Profile"
              }
            }
          },
          "description": "Profile resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Profile 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/Profile"
                }
              }
            }
          },
          "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 values to update\nconst data = {\n    preferences: [],\n};\n\nconst profile = await api.profile.update({data});\n"
          }
        ]
      }
    },
    "/profile/mfa": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Profile"
        ],
        "summary": "Retrieve user MFA status",
        "operationId": "GetProfileMfa",
        "x-sdk-operation-name": "getMfa",
        "description": "Retrieves Multi-Factor Authentication (MFA) status of a user.",
        "responses": {
          "200": {
            "description": "User MFA status retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProfileMfa"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const mfa = await api.profile.getMfa();\nconsole.log(mfa.fields.status, mfa.fields.type, mfa.fields.lastAuthTime);\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Profile"
        ],
        "summary": "Update user MFA",
        "operationId": "PostProfileMfa",
        "x-sdk-operation-name": "updateMfa",
        "description": "Updates the Multi-Factor Authentication (MFA) information of a user.\n\nThe generated link with an `enrollment` `rel` link must be followed to verify the existing MFA or enroll new MFA.",
        "responses": {
          "201": {
            "description": "User MFA update URL 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/ProfileMfa"
                }
              }
            }
          },
          "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 mfa = await api.profile.updateMfa();\nconsole.log(mfa.fields._links);\n"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Profile"
        ],
        "summary": "Delete user MFA",
        "operationId": "DeleteProfileMfa",
        "x-sdk-operation-name": "deleteMfa",
        "description": "Deletes the Multi-Factor Authentication (MFA) information of a user.\n\nTo complete this operation, the `lastAuthTime` value must be no more than 10 minutes before this request.",
        "responses": {
          "204": {
            "description": "User MFA 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": "JavaScript",
            "source": "await api.profile.deleteMfa();\n"
          }
        ]
      }
    },
    "/roles": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Roles"
        ],
        "summary": "Retrieve roles",
        "operationId": "GetRoleCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of user roles.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "List of roles 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/Role"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Roles"
        ],
        "summary": "Create a role",
        "operationId": "PostRole",
        "x-sdk-operation-name": "create",
        "description": "Creates a role that is used to assign permissions to users.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/Role"
              }
            }
          },
          "description": "Role resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Role 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/Role"
                }
              }
            }
          },
          "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"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Roles"
        ],
        "summary": "Retrieve a role",
        "operationId": "GetRole",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a user role with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Role retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Role"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Roles"
        ],
        "summary": "Create a role with ID",
        "operationId": "PutRole",
        "x-sdk-operation-name": "update",
        "description": "Creates a user role with a specified ID.",
        "responses": {
          "200": {
            "description": "Role 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/Role"
                }
              }
            }
          },
          "201": {
            "description": "Role 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/Role"
                }
              }
            }
          },
          "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/Role"
              }
            }
          },
          "description": "Role resource.",
          "required": true
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Roles"
        ],
        "summary": "Delete a role",
        "operationId": "DeleteRole",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a user role with a specified ID.",
        "responses": {
          "204": {
            "description": "Role deleted."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/send-through-attribution/{eventType}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/systemEventType"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Email notifications"
        ],
        "summary": "Retrieve email notification attributions",
        "operationId": "GetSendThroughAttributionCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of email notifications, that have been sent through attribution, for a specified event type.",
        "responses": {
          "200": {
            "description": "List of email notifications 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/SendThroughAttribution"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/status": {
      "servers": [
        {
          "url": "https://api-sandbox.rebilly.com",
          "description": "Sandbox server"
        },
        {
          "url": "https://api.rebilly.com",
          "description": "Live server"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Status"
        ],
        "summary": "Retrieve API current status",
        "operationId": "GetStatus",
        "x-sdk-operation-name": "get",
        "description": "Retrieve API current status.",
        "security": [],
        "responses": {
          "200": {
            "description": "Status received.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Status"
                }
              }
            }
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const status = await api.status.get({id: 'foobar-001'});\nconsole.log(status.fields.status);"
          }
        ]
      }
    },
    "/tracking/api": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Tracking"
        ],
        "summary": "Retrieve API tracking logs",
        "operationId": "GetTrackingApiCollection",
        "x-sdk-operation-name": "getAllApiLogs",
        "description": "Retrieves API tracking log records.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Tracking API logs 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/ApiTracking"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$apiTrackingLog = $client->apiTracking()->search([\n    'filter' => 'status:200',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.tracking.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100};\nconst secondCollection = await api.tracking.getAll(params);\n\n// access the collection items, each item is a ApiTracking\nsecondCollection.items.forEach(entry => console.log(entry.fields.customerId));\n\n\n\n// alternatively, download as a CSV file\n\n// all parameters are optional\nconst firstFile = await api.tracking.downloadApiLogsCSV();\n\n// alternatively you can specify one or more of them\nconst sortedParams = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondFile = await api.tracking.downloadApiLogsCSV(sortedParams);\n\n// access the file data to view the CSV content\nconsole.log(secondFile.data);\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$apiTrackingLogsPaginator = $service->tracking()->getAllApiLogsPaginator(limit: 5, filter: 'status:200');\nforeach ($apiTrackingLogsPaginator as $apiTrackingLogsPage) {\n    printf(\"API tracking logs page %d/%d\\n\", $apiTrackingLogsPaginator->key() + 1, $apiTrackingLogsPaginator->count());\n    foreach ($apiTrackingLogsPage as $apiTrackingLog) {\n        printf(\"API tracking log #%s: %s\\n\", $apiTrackingLog->getId(), $apiTrackingLog->getRequest());\n    }\n}\n\n// OR\n\n$apiTrackingLogs = $service->tracking()->getAllApiLogs(filter: 'status:200');\nforeach ($apiTrackingLogs as $apiTrackingLog) {\n    printf(\"API tracking log #%s: %s\\n\", $apiTrackingLog->getId(), $apiTrackingLog->getRequest());\n}"
          }
        ]
      }
    },
    "/tracking/api/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Tracking"
        ],
        "summary": "Retrieve an API tracking log",
        "operationId": "GetTrackingApi",
        "x-sdk-operation-name": "getApiLog",
        "description": "Retrieves an API tracking log record with a specified ID.",
        "responses": {
          "200": {
            "description": "Tracking API log retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiTracking"
                }
              }
            }
          },
          "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": "$apiTrackingLog = $client->apiTracking()->load('apiLogId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const entry = await api.tracking.getApiLog({id: 'foobar-001'});\nconsole.log(entry.fields.request);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$apiTrackingLog = $service->tracking()->getApiLog('apiLogId');"
          }
        ]
      }
    },
    "/tracking/taxes": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Tracking"
        ],
        "summary": "Retrieve tax service tracking logs",
        "operationId": "GetTrackingTaxCollection",
        "x-sdk-operation-name": "getAllTaxTrackingLogs",
        "description": "Retrieves a collection of tax service tracking logs.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "Tax logs 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/TaxTracking"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.tracking.getAllTaxTrackingLogs();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100};\nconst secondCollection = await api.tracking.getAllTaxTrackingLogs(params);\n\n// access the collection items, each item is a TaxTracking\nsecondCollection.items.forEach(entry => console.log(entry.fields.eventType));\n"
          }
        ]
      }
    },
    "/tracking/taxes/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Tracking"
        ],
        "summary": "Retrieve a tax service tracking log",
        "operationId": "GetTrackingTax",
        "x-sdk-operation-name": "getTaxTrackingLog",
        "description": "Retrieves a tax service tracking log with a specified ID.",
        "responses": {
          "200": {
            "description": "Tax log retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TaxTracking"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const entry = await api.tracking.getTaxTrackingLog({id: 'foobar-001'});\nconsole.log(entry.fields.eventType);\n"
          }
        ]
      }
    },
    "/tracking/lists": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Tracking"
        ],
        "summary": "Retrieve value list changes",
        "operationId": "GetTrackingListCollection",
        "x-sdk-operation-name": "getAllListsChangesHistory",
        "description": "Retrieves the change history of value 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": "Change history of a value list 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/ValueList"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.tracking.getAllListsChangesHistory();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100};\nconst secondCollection = await api.tracking.getAllListsChangesHistory(params);\n\n// access the collection items, each item is a ValueList\nsecondCollection.items.forEach(entry => console.log(entry.fields.name));\n"
          }
        ]
      }
    },
    "/tracking/webhooks": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Tracking"
        ],
        "summary": "Retrieve webhook tracking logs",
        "operationId": "GetTrackingWebhookCollection",
        "x-sdk-operation-name": "getAllWebhookTrackingLogs",
        "description": "Retrieves webhook tracking logs.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          }
        ],
        "responses": {
          "200": {
            "description": "Webhook tracking logs 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/WebhookTracking"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.tracking.getAllWebhookTrackingLogs();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100};\nconst secondCollection = await api.tracking.getAllWebhookTrackingLogs(params);\n\n// access the collection items, each item is a WebhookTracking\nsecondCollection.items.forEach(entry => console.log(entry.fields.eventType));\n"
          }
        ]
      }
    },
    "/tracking/webhooks/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Tracking"
        ],
        "summary": "Retrieve a webhook tracking log",
        "operationId": "GetTrackingWebhook",
        "x-sdk-operation-name": "getWebhookTrackingLog",
        "description": "Retrieves a webhook tracking log record with a specified ID.",
        "responses": {
          "200": {
            "description": "Webhook tracking log record retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WebhookTracking"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const entry = await api.tracking.getWebhookTrackingLog({id: 'foobar-001'});\nconsole.log(entry.fields.eventType);"
          }
        ]
      }
    },
    "/tracking/webhooks/{id}/resend": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Tracking"
        ],
        "summary": "Schedule a resend webhook attempt",
        "description": "Schedules a resend attempt for a specified webhook tracking ID.\nWebhooks are processed asynchronously.",
        "operationId": "PostTrackingWebhookResendRequest",
        "x-sdk-operation-name": "resendWebhook",
        "responses": {
          "204": {
            "description": "Webhook resend attempt 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"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/users": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Users"
        ],
        "summary": "Retrieve a list of users",
        "operationId": "GetUserCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of users.",
        "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 users 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/User"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$users = $client->users()->search([\n    'filter' => 'firstName:John',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.users.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.users.getAll(params);\n\n// access the collection items, each item is a User\nsecondCollection.items.forEach(user => console.log(user.fields.firstName));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$usersPaginator = $service->users()->getAllPaginator(limit: 5, filter: 'firstName:John');\nforeach ($usersPaginator as $usersPage) {\n    printf(\"Users page %d/%d\\n\", $usersPaginator->key() + 1, $usersPaginator->count());\n    foreach ($usersPage as $user) {\n        printf(\"User #%s: %s %s | %s\\n\", $user->getId(), $user->getFirstName(), $user->getLastName(), $user->getEmail());\n    }\n}\n\n// OR\n\n$users = $service->users()->getAll(filter: 'firstName:John');\nforeach ($users as $user) {\n    printf(\"User #%s: %s %s | %s\\n\", $user->getId(), $user->getFirstName(), $user->getLastName(), $user->getEmail());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Users"
        ],
        "summary": "Create a user",
        "operationId": "PostUser",
        "x-sdk-operation-name": "create",
        "description": "Creates a user.",
        "requestBody": {
          "$ref": "#/components/requestBodies/User"
        },
        "responses": {
          "201": {
            "description": "User 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/User"
                }
              }
            }
          },
          "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": "$userForm = new Rebilly\\Entities\\User();\n$userForm->setFirstName('John');\n$userForm->setLastName('Doe');\n$userForm->setEmail('johndoe@test.com');\n\ntry {\n    $user = $client->users()->create($userForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new user\nconst data = {\n    email: 'john.doe+test@grr.la',\n    firstName: 'John',\n    lastName: 'Doe',\n    businessPhone: '151412345676',\n    mobilePhone: '151412345676',\n    permissions: [],\n    country: 'US',\n    preferences: {}\n};\n\n// the ID is optional\nconst firstProduct = await api.users.create({data});\n\n// or you can provide one\nconst secondProduct = await api.users.create({id: 'my-second-key', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$userForm = new \\Rebilly\\Sdk\\Model\\User();\n$userForm->setFirstName('John');\n$userForm->setLastName('Doe');\n$userForm->setEmail('johndoe@test.com');\n\ntry {\n    $user = $service->users()->create($userForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/users/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Users"
        ],
        "summary": "Retrieve a user",
        "operationId": "GetUser",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a user with a specified ID.",
        "responses": {
          "200": {
            "description": "User retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/User"
                }
              }
            }
          },
          "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": "$user = $client->users()->load('userId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const user = await api.users.get({id: 'foobar-001'});\nconsole.log(user.fields.firstName);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$user = $service->users()->get('userId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Users"
        ],
        "summary": "Upsert a user",
        "operationId": "PutUser",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a user with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/User"
        },
        "responses": {
          "200": {
            "description": "User 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/User"
                }
              }
            }
          },
          "201": {
            "description": "User 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/User"
                }
              }
            }
          },
          "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": "$userForm = new Rebilly\\Entities\\User();\n$userForm->setFirstName('John');\n$userForm->setLastName('Doe');\n$userForm->setEmail('johndoe@test.com');\n\ntry {\n    $user = $client->users()->update('userId', $userForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// creating a new user\nconst data = {\n    email: 'john.doe+test@grr.la',\n    firstName: 'John',\n    lastName: 'Doe',\n    businessPhone: '151412345676',\n    mobilePhone: '151412345676',\n    permissions: [],\n    country: 'US',\n    preferences: {}\n};\n\n// the ID is optional\nconst firstProduct = await api.users.create({data});\n\n// or you can provide one\nconst secondProduct = await api.users.create({id: 'my-second-key', data});\n\n\n\n// updating a user\nconst data = {\n    email: 'john.doe+test@grr.la',\n    firstName: 'John',\n    lastName: 'Doe',\n    country: 'CA',\n};\n\nconst user = await api.users.update({id: 'my-second-key', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$userForm = new \\Rebilly\\Sdk\\Model\\User();\n$userForm->setFirstName('John');\n$userForm->setLastName('Doe');\n$userForm->setEmail('johndoe@test.com');\n\ntry {\n    $user = $service->users()->update('userId', $userForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/users/{id}/mfa": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Users"
        ],
        "summary": "Retrieve user MFA status",
        "operationId": "GetUserMfa",
        "x-sdk-operation-name": "getMfa",
        "description": "Retrieves the Multi-Factor Authentication (MFA) status of a user with a specified ID.",
        "responses": {
          "200": {
            "description": "User MFA status retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProfileMfa"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const mfa = await api.users.get({id: 'foobar-001'});\nconsole.log(mfa.fields.status, mfa.fields.type, mfa.fields.lastAuthTime);\n"
          }
        ]
      }
    },
    "/webhooks": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Webhooks"
        ],
        "summary": "Retrieve webhooks",
        "operationId": "GetWebhookCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of webhooks.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "List of webhooks 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/GlobalWebhook"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.webhooks.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.webhooks.getAll(params);\n\n// access the collection items, each item is a GlobalWebhook\nsecondCollection.items.forEach(webhook => console.log(webhook.fields.name));\n"
          }
        ]
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Webhooks"
        ],
        "summary": "Create a webhook",
        "operationId": "PostWebhook",
        "x-sdk-operation-name": "create",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Creates a webhook.",
        "requestBody": {
          "$ref": "#/components/requestBodies/GlobalWebhook"
        },
        "responses": {
          "201": {
            "description": "Webhook 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/GlobalWebhook"
                }
              }
            }
          },
          "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": "// first set the properties for the new webhook\nconst data = {\n    // leave filter empty to enable \n    // the webhook for all events\n    eventsFilter: [],\n    status: 'active',\n    method: 'POST',\n    headers: {},\n    url: 'https://hookb.in/Oe90ZRmdeWUGWg1MGKQV',\n    // created prior to the test\n    credentialHash: 'dcf6e32f2daee457a1db8ce5fdfbe200'\n};\n\n// the ID is optional\nconst firstWebhook = await api.webhooks.create({data});\n\n// or you can provide one\nconst secondWebhook = await api.webhooks.create({id: 'my-second-key', data});"
          }
        ]
      }
    },
    "/webhooks/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Webhooks"
        ],
        "summary": "Retrieve a webhook",
        "operationId": "GetWebhook",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a webhook with a specified ID.",
        "responses": {
          "200": {
            "description": "Webhook retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GlobalWebhook"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const webhook = await api.webhooks.get({id: 'foobar-001'});\nconsole.log(webhook.fields.id);"
          }
        ]
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Webhooks"
        ],
        "summary": "Upsert a webhook",
        "operationId": "PutWebhook",
        "x-sdk-operation-name": "update",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Creates or updates (upserts) a webhook with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/GlobalWebhook"
        },
        "responses": {
          "200": {
            "description": "Webhook 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/GlobalWebhook"
                }
              }
            }
          },
          "201": {
            "description": "Webhook 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/GlobalWebhook"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "409": {
            "$ref": "#/components/responses/Conflict"
          },
          "422": {
            "description": "Invalid data sent.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InvalidError"
                }
              }
            }
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "summary": "Delete a webhook",
        "operationId": "DeleteWebhook",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a webhook with a specified ID.",
        "tags": [
          "Webhooks"
        ],
        "responses": {
          "204": {
            "description": "Webhook deleted."
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/websites": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Websites"
        ],
        "summary": "Retrieve websites",
        "operationId": "GetWebsiteCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a list of websites.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          }
        ],
        "responses": {
          "200": {
            "description": "List of websites 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/Website"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "label": "PHP-SDK-2.0",
            "source": "$websites = $client->websites()->search([\n    'filter' => 'name:TestWebsite',\n]);\n"
          },
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.websites.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.websites.getAll(params);\n\n// access the collection items, each item is a Website\nsecondCollection.items.forEach(website => console.log(website.fields.name));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$websitesPaginator = $service->websites()->getAllPaginator(limit: 5, filter: 'name:TestWebsite');\nforeach ($websitesPaginator as $websitesPage) {\n    printf(\"Websites page %d/%d\\n\", $websitesPaginator->key() + 1, $websitesPaginator->count());\n    foreach ($websitesPage as $website) {\n        printf(\"Website #%s: %s\\n\", $website->getId(), $website->getName());\n    }\n}\n\n// OR\n\n$websites = $service->websites()->getAll(filter: 'name:TestWebsite');\nforeach ($websites as $website) {\n    printf(\"Website #%s: %s\\n\", $website->getId(), $website->getName());\n}"
          }
        ]
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Websites"
        ],
        "summary": "Create a website",
        "operationId": "PostWebsite",
        "x-sdk-operation-name": "create",
        "description": "Creates a website.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Website"
        },
        "responses": {
          "201": {
            "description": "Website 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/Website"
                }
              }
            }
          },
          "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": "$websiteForm = new Rebilly\\Entities\\Website();\n$websiteForm->setName('TestWebsite');\n$websiteForm->setUrl('http://testwebsite.com');\n$websiteForm->setServicePhone('+0123456789');\n$websiteForm->setServiceEmail('test@testwebsite.com');\n\ntry {\n    $website = $client->websites()->create($websiteForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// first set the properties for the new website\nconst data = {\n    name: 'My website',\n    url: 'https://www.acme.com',\n    servicePhone: '15451234567',\n    serviceEmail: 'support@acme.com',\n    customFields: {}\n};\n\n// the ID is optional\nconst firstWebsite = await api.websites.create({data});\n\n// or you can provide one\nconst secondWebsite = await api.websites.create({id: 'my-second-key', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$websiteForm = new \\Rebilly\\Sdk\\Model\\Website();\n$websiteForm->setName('TestWebsite');\n$websiteForm->setUrl('http://testwebsite.com');\n$websiteForm->setServicePhone('+0123456789');\n$websiteForm->setServiceEmail('test@testwebsite.com');\n\ntry {\n    $website = $service->websites()->create($websiteForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      }
    },
    "/websites/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Websites"
        ],
        "summary": "Retrieve a website",
        "operationId": "GetWebsite",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "SecretApiKey": []
          },
          {
            "JWT": []
          },
          {
            "ApplicationJWT": []
          }
        ],
        "description": "Retrieves a website with a specified ID.",
        "responses": {
          "200": {
            "description": "Website retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Website"
                }
              }
            }
          },
          "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": "$website = $client->websites()->load('websiteId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const website = await api.websites.get({id: 'foobar-001'});\nconsole.log(website.fields.name);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n$website = $service->websites()->get('websiteId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Websites"
        ],
        "summary": "Upsert a website",
        "operationId": "PutWebsite",
        "x-sdk-operation-name": "update",
        "description": "Creates or updates (upserts) a website with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/Website"
        },
        "responses": {
          "200": {
            "description": "Website 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/Website"
                }
              }
            }
          },
          "201": {
            "description": "Website 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/Website"
                }
              }
            }
          },
          "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": "$websiteForm = new Rebilly\\Entities\\Website();\n$websiteForm->setName('TestWebsite');\n$websiteForm->setUrl('http://testwebsite.com');\n$websiteForm->setServicePhone('+0123456789');\n$websiteForm->setServiceEmail('test@testwebsite.com');\n\ntry {\n    $website = $client->websites()->update('websiteId', $websiteForm);\n} catch (Rebilly\\Http\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n"
          },
          {
            "lang": "JavaScript",
            "source": "// creating a new website\nconst data = {\n    name: 'My website',\n    url: 'https://www.acme.com',\n    servicePhone: '15451234567',\n    serviceEmail: 'support@acme.com',\n    customFields: {}\n};\n\n// the ID is optional\nconst firstWebsite = await api.websites.create({data});\n\n// or you can provide one\nconst secondWebsite = await api.websites.create({id: 'my-second-key', data});\n\n\n\n// updating a website\nconst data = {\n    name: 'My website',\n    url: 'https://www.acme.com',\n    servicePhone: '15451234567',\n    serviceEmail: 'support@acme.com',\n    customFields: {}\n};\n\nconst website = await api.websites.update({id: 'my-second-key', data});\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$websiteForm = new \\Rebilly\\Sdk\\Model\\Website();\n$websiteForm->setName('TestWebsite');\n$websiteForm->setUrl('http://testwebsite.com');\n$websiteForm->setServicePhone('+0123456789');\n$websiteForm->setServiceEmail('test@testwebsite.com');\n\ntry {\n    $website = $service->websites()->update('websiteId', $websiteForm);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Websites"
        ],
        "summary": "Delete a website",
        "operationId": "DeleteWebsite",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a website with a specified ID.",
        "responses": {
          "204": {
            "description": "Website deleted."
          },
          "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->websites()->delete('websiteId');\n"
          },
          {
            "lang": "JavaScript",
            "source": "const request = await api.websites.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->websites()->delete('websiteId');"
          }
        ]
      }
    },
    "/experimental/customers/{customerId}/summary-metrics": {
      "parameters": [
        {
          "name": "customerId",
          "in": "path",
          "required": true,
          "description": "ID of the customer.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Customers"
        ],
        "summary": "Retrieve a customer's lifetime summary metrics",
        "operationId": "GetCustomerSummaryMetricReport",
        "x-sdk-operation-name": "getCustomerLifetimeSummaryMetrics",
        "description": "Retrieves lifetime summary metrics for a customer with a specified ID.",
        "responses": {
          "200": {
            "description": "Metrics retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CustomerInformation"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const metrics = await api.customers.getCustomerLifetimeSummaryMetrics({id: 'foobar-0001'});\nconsole.log(metrics.fields.revenueAmount);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$metrics = $service->customers()->getCustomerLifetimeSummaryMetrics('customerId');"
          }
        ]
      }
    },
    "/profile/dashboard": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Dashboards"
        ],
        "summary": "Retrieve profile dashboard",
        "operationId": "GetProfileDashboard",
        "x-sdk-operation-name": "getDashboard",
        "description": "Retrieves the profile dashboard configuration.",
        "responses": {
          "200": {
            "description": "Profile dashboard retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProfileDashboard"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "put": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Dashboards"
        ],
        "summary": "Update profile dashboard",
        "operationId": "PutProfileDashboard",
        "x-sdk-operation-name": "updateDashboard",
        "description": "Updates the profile dashboard configuration.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ProfileDashboard"
              }
            }
          },
          "description": "Profile dashboard resource.",
          "required": true
        },
        "responses": {
          "200": {
            "description": "Profile dashboard 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/ProfileDashboard"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/profile/dashboard/metrics/{metric}": {
      "parameters": [
        {
          "name": "metric",
          "in": "path",
          "required": true,
          "description": "Name of the dashboard metric.",
          "schema": {
            "$ref": "#/components/schemas/DashboardMetric"
          }
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Dashboards"
        ],
        "summary": "Retrieve dashboard metric data",
        "operationId": "GetProfileDashboardMetricReport",
        "x-sdk-operation-name": "getDashboardMetricReport",
        "description": "Retrieves the report data for a single dashboard metric.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "required": true,
            "description": "Start date and time of the metric range.\nThe interval between `periodStart` and `periodEnd` must not exceed 100 days.",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2024-01-01T00:00:00Z"
          },
          {
            "name": "periodEnd",
            "in": "query",
            "required": true,
            "description": "End date and time of the metric range.\nThe interval between `periodStart` and `periodEnd` must not exceed 100 days.",
            "schema": {
              "type": "string",
              "format": "date-time"
            },
            "example": "2024-01-31T23:59:59Z"
          }
        ],
        "responses": {
          "200": {
            "description": "Metric report retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardTileReport"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/experimental/data-exports": {
      "post": {
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Data exports"
        ],
        "summary": "Request the data export of a resource",
        "operationId": "PostDataExport",
        "x-sdk-operation-name": "queue",
        "description": "Requests the export of a specific data resource.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/DataExport"
        },
        "responses": {
          "201": {
            "description": "Data export request received.",
            "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/DataExport"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/DataExportValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// first prepare the details of the export\nconst data = {\n    name: 'my-first-export',\n    // only CSV is currently supported\n    format: 'csv',\n    // define filters, criteria, etc. \n    // to reduce the amount of values exported\n    arguments: {},\n    dateRange: {\n        range: 'all'\n    },\n    // list email addresses that will receive\n    //  a notification once the download is ready\n    emailNotification: ['']\n};\n\nconst queuedExport = await api.exports.queue({resource: 'transaction', data});\nconsole.log(queuedExport.fields.status);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$dataExport = new \\Rebilly\\Sdk\\Model\\CustomersDataExport([\n    'name' => 'Daily customer export',\n    'format' => 'csv',\n    'fields' => [\n        'firstName',\n        'lastName',\n        'email',\n        'lifetimeRevenue/amount',\n        'lastPaymentTime',\n        'createdTime',\n    ],\n    'recurring' => [\n        'instruction' => 'RRULE:FREQ=DAILY',\n    ],\n    'dateRange' => [\n        'start' => 'yesterday',\n        'end' => 'today',\n    ],\n    'emailNotification' => [\n        'user@example.com',\n    ],\n]);\n\n$service->dataExports()->queue($dataExport);"
          }
        ]
      },
      "get": {
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Data exports"
        ],
        "summary": "Retrieve data export requests",
        "operationId": "GetDataExportCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of data export requests.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionQuery"
          },
          {
            "$ref": "#/components/parameters/collectionCriteria"
          }
        ],
        "responses": {
          "200": {
            "description": "List of data export 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/DataExport"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "// all parameters are optional\nconst firstCollection = await api.exports.getAll();\n\n// alternatively you can specify one or more of them\nconst params = {limit: 20, offset: 100, sort: '-createdTime'};\nconst secondCollection = await api.exports.getAll(params);\n\n// access the collection items, each item is a DataExport\nsecondCollection.items.forEach(export => console.log(export.fields.status));\n"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$dataExportsPaginator = $service->dataExports()->getAllPaginator(limit: 5);\nforeach ($dataExportsPaginator as $dataExportPage) {\n    printf(\"dataExports page %d/%d\\n\", $dataExportsPaginator->key() + 1, $dataExportsPaginator->count());\n    foreach ($dataExportPage as $dataExport) {\n        printf(\"DataExport #%s: %s\\n\", $dataExport->getId(), $dataExport->getName());\n    }\n}\n\n// OR\n\n$dataExports = $service->dataExports()->getAll(limit: 100);\nforeach ($dataExports as $dataExport) {\n    printf(\"DataExport #%s: %s\\n\", $dataExport->getId(), $dataExport->getName());\n}"
          }
        ]
      }
    },
    "/experimental/data-exports/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Data exports"
        ],
        "summary": "Retrieve a data export request",
        "operationId": "GetDataExport",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a data export request.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Data export request.",
            "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/DataExport"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const queuedExport = await api.exports.get({resource: 'transaction', id: 'foobar-001'});\nconsole.log(queuedExport.fields.status);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$dataExport = $service->dataExports()->get('dataExportId');"
          }
        ]
      },
      "put": {
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Data exports"
        ],
        "summary": "Modify a data export",
        "operationId": "PutDataExport",
        "x-sdk-operation-name": "update",
        "description": "Modifies a pending data export.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/DataExport"
        },
        "responses": {
          "200": {
            "description": "Data export modified.",
            "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/DataExport"
                }
              }
            }
          },
          "201": {
            "description": "Data export updated.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DataExport"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/DataExportValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$dataExport = new \\Rebilly\\Sdk\\Model\\CustomersDataExport([\n    'name' => 'Daily customer export v2',\n    'format' => 'csv',\n    'fields' => [\n        'firstName',\n        'lastName',\n        'email',\n        'lifetimeRevenue/amount',\n        'lastPaymentTime',\n    ],\n]);\n\ntry {\n    $dataExport = $service->dataExports()->update('dataExportId', $dataExport);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}\n\n// OR\n\n$dataExport = $service->dataExports()->get('dataExportId');\n$dataExport->setFields([\n    'firstName',\n    'lastName',\n    'email',\n    'lifetimeRevenue/amount',\n    'lastPaymentTime',\n]);\n\ntry {\n    $dataExport = $service->dataExports()->update('dataExportId', $dataExport);\n} catch (\\Rebilly\\Sdk\\Exception\\DataValidationException $e) {\n    print_r($e->getValidationErrors());\n}"
          }
        ]
      },
      "delete": {
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Data exports"
        ],
        "summary": "Delete a data export",
        "operationId": "DeleteDataExport",
        "x-sdk-operation-name": "delete",
        "description": "Deletes a data export.",
        "responses": {
          "204": {
            "$ref": "#/components/responses/NoContent"
          },
          "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\n$service->dataExports()->delete('dataExportId');"
          }
        ]
      }
    },
    "/organization-exports": {
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Organization data exports"
        ],
        "summary": "Retrieve organization data exports",
        "operationId": "GetOrganizationExportCollection",
        "x-sdk-operation-name": "getAll",
        "description": "Retrieves a list of organization data exports.",
        "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 organization data exports 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/OrganizationExport"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Organization data exports"
        ],
        "summary": "Request an organization data export",
        "operationId": "PostOrganizationExport",
        "x-sdk-operation-name": "create",
        "description": "Request an organization data export.\nThe data export is asynchronously processed.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "includeFiles": {
                    "description": "Sets the export to include organization files.",
                    "type": "boolean",
                    "default": false,
                    "example": true
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Organization data export request received.",
            "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/OrganizationExport"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/organization-exports/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Users"
        ],
        "tags": [
          "Organization data exports"
        ],
        "summary": "Retrieve an organization data export request",
        "operationId": "GetOrganizationExport",
        "x-sdk-operation-name": "get",
        "description": "Retrieve an organization data export request with a specified organization ID.",
        "responses": {
          "200": {
            "description": "Organization data export request.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrganizationExport"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/experimental/histograms/aml-checks": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Histograms"
        ],
        "summary": "Retrieve AML check histogram report data",
        "operationId": "GetHistogramAmlCheckReport",
        "x-sdk-operation-name": "getAmlCheckHistogramReport",
        "description": "Retrieves AML check histogram report data.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nThe default value depends on the aggregation period:\n- 24 hours ago for `minute` aggregation.\n- First day of the current month for other aggregation periods.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nThe default value depends on the aggregation period:\n- Current time for `minute` aggregation.\n- Last day of the current month for other aggregation periods.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "aggregationPeriod",
            "in": "query",
            "description": "Aggregation period of the report.",
            "schema": {
              "default": "day",
              "type": "string",
              "enum": [
                "minute",
                "hour",
                "day",
                "month"
              ]
            }
          },
          {
            "name": "metric",
            "in": "query",
            "description": "Metric on which the report is based.",
            "schema": {
              "default": "sales_count",
              "type": "string",
              "enum": [
                "aml_checks",
                "aml_checks_pending_review",
                "aml_checks_in_review",
                "aml_checks_confirmed_match",
                "aml_checks_no_match",
                "aml_checks_false_positive",
                "aml_check_hits",
                "aml_check_hits_pending_review",
                "aml_check_hits_in_review",
                "aml_check_hits_confirmed_match",
                "aml_check_hits_no_match",
                "aml_check_hits_false_positive"
              ]
            }
          },
          {
            "name": "includePropagatedResults",
            "in": "query",
            "description": "Specifies if propagated AML checks are included.",
            "schema": {
              "default": false,
              "type": "boolean"
            }
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "AML check report retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistogramData"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/experimental/histograms/transactions": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Histograms"
        ],
        "summary": "Retrieve transaction histogram report data",
        "operationId": "GetHistogramTransactionReport",
        "x-sdk-operation-name": "getTransactionHistogramReport",
        "description": "Retrieves transaction histogram report data.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nThe default value depends on the aggregation period:\n- 24 hours ago for `minute` aggregation.\n- First day of the current month for other aggregation periods.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nThe default value depends on the aggregation period:\n- Current time for `minute` aggregation.\n- Last day of the current month for other aggregation periods.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "aggregationPeriod",
            "in": "query",
            "description": "Aggregation period of the report.",
            "schema": {
              "default": "day",
              "type": "string",
              "enum": [
                "minute",
                "hour",
                "day",
                "month"
              ]
            }
          },
          {
            "name": "metric",
            "in": "query",
            "description": "Metric on which the report is based.",
            "schema": {
              "default": "sales_count",
              "type": "string",
              "enum": [
                "approval",
                "auth_approval",
                "avg_sales",
                "refunds",
                "refunds_count",
                "sales",
                "sales_count",
                "all_sales_count",
                "auth_approval_count",
                "disputes_count",
                "disputes_rate",
                "credits",
                "credits_count",
                "unapproved_count"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Transaction report retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HistogramData"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    periodStart: '2017-09-21T00:00:00Z',\n    // seven day period\n    periodEnd: '2017-09-28T23:59:59Z',\n    aggregationField: 'website',\n    aggregationPeriod: 'day',\n    metric: 'approval'\n};\nconst report = await api.histograms.getTransactionHistogramReport(params);\nconsole.log(report.fields.data);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$histogram = $service->histograms()->getTransactionHistogramReport(\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n    'website',\n    'day',\n    'sales',\n);"
          }
        ]
      }
    },
    "/experimental/reports/api-log-summary": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve an API log summary report",
        "operationId": "GetApiLogSummaryReport",
        "x-sdk-operation-name": "getApiLogSummary",
        "description": "Retrieves an API log summary report.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not specified, defaults to the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not specified, defaults to the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Report retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiLogSummary"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    periodStart: '2017-09-21T00:00:00Z',\n    periodEnd: '2017-09-28T23:59:59Z',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getApiLogSummary(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getApiLogSummary(\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/aml-checks": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve an AML checks report",
        "operationId": "GetAmlCheckReport",
        "x-sdk-operation-name": "getAmlChecks",
        "description": "Retrieves an AML checks report.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not provided or null, the report starts from the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not provided or null, the report ends at the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "metric",
            "in": "query",
            "description": "Metric on which the report is based.",
            "schema": {
              "default": "aml_checks",
              "type": "string",
              "enum": [
                "aml_checks",
                "aml_check_hits"
              ]
            }
          },
          {
            "name": "includePropagatedResults",
            "in": "query",
            "description": "Specifies if propagated AML checks are included.",
            "schema": {
              "type": "boolean"
            }
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Report retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportAmlChecks"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/experimental/reports/aml-checks-inherited-summary": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve AML inherited-match report",
        "operationId": "GetAmlInheritedMatchSummaryReport",
        "x-sdk-operation-name": "getAmlChecksInheritedSummary",
        "description": "Retrieves a summary of AML checks that inherit status from another check,\ngrouped by provenance reason, for the selected period.\n\nEach category row contains the number of checks. This value is used to calculate the percentage of all inherited checks in the period.\nPropagated checks, which are reviewed without a human reviewer, are included in the total.\n\nUse the collection filter to filter results by AML check fields from the AML checks report.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf this value is not provided or is `null`, the report starts on the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf this value is not provided or is `null`, the report ends on the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Report retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportAmlChecksInheritedSummary"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/experimental/reports/cumulative-subscriptions": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a cumulative subscriptions report",
        "operationId": "GetCumulativeSubscriptionReport",
        "x-sdk-operation-name": "getCumulativeSubscriptions",
        "description": "Retrieves a cumulative subscriptions report.",
        "parameters": [
          {
            "name": "aggregationField",
            "in": "query",
            "description": "Report aggregation field.",
            "schema": {
              "type": "string",
              "default": "day",
              "enum": [
                "day",
                "month",
                "affiliate_month"
              ]
            }
          },
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not specified, defaults to the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not specified, defaults to the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Report retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CumulativeSubscriptions"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    aggregationField: 'day',\n    periodStart: '2017-09-21T00:00:00Z',\n    periodEnd: '2017-09-28T23:59:59Z',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getCumulativeSubscriptions(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getCumulativeSubscriptions(\n    'day',\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/dashboard": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve dashboard data",
        "operationId": "GetDashboardReport",
        "x-sdk-operation-name": "getDashboardMetrics",
        "description": "Retrieves dashboard data.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nDefaults to the start of the current month.\n",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nDefaults to the end of the current month.\n",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "metrics",
            "in": "query",
            "description": "Comma-separated list of metrics.",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "segments",
            "in": "query",
            "description": "Dashboard report segments as a JSON array.",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Report retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DashboardResponse"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$dashboard = $service->reports()->getDashboardMetrics(\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n    metrics: 'approvalRate,salesCount,salesValue,refundsValue',\n);"
          }
        ]
      }
    },
    "/experimental/reports/dcc-markup": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a DCC markup report",
        "operationId": "GetDccMarkupReport",
        "x-sdk-operation-name": "getDccMarkup",
        "description": "Retrieves a Dynamic Currency Conversion (DCC) markup report.",
        "parameters": [
          {
            "name": "aggregationField",
            "in": "query",
            "description": "Report aggregation field.",
            "schema": {
              "type": "string",
              "default": "month",
              "enum": [
                "day",
                "month",
                "bin",
                "country",
                "baseCurrency",
                "quoteCurrency"
              ]
            }
          },
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nDefaults to the start of the current month.\n",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nDefaults to the end of the current month.\n",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/DccMarkup"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    aggregationField: 'day',\n    periodStart: '2017-09-21T00:00:00Z',\n    periodEnd: '2017-09-28T23:59:59Z',\n    limit: 20,\n    offset: 0,\n    filter: `gatewayAccounts:f9b4fa10-df1d-48a3-85b3-ff6bd7ce0ed2; \\\n            transactionResult:approved,canceled,declined,unknown`,\n    tz: 0\n};\nconst report = await api.reports.getDccMarkup(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getDccMarkup(\n    'day',\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/declined-transactions": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a declined transactions report",
        "operationId": "GetDeclinedTransactionReport",
        "x-sdk-operation-name": "getDeclinedTransactions",
        "description": "Retrieves a report on declined transactions.",
        "parameters": [
          {
            "name": "aggregationField",
            "in": "query",
            "description": "Aggregation field of the report.\nIf a value is not provided, `gatewayResponseMessage` is used.",
            "schema": {
              "type": "string",
              "enum": [
                "gatewayResponseMessage",
                "gatewayResponseOriginalMessage"
              ]
            }
          },
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf no value is provided, the start date of the previous month is used.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf no value is provided, the end date of current month is used.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Report retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportDeclinedTransactions"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/experimental/reports/deferred-revenue": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a deferred revenue report",
        "operationId": "GetDeferredRevenueReport",
        "x-sdk-operation-name": "getDeferredRevenue",
        "description": "Retrieves a deferred revenue report which displays monthly total liability and liability changes over months.\n\nThis deferred revenue report provides a month-by-month overview of deferred revenue recognized revenue and liabilities as of a given report date.\nIt presents the total deferred revenue for each month,\nthe amount recognized as revenue both cumulatively and within the specific month,\nas well as the remaining deferred revenue liability up to that month.",
        "parameters": [
          {
            "name": "currency",
            "in": "query",
            "description": "Currency of the revenue.\nIf no value is provided, the reporting currency of the organization is used.",
            "schema": {
              "$ref": "#/components/schemas/CurrencyCode"
            }
          },
          {
            "name": "asOfDate",
            "in": "query",
            "description": "Date and time up to which revenue is recognized for the report.\nIf no value is provided, the end of the current month is used.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportDeferredRevenue"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const report = await api.reports.getDeferredRevenue({\n    currency: 'USD',\n    asOfDate: '2025-10-31T00:00:00Z',\n});\n"
          }
        ]
      }
    },
    "/experimental/reports/disputes": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a disputes report",
        "operationId": "GetDisputeReport",
        "x-sdk-operation-name": "getDisputes",
        "description": "Retrieves a disputes report.",
        "parameters": [
          {
            "name": "aggregationField",
            "in": "query",
            "description": "Report aggregation field.",
            "schema": {
              "type": "string",
              "default": "website",
              "enum": [
                "website",
                "gatewayAcquirer",
                "currency",
                "bin",
                "country",
                "rebillNumber",
                "retryNumber",
                "gatewayAccount"
              ]
            }
          },
          {
            "name": "periodMonth",
            "in": "query",
            "description": "Report month in `YYYY-MM` format.\nIf no value is provided, current month is used.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportDisputes"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    aggregationField: 'website',\n    periodMonth: '2017-09',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getDisputes(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getDisputes(\n    'website',\n    '2022-01',\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/events-triggered": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve events triggered summary report",
        "operationId": "GetTriggeredEventReport",
        "x-sdk-operation-name": "getEventsTriggeredSummary",
        "description": "Retrieves an events triggered summary report.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not specified, defaults to the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not specified, defaults to the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportEventsTriggeredSummary"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    periodStart: '2017-09-22T00:00:00Z',\n    periodEnd: '2017-09-29T23:59:59Z',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getEventsTriggeredSummary(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getEventsTriggeredSummary(\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/events-triggered/{eventType}/rules": {
      "parameters": [
        {
          "name": "eventType",
          "in": "path",
          "required": true,
          "description": "Type of system event.",
          "schema": {
            "$ref": "#/components/schemas/EventType"
          }
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a rules matched summary report",
        "operationId": "GetTriggeredEventRuleReport",
        "x-sdk-operation-name": "getTriggeredEventRuleReport",
        "description": "Retrieves a rules matched summary report that is based on triggered events.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not specified, defaults to the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not specified, defaults to the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportRulesMatchedSummary"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    periodStart: '2017-09-22T00:00:00Z',\n    periodEnd: '2017-09-29T23:59:59Z',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getRulesMatchedSummary(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getTriggeredEventRuleReport(\n    'account-password-reset-requested',\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/future-renewals": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a future renewals report",
        "operationId": "GetFutureRenewalReport",
        "x-sdk-operation-name": "getFutureRenewals",
        "description": "Retrieves a future renewals report.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nThis date must be in the future.\nIf no value is provided, the current month is used.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}$",
              "example": "2032-01"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nThis date must be in the future.\nIf no value is provided, the current month is used.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-\\d{2}$",
              "example": "2032-02"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/FutureRenewals"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    periodStart: '2017-09-22T00:00:00Z',\n    periodEnd: '2017-09-29T23:59:59Z',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getFutureRenewals(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getFutureRenewals(\n    '2022-10',\n    '2022-11',\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/journal": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a journal report",
        "operationId": "GetJournalReport",
        "x-sdk-operation-name": "getJournal",
        "description": "Retrieves a journal report which displays revenue for each account.\n\nA revenue journal is a detailed revenue waterfall report that describes revenue recognized in a specific month,\naggregated by product ID, product accounting code, or plan ID.\nIt contains information on booked revenue,\nrecognized revenue for each aggregation field in the booked period,\nand the remaining revenue up to the selected month.",
        "parameters": [
          {
            "name": "currency",
            "in": "query",
            "description": "Revenue currency.\nIf no value is provided, the organization reporting currency is used.",
            "schema": {
              "$ref": "#/components/schemas/CurrencyCode"
            }
          },
          {
            "name": "bookedFrom",
            "in": "query",
            "description": "Year and month from which revenue is booked.\nIf this value is omitted, booked revenue is recorded from the first booked amount.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-01"
            }
          },
          {
            "name": "bookedTo",
            "in": "query",
            "description": "Year and month in which revenue is booked until.\nIf this value is omitted, booked revenue is recorded until the most recently booked amount.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-01"
            }
          },
          {
            "name": "recognizedAt",
            "in": "query",
            "description": "Year and month when revenue is recognized.\nIf this value is omitted, current month is used.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-04"
            }
          },
          {
            "name": "aggregationField",
            "in": "query",
            "description": "Report aggregation field.\nIf no value is provided, the report aggregates by `product.id`.",
            "schema": {
              "type": "string",
              "enum": [
                "product.accountingCode",
                "product.id",
                "plan.id"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportJournal"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    currency: 'USD',\n    bookedFrom: '2022-01',\n    bookedTo: '2022-06',\n    recognizedAt: '2022-06',\n    aggregationField: 'product.accountingCode',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getJournal(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getJournal(\n    'USD',\n    '2022-04',\n    'product.id',\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/journal-summary": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a journal summary report",
        "operationId": "GetJournalSummaryReport",
        "x-sdk-operation-name": "getJournalSummary",
        "description": "Retrieves a journal summary report which displays recognized revenue by journal account name for each calendar month.\nIt includes both monthly and annual journal entries, and sums the revenue per account for each month.\n\n- Rows: Represent individual journal account names, corresponding to product or revenue categories.\n- Columns: Represent monthly periods, showing the total recognized revenue in each journal account for that month.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Year and month from which the report is generated.\nIf no value is provided or is `null`,\nthe report starts from one year ago.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2025-06"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Year and month up to which the report is generated.\nIf no value is provided or is `null`,\nthe report ends at the current month.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2025-09"
            }
          },
          {
            "name": "currency",
            "in": "query",
            "description": "Currency for the journal entries in the report.\nIf no value is provided, the organization reporting currency is used.",
            "schema": {
              "$ref": "#/components/schemas/CurrencyCode"
            }
          },
          {
            "name": "aggregationField",
            "in": "query",
            "description": "Report aggregation field.\nIf no value is provided,\nthe report aggregates by `journalRecord.creditAccountId`.",
            "schema": {
              "type": "string",
              "enum": [
                "journalRecord.creditAccountId",
                "journalRecord.debitAccountId"
              ]
            }
          },
          {
            "name": "amountField",
            "in": "query",
            "description": "Report amount field.\nIf no value is provided, the report uses `journalRecord.recognizedAmount`.",
            "schema": {
              "type": "string",
              "enum": [
                "journalRecord.estimatedAmount",
                "journalRecord.recognizedAmount"
              ]
            }
          },
          {
            "name": "journalAccountIds",
            "in": "query",
            "description": "Comma-separated list of journal account IDs to filter the report.\nIf no value is provided, all journal accounts are included.",
            "schema": {
              "type": "string",
              "example": "jrn_acc_01JXFPKZP4QE4CR3GTT23K8R5J,jrn_acc_01JXFPM6M3CYJ496E5NSCBPM49"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/JournalSummaryReport"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/experimental/reports/kyc-acceptance-summary": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a KYC acceptance summary report",
        "operationId": "GetKycAcceptanceSummaryReport",
        "x-sdk-operation-name": "getKycAcceptanceSummary",
        "description": "Retrieves a Know Your Customer (KYC) acceptance summary report.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not specified, defaults to the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not specified, defaults to the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Report retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "title": "GetKycAcceptanceSummaryResponse",
                  "properties": {
                    "data": {
                      "description": "KYC acceptance data.",
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "Amount of accepted KYC documents.",
                        "readOnly": true,
                        "properties": {
                          "documentType": {
                            "allOf": [
                              {
                                "description": "Type of KYC document.",
                                "example": "address-proof"
                              },
                              {
                                "$ref": "#/components/schemas/KycDocumentTypes"
                              }
                            ]
                          },
                          "statusStatistics": {
                            "type": "object",
                            "description": "Statistics for each status.",
                            "properties": {
                              "accepted": {
                                "type": "object",
                                "description": "Statistics for the `accepted` status.",
                                "properties": {
                                  "total": {
                                    "type": "integer",
                                    "description": "Total amount of accepted documents.",
                                    "example": 6
                                  },
                                  "automatically": {
                                    "type": "integer",
                                    "description": "Amount of documents that have been accepted automatically.",
                                    "example": 4
                                  },
                                  "manually": {
                                    "type": "integer",
                                    "description": "Amount of documents that have been accepted by reviewer.",
                                    "example": 2
                                  },
                                  "afterAutoRejected": {
                                    "type": "integer",
                                    "description": "Amount of documents that have been rejected automatically and then accepted by reviewer.",
                                    "example": 2
                                  }
                                }
                              },
                              "rejected": {
                                "type": "object",
                                "description": "Statistics for the `rejected` status.",
                                "properties": {
                                  "total": {
                                    "type": "integer",
                                    "description": "Total amount of rejected documents.",
                                    "example": 2
                                  },
                                  "automatically": {
                                    "type": "integer",
                                    "description": "Amount of documents that have been rejected automatically.",
                                    "example": 1
                                  },
                                  "manually": {
                                    "type": "integer",
                                    "description": "Amount of documents that have been rejected by reviewer.",
                                    "example": 1
                                  },
                                  "afterAutoAccepted": {
                                    "type": "integer",
                                    "description": "Amount of documents that have been accepted automatically and then rejected by reviewer.",
                                    "example": 1
                                  }
                                }
                              },
                              "pending": {
                                "type": "object",
                                "description": "Statistics for the `pending` status.",
                                "properties": {
                                  "total": {
                                    "type": "integer",
                                    "description": "Total amount of pending documents.",
                                    "example": 0
                                  }
                                }
                              },
                              "archived": {
                                "type": "object",
                                "description": "Statistics for the `archived` status.",
                                "properties": {
                                  "total": {
                                    "type": "integer",
                                    "description": "Total amount of archived documents.",
                                    "example": 0
                                  }
                                }
                              }
                            }
                          },
                          "total": {
                            "type": "integer",
                            "description": "Total amount of documents.",
                            "example": 8
                          },
                          "accuracyRate": {
                            "type": "number",
                            "description": "Percentage of automatically accepted and rejected documents that remain in the same status after review.\nCalculated based on the following: `(non-archived total - accepted auto rejected - rejected auto accepted)/non-archived total`.",
                            "example": 62.5
                          },
                          "acceptanceRate": {
                            "type": "number",
                            "description": "Percentage of accepted documents from the total number of KYC documents.\nCalculated based on the following: `accepted total / total of non-archived documents`.",
                            "example": 75
                          },
                          "manualReviewTime": {
                            "type": "number",
                            "description": "Median duration in minutes between review and created time for manually reviewed documents."
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getKycAcceptanceSummary(\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n);"
          }
        ]
      }
    },
    "/experimental/reports/kyc-rejection-summary": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a KYC rejections report",
        "operationId": "GetKycRejectionSummaryReport",
        "x-sdk-operation-name": "getKycRejectionSummary",
        "description": "Retrieves a Know Your Customer (KYC) rejection report by type and by rejection reasons.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not specified, defaults to the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not specified, defaults to the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportKycRejections"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getKycRejectionSummary(\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n);"
          }
        ]
      }
    },
    "/experimental/reports/kyc-request-summary": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a KYC requests report",
        "operationId": "GetKycRequestSummaryReport",
        "x-sdk-operation-name": "getKycRequestSummary",
        "description": "Retrieves a Know Your Customer (KYC) request report by type and by rejection reasons.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not specified, defaults to the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not specified, defaults to the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportKycRequests"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getKycRequestSummary(\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n);"
          }
        ]
      }
    },
    "/experimental/reports/monthly-recurring-revenue": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a MRR report",
        "operationId": "GetMonthlyRecurringRevenueReport",
        "x-sdk-operation-name": "getMonthlyRecurringRevenue",
        "description": "Retrieves a Monthly Recurring Revenue (MRR) report.\n\nUse MRR reports to view information on the predictable recurring revenue for your business over a period of months.",
        "parameters": [
          {
            "name": "currency",
            "in": "query",
            "description": "Revenue currency.\nIf no value is provided, the organization reporting currency is used.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CurrencyCode"
            }
          },
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf no value is provided or is `null`,\nthe report starts at the beginning of the previous month.",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-01"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf no value is provided or `null`,\nthe report ends at the current month.",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-06"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportMonthlyRecurringRevenue"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const report = await api.reports.getMonthlyRecurringRevenue({\n    periodStart: '2016-09',\n    periodEnd: '2017-09',\n    limit: 20,\n    offset: 0,\n    tz: 0\n});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getMonthlyRecurringRevenue(\n    'USD',\n    '2022-01',\n    '2022-03',\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/annual-recurring-revenue": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve an ARR report",
        "operationId": "GetAnnualRecurringRevenueReport",
        "x-sdk-operation-name": "getAnnualRecurringRevenue",
        "description": "Retrieves an Annual Recurring Revenue (ARR) report.\n\nUse ARR reports to view information on the predictable recurring revenue for your business over a period of months.",
        "parameters": [
          {
            "name": "currency",
            "in": "query",
            "description": "Revenue currency.\nIf no value is provided, the organization reporting currency is used.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CurrencyCode"
            }
          },
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf no value is provided or is `null`,\nthe report starts at the beginning of the previous month.",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-01"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf no value is provided or is `null`,\nthe report ends at the current month.",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-06"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportAnnualRecurringRevenue"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const report = await api.reports.getAnnualRecurringRevenue({\n    periodStart: '2016-09',\n    periodEnd: '2018-09',\n    currency: 'USD',\n});\n"
          }
        ]
      }
    },
    "/experimental/reports/renewal-sales": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a renewal sales report",
        "operationId": "GetRenewalSaleReport",
        "x-sdk-operation-name": "getRenewalSales",
        "description": "Retrieves a renewal sales report.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nDefaults to the start of the current month.\n",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-01"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nDefaults to the end of the current month.\n",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-02"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/RenewalSales"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    periodStart: '2017-09',\n    periodEnd: '2017-09',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getRenewalSales(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getRenewalSales(\n    '2022-01',\n    '2022-03',\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/retention-percentage": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a retention percentage report",
        "operationId": "GetRetentionPercentageReport",
        "x-sdk-operation-name": "getRetentionPercentage",
        "description": "Retrieves a retention percentage report.",
        "parameters": [
          {
            "name": "aggregationField",
            "in": "query",
            "description": "Report aggregation field.",
            "schema": {
              "type": "string",
              "default": "month",
              "enum": [
                "day",
                "month",
                "quarter",
                "year"
              ]
            }
          },
          {
            "name": "aggregationPeriod",
            "in": "query",
            "description": "Report aggregation period.",
            "schema": {
              "type": "string",
              "default": "month",
              "enum": [
                "day",
                "month",
                "quarter",
                "year",
                "cycle"
              ]
            }
          },
          {
            "name": "includeSwitchedSubscriptions",
            "in": "query",
            "description": "Specifies whether to include switched subscriptions.",
            "schema": {
              "type": "string",
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not provided, defaults to the start of the current month.\n",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not provided, defaults to the end of the current month.\n",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionCriteria"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportRetentionPercentage"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    aggregationField: 'month',\n    aggregationPeriod: 'month',\n    periodStart: '2016-09-01T00:00:00Z',\n    periodEnd: '2017-09-01T00:00:00Z',\n    includeSwitchedSubscriptions: false,\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getRetentionPercentage(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getRetentionPercentage(\n    'day',\n    'month',\n    periodStart: new \\DateTimeImmutable('2022-01-01'),\n    periodEnd: new \\DateTimeImmutable('now'),\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/retention-value": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a retention value report",
        "operationId": "GetRetentionValueReport",
        "x-sdk-operation-name": "getRetentionValue",
        "description": "Retrieves the total number of new customers for each aggregation period and the corresponding value for each customer over time.",
        "parameters": [
          {
            "name": "aggregationField",
            "in": "query",
            "description": "Report aggregation field.",
            "schema": {
              "type": "string",
              "default": "month",
              "enum": [
                "day",
                "month",
                "quarter",
                "year",
                "leadsSource",
                "leadsMedium",
                "leadsCampaign",
                "leadsContent",
                "leadsTerm",
                "leadsAffiliate",
                "leadsSubAffiliate",
                "leadsSalesAgent",
                "bin"
              ]
            }
          },
          {
            "name": "aggregationPeriod",
            "in": "query",
            "description": "Report aggregation period.",
            "schema": {
              "type": "string",
              "default": "month",
              "enum": [
                "day",
                "month",
                "quarter",
                "year"
              ]
            }
          },
          {
            "name": "includeRefunds",
            "in": "query",
            "description": "Specifies whether to include refunds.",
            "schema": {
              "type": "string",
              "default": false,
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "includeDisputes",
            "in": "query",
            "description": "Specifies whether to include disputes.",
            "schema": {
              "type": "string",
              "default": false,
              "enum": [
                "true",
                "false"
              ]
            }
          },
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not provided, defaults to the start of the current month.\n",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not provided, defaults to the end of the current month.\n",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          },
          {
            "$ref": "#/components/parameters/collectionSort"
          },
          {
            "$ref": "#/components/parameters/collectionCriteria"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportRetentionValue"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    aggregationField: 'month',\n    aggregationPeriod: 'month',\n    periodStart: '2016-09-01T00:00:00Z',\n    periodEnd: '2017-09-01T00:00:00Z',\n    includeRefunds: true,\n    includeDisputes: false,\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getRetentionValue(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getRetentionValue(\n    'month',\n    'day',\n    periodStart: new \\DateTimeImmutable('2022-01-01'),\n    periodEnd: new \\DateTimeImmutable('now'),\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/revenue-waterfall": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a revenue waterfall report",
        "operationId": "GetRevenueWaterfallReport",
        "x-sdk-operation-name": "getRevenueWaterfall",
        "description": "Retrieves a revenue waterfall report.\n\nUse revenue waterfall reports to view revenue that is recognized up to a given month.\nRevenue waterfall reports contain information on booked revenue,\nrecognized revenue for the months in the issued period,\nand the remaining revenue up to the specified month.",
        "parameters": [
          {
            "name": "currency",
            "in": "query",
            "description": "Revenue currency.",
            "required": true,
            "schema": {
              "$ref": "#/components/schemas/CurrencyCode"
            }
          },
          {
            "name": "issuedFrom",
            "in": "query",
            "description": "Date from which revenue invoice is issued.\nIf not provided or null, the report starts from the previous month.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-01"
            }
          },
          {
            "name": "issuedTo",
            "in": "query",
            "description": "Date to which revenue invoice is issued.\nIf not provided or null, the report ends at the current month.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-04"
            }
          },
          {
            "name": "recognizedTo",
            "in": "query",
            "description": "Month up to which revenue is recognized.\nIf not provided or null, the current month is used.",
            "schema": {
              "type": "string",
              "pattern": "^\\d{4}-(0[1-9]|1[0-2])$",
              "example": "2022-04"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Report retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReportRevenueWaterfall"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const report = await api.reports.getRevenueWaterfall({\n    issuedFrom: '2016-09',\n    issuedTo: '2017-09',\n    recognizedTo: '2017-09',\n    limit: 20,\n    offset: 0,\n    tz: 0\n});"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getRevenueWaterfall(\n    'USD',\n    '2022-01',\n    '2022-02',\n    '2022-02',\n);"
          }
        ]
      }
    },
    "/experimental/reports/subscription-cancellation": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a subscription cancellation report",
        "operationId": "GetSubscriptionCancellationReport",
        "x-sdk-operation-name": "getSubscriptionCancellation",
        "description": "Retrieves a subscription cancellation report.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not specified, defaults to the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not specified, defaults to the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "aggregationField",
            "in": "query",
            "description": "Report aggregation field.",
            "schema": {
              "type": "string",
              "default": "planId",
              "enum": [
                "planId",
                "websiteId",
                "canceledBy",
                "cancelCategory",
                "leadSource.source",
                "leadSource.medium",
                "leadSource.campaign",
                "leadSource.content",
                "leadSource.term",
                "leadSource.affiliate",
                "leadSource.subAffiliate",
                "leadSource.salesAgent"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/SubscriptionCancellationReport"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    aggregationField: 'day',\n    periodStart: '2017-09-21T00:00:00Z',\n    periodEnd: '2017-09-28T23:59:59Z',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getSubscriptionCancellation(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getSubscriptionCancellation(\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n    'leadSource.source',\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/subscription-renewal": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a subscription renewal report",
        "operationId": "GetSubscriptionRenewalReport",
        "x-sdk-operation-name": "getSubscriptionRenewal",
        "description": "Retrieves a subscription renewal report.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not specified, defaults to the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not specified, defaults to the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/SubscriptionRenewal"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    periodStart: '2017-09-21T00:00:00Z',\n    periodEnd: '2017-09-28T23:59:59Z',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getSubscriptionRenewal(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getSubscriptionRenewal(\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/tax": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a tax report",
        "operationId": "GetTaxReport",
        "x-sdk-operation-name": "getTax",
        "description": "Retrieves a tax report, which displays taxes collected on sales.\nTax amounts are aggregated by state and municipality.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf no value is provided,\nthe report starts from the beginning of the previous month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf no value is provided,\nthe report ends at the end of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "accountingMethod",
            "in": "query",
            "description": "Accounting method to use when generating the report.\nIf no value is provided, cash is used.",
            "schema": {
              "type": "string",
              "enum": [
                "cash",
                "accrual"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportTax"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    periodStart: '2023-01-01 00:00-00',\n    periodEnd: '2023-03-31 23:59:59',\n    accountingMethod: 'cash',\n    limit: 20,\n    offset: 0,\n};\nconst report = await api.reports.getTax(params);\n"
          }
        ]
      }
    },
    "/experimental/reports/time-series-transaction": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a time series transactions report",
        "operationId": "GetTimeSeriesTransactionReport",
        "x-sdk-operation-name": "getTimeSeriesTransaction",
        "description": "Retrieves a report of sale and capture transactions, with one row for each day of the period.\nEach row holds an aggregation of every transaction of the day,\nand a breakdown of that day by the `subaggregate` field.\nTransactions occur on the day of the `processedTime` value.",
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Aggregate the transactions of each day by count, sum of amounts, approval rate, or incomplete rate.",
            "schema": {
              "type": "string",
              "default": "count",
              "enum": [
                "count",
                "amount",
                "approval-rate",
                "incomplete-rate"
              ]
            }
          },
          {
            "name": "subaggregate",
            "in": "query",
            "description": "Group the transactions of each day by this field, one subaggregate for each value.",
            "schema": {
              "type": "string",
              "default": "gateway-account",
              "enum": [
                "website",
                "gateway-account",
                "currency",
                "plan",
                "leads.source",
                "leads.medium",
                "leads.campaign",
                "leads.content",
                "leads.term",
                "leads.affiliate",
                "leads.subaffiliate",
                "leads.sales-agent"
              ]
            }
          },
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf no value is provided, the report begins on the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf no value is provided, the report ends on the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/TimeSeriesTransaction"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    periodStart: '2017-08-29T00:00:00Z',\n    periodEnd: '2017-09-29T23:59:59Z',\n    type: 'count',\n    subaggregate: 'gateway-account',\n    limit: 20,\n    offset: 0\n};\nconst report = await api.reports.getTimeSeriesTransaction(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getTimeSeriesTransaction(\n    'approval-rate',\n    'leads.sales-agent',\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n);"
          }
        ]
      }
    },
    "/experimental/reports/transactions-time-dispute": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a transaction time dispute report",
        "operationId": "GetTransactionTimeDisputeReport",
        "x-sdk-operation-name": "getTransactionsTimeDispute",
        "description": "Retrieves a dispute delay in days report.\nThis report describes the amount of time between a transaction and a dispute.",
        "parameters": [
          {
            "name": "aggregationField",
            "in": "query",
            "description": "Report aggregation field.",
            "schema": {
              "type": "string",
              "default": "gatewayAccount",
              "enum": [
                "website",
                "processor",
                "currency",
                "bin",
                "country",
                "rebillNumber",
                "retryNumber",
                "gatewayAccount",
                "transactionAmount"
              ]
            }
          },
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not specified, defaults to the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not specified, defaults to the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportDisputeDelays"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    aggregationField: 'website',\n    periodStart: '2017-09-22T00:00:00Z',\n    periodEnd: '2017-09-29T23:59:59Z',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getTransactionsTimeDispute(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getTransactionsTimeDispute(\n    'rebillNumber',\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/reports/transactions": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Reports"
        ],
        "summary": "Retrieve a transactions report",
        "operationId": "GetTransactionReport",
        "x-sdk-operation-name": "getTransactions",
        "description": "Retrieves a transactions report.",
        "parameters": [
          {
            "name": "periodStart",
            "in": "query",
            "description": "Date and time when the report starts.\nIf not provided or null, the report starts from the first day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "periodEnd",
            "in": "query",
            "description": "Date and time when the report ends.\nIf not provided or null, the report ends at the last day of the current month.",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "aggregationField",
            "in": "query",
            "description": "Report aggregation field.",
            "schema": {
              "type": "string",
              "default": "website",
              "enum": [
                "website",
                "country",
                "currency",
                "bin",
                "rebillNumber",
                "transactionResult",
                "transactionType",
                "gatewayAccount",
                "gateway",
                "retryNumber",
                "plan",
                "cardBrand",
                "leadSource.source",
                "leadSource.medium",
                "leadSource.campaign",
                "leadSource.content",
                "leadSource.term",
                "leadSource.affiliate",
                "leadSource.subAffiliate",
                "leadSource.salesAgent"
              ]
            }
          },
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          },
          {
            "$ref": "#/components/parameters/collectionFilter"
          }
        ],
        "responses": {
          "200": {
            "description": "Report 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/ReportTransactions"
                }
              }
            }
          },
          "400": {
            "$ref": "#/components/responses/BadRequest"
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "JavaScript",
            "source": "const params = {\n    aggregationField: 'website',\n    periodStart: '2017-09-22T00:00:00Z',\n    periodEnd: '2017-09-29T23:59:59Z',\n    limit: 20,\n    offset: 0,\n    tz: 0\n};\nconst report = await api.reports.getTransactions(params);"
          },
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->reports()->getTransactions(\n    new \\DateTimeImmutable('2022-01-01'),\n    new \\DateTimeImmutable('now'),\n    'leadSource.subAffiliate',\n    limit: 5,\n);"
          }
        ]
      }
    },
    "/experimental/subscriptions/{subscriptionId}/summary-metrics": {
      "parameters": [
        {
          "name": "subscriptionId",
          "in": "path",
          "required": true,
          "description": "ID of the subscription order.",
          "schema": {
            "type": "string"
          }
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Orders"
        ],
        "summary": "Retrieve subscription order summary metrics",
        "operationId": "GetSubscriptionSummaryMetricReport",
        "x-sdk-operation-name": "getSubscriptionSummaryMetrics",
        "description": "Retrieves summary metrics for a subscription order with a specified ID.",
        "responses": {
          "200": {
            "description": "Metrics retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubscriptionSummaryMetrics"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        },
        "x-codeSamples": [
          {
            "lang": "PHP",
            "source": "$service = new \\Rebilly\\Sdk\\Service($client);\n\n$report = $service->subscriptions()->getSubscriptionSummaryMetrics('subscriptionId');"
          }
        ]
      }
    },
    "/storefront/account": {
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront account"
        ],
        "summary": "Retrieve account",
        "operationId": "StorefrontGetAccount",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieve account.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Account retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "patch": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront account"
        ],
        "summary": "Update account",
        "operationId": "StorefrontPatchAccount",
        "x-sdk-operation-name": "update",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Register account.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/StorefrontAccount"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "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/StorefrontAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/account/forgot-password": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront account"
        ],
        "summary": "Request a password reset",
        "operationId": "StorefrontPostForgotPassword",
        "x-sdk-operation-name": "requestPasswordReset",
        "security": [
          {
            "PublishableApiKey": []
          }
        ],
        "description": "Sends an email with a link containing a token to reset a user password.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "username"
                ],
                "properties": {
                  "username": {
                    "description": "Username of the account to which a verification email is sent.",
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Email sent.",
            "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"
          }
        }
      }
    },
    "/storefront/account/password": {
      "patch": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront account"
        ],
        "summary": "Change an account password",
        "operationId": "StorefrontPatchAccountPassword",
        "x-sdk-operation-name": "changePassword",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Changes an account password.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PatchAccountPassword"
        },
        "responses": {
          "200": {
            "description": "Account password 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/StorefrontAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/account/resend-verification": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront account"
        ],
        "summary": "Resend email verification",
        "operationId": "StorefrontPostAccountResendVerification",
        "x-sdk-operation-name": "resendEmailVerification",
        "security": [
          {
            "PublishableApiKey": []
          }
        ],
        "description": "Resends a verification email for an account with a specified username.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "username"
                ],
                "properties": {
                  "username": {
                    "description": "Username of the account to which a verification email is sent.",
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "204": {
            "description": "Email sent.",
            "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"
          }
        }
      }
    },
    "/storefront/account/reset-password/{token}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/token"
        }
      ],
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront account"
        ],
        "summary": "Finish password reset",
        "operationId": "StorefrontPostResetPassword",
        "x-sdk-operation-name": "confirmPasswordReset",
        "security": [
          {
            "PublishableApiKey": []
          }
        ],
        "description": "Resets a user's account password.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "newPassword"
                ],
                "properties": {
                  "newPassword": {
                    "type": "string",
                    "example": "newP@$$w0rd",
                    "description": "New user account password."
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Password reset.",
            "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/StorefrontAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/account/verification/{token}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/token"
        }
      ],
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront account"
        ],
        "summary": "Verify an account email",
        "operationId": "StorefrontPostAccountVerification",
        "x-sdk-operation-name": "verifyEmail",
        "security": [
          {
            "PublishableApiKey": []
          }
        ],
        "description": "Verifies an account email.",
        "responses": {
          "204": {
            "description": "Account verified.",
            "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"
          }
        }
      }
    },
    "/storefront/billing-portals/{slug}": {
      "parameters": [
        {
          "name": "slug",
          "in": "path",
          "description": "Resource slug.",
          "required": true,
          "schema": {
            "type": "string",
            "maxLength": 100,
            "pattern": "^[@~\\-\\.\\w]+$"
          }
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront billing portals"
        ],
        "summary": "Retrieve a billing portal",
        "operationId": "StorefrontGetBillingPortal",
        "x-sdk-operation-name": "get",
        "description": "Retrieve a billing portal with a specified slug.",
        "security": [],
        "responses": {
          "200": {
            "description": "Billing portal retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontBillingPortal"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/storefront/deposit-strategies/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Storefront deposits"
        ],
        "summary": "Retrieve a deposit amount strategy",
        "operationId": "StorefrontGetDepositStrategy",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "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"
          }
        }
      }
    },
    "/storefront/deposit-requests/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Storefront deposits"
        ],
        "summary": "Retrieve a deposit request",
        "operationId": "StorefrontGetDepositRequest",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "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"
          }
        }
      }
    },
    "/storefront/cashiers/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront cashiers"
        ],
        "summary": "Retrieve a cashier",
        "operationId": "StorefrontGetCashier",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves a cashier resource with a specified ID.",
        "responses": {
          "200": {
            "description": "Cashier retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontCashier"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/storefront/cashiers/{id}/cancel-payout-requests": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront cashiers"
        ],
        "summary": "Cancel pending payout requests",
        "operationId": "StorefrontPostCashierPayoutRequestCancellation",
        "x-sdk-operation-name": "cancelPayoutRequests",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Cancels pending payout requests that are associated with the cashier resource.\n\n- To cancel all pending payout requests, omit the request body.\n- To cancel payout requests based on a specific amount, include the amount in the request body.\nThe oldest requests are canceled first until the specified amount is reached.",
        "requestBody": {
          "required": false,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostCashierPayoutRequestCancellation"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Canceled all applicable pending cashier payout requests.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Cashier"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        }
      }
    },
    "/storefront/deposit": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "tags": [
          "Storefront deposits"
        ],
        "summary": "Create a deposit",
        "operationId": "StorefrontPostDeposit",
        "x-sdk-operation-name": "create",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Creates a deposit transaction.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PostDeposit"
        },
        "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/StorefrontTransaction"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/checkout-forms/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "deprecated": true,
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront checkout forms"
        ],
        "summary": "Retrieve a checkout form",
        "operationId": "StorefrontGetCheckoutForm",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a checkout form with a specified ID.",
        "security": [],
        "responses": {
          "200": {
            "description": "Checkout form retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontCheckoutForm"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/storefront/custom-fields/{resource}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/storefrontCustomFieldResource"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront custom fields"
        ],
        "summary": "Retrieve custom fields",
        "operationId": "StorefrontGetCustomFieldCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "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"
          }
        }
      }
    },
    "/storefront/invoices": {
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront invoices"
        ],
        "summary": "Retrieve invoices",
        "operationId": "StorefrontGetInvoiceCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieve 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": "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/StorefrontInvoice"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/storefront/invoices/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront invoices"
        ],
        "summary": "Retrieve an invoice",
        "operationId": "StorefrontGetInvoice",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves an invoice with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Invoice retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontInvoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "patch": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront invoices"
        ],
        "summary": "Update an invoice",
        "operationId": "StorefrontPatchInvoice",
        "x-sdk-operation-name": "update",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Updates an invoice with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PatchInvoice"
        },
        "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/StorefrontInvoice"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/orders/{id}/upcoming-invoice": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront orders"
        ],
        "summary": "Retrieve an upcoming order invoice",
        "operationId": "StorefrontGetOrderUpcomingInvoice",
        "x-sdk-operation-name": "getUpcomingInvoice",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "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/StorefrontUpcomingInvoice"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/storefront/kyc-documents": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront KYC documents"
        ],
        "summary": "Create a KYC document",
        "operationId": "StorefrontPostKycDocument",
        "x-sdk-operation-name": "create",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Creates a KYC document.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StorefrontKycDocument"
              }
            }
          },
          "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/StorefrontKycDocument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/kyc-documents/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront KYC documents"
        ],
        "summary": "Retrieve a KYC Document",
        "operationId": "StorefrontGetKycDocument",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves a KYC document with a specified ID.",
        "responses": {
          "200": {
            "description": "KYC document retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontKycDocument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "patch": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront KYC documents"
        ],
        "summary": "Update a KYC document",
        "operationId": "StorefrontPatchKycDocument",
        "x-sdk-operation-name": "update",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Updates a KYC document with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StorefrontKycDocument"
              }
            }
          },
          "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/StorefrontKycDocument"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/kyc-requests/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront KYC documents"
        ],
        "summary": "Retrieve a KYC request",
        "operationId": "StorefrontGetKycRequest",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves a KYC request with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "KYC request retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontKycRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/storefront/kyc-liveness-sessions": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront KYC documents"
        ],
        "summary": "Create a KYC liveness session",
        "operationId": "StorefrontPostKycLivenessSession",
        "x-sdk-operation-name": "create",
        "description": "Creates a KYC liveness session.",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/PostKycLivenessSession",
          "description": "KYC request resource.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "KYC liveness session 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/StorefrontKycLivenessSession"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/kyc-liveness-sessions/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront KYC documents"
        ],
        "summary": "Retrieve a KYC liveness session",
        "operationId": "StorefrontGetKycLivenessSession",
        "x-sdk-operation-name": "get",
        "description": "Retrieves a KYC liveness session with a specified ID.",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "responses": {
          "200": {
            "description": "KYC liveness session retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontKycLivenessSession"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/storefront/kyc-liveness-sessions/{id}/finish": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront KYC documents"
        ],
        "summary": "Finish KYC liveness session",
        "operationId": "StorefrontPostKycLivenessSessionFinish",
        "x-sdk-operation-name": "finish",
        "description": "Attempt to finalize a pending KYC liveness session.",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "responses": {
          "200": {
            "description": "KYC liveness session finalization attempt 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/StorefrontKycLivenessSession"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/login": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront account"
        ],
        "summary": "Create a session with username and password",
        "operationId": "StorefrontPostLogin",
        "x-sdk-operation-name": "login",
        "security": [
          {
            "PublishableApiKey": []
          }
        ],
        "description": "Creates a session with a specified username and password.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "username",
                  "password"
                ],
                "properties": {
                  "username": {
                    "description": "User's username.",
                    "type": "string"
                  },
                  "password": {
                    "description": "User's current password.",
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Logged into account.",
            "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/StorefrontCustomerJWT"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/logout": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront account"
        ],
        "summary": "Destroys the user's current session",
        "operationId": "StorefrontPostLogout",
        "x-sdk-operation-name": "logout",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Destroys the user's current session.",
        "responses": {
          "204": {
            "description": "Account 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"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/orders": {
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront orders"
        ],
        "summary": "Retrieve orders",
        "operationId": "StorefrontGetOrderCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "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/collectionExpand"
          }
        ],
        "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/StorefrontOrder"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/storefront/orders/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront orders"
        ],
        "summary": "Retrieve an order",
        "operationId": "StorefrontGetOrder",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "description": "Retrieves an order with a specified ID.",
        "responses": {
          "200": {
            "description": "Order retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontOrder"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "patch": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront orders"
        ],
        "summary": "Update an order",
        "operationId": "StorefrontPatchOrder",
        "x-sdk-operation-name": "update",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Updates an order with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PatchOrder"
        },
        "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/StorefrontOrder"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/orders/{id}/cancellation": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront orders"
        ],
        "summary": "Cancel an order",
        "operationId": "StorefrontPostOrderCancellation",
        "x-sdk-operation-name": "cancel",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Cancels an order with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PostOrderCancellation"
        },
        "responses": {
          "201": {
            "description": "Order 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/StorefrontOrder"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/orders/{id}/pause": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront orders"
        ],
        "summary": "Pause a subscription order",
        "operationId": "StorefrontPostOrderPause",
        "x-sdk-operation-name": "pause",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Pauses an order with a specified ID.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PostOrderPause"
        },
        "responses": {
          "201": {
            "description": "Order paused.",
            "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/StorefrontOrder"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/subscriptions/{id}/change-items": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront orders"
        ],
        "summary": "Change subscription items",
        "operationId": "StorefrontPostSubscriptionItemsChange",
        "x-sdk-operation-name": "changeItems",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Creates a quote for requested changes to items and quantities.\nThis operation applies the requested changes to the subscription when the quote is accepted.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostSubscriptionItemsChange"
              }
            }
          },
          "description": "Change items request.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Quote for requested changes to items and quantities is created and 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/StorefrontChangeQuote"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/subscription-reactivations": {
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront orders"
        ],
        "summary": "Reactivate a subscription",
        "operationId": "StorefrontPostSubscriptionReactivation",
        "x-sdk-operation-name": "reactivation",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Creates a quote for requested reactivation.\nThis operation applies the requested reactivation to the subscription when the quote invoice is paid.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostSubscriptionReactivation"
              }
            }
          },
          "description": "Change items request."
        },
        "responses": {
          "201": {
            "description": "Quote for requested reactivation is created and issued.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontReactivationQuote"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        }
      }
    },
    "/storefront/payment": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront purchases"
        ],
        "summary": "Perform a payment",
        "operationId": "StorefrontPostPayment",
        "x-sdk-operation-name": "payment",
        "security": [
          {
            "CustomerJWT": []
          },
          {
            "PublishableApiKey": []
          }
        ],
        "description": "Performs a payment for a transaction or an invoice.\n\nIf the customer's JSON Web Token (JWT) contains a `transactionId`, or `invoiceId` value,\nthese values are used instead of the JWT value.\nThe `transactionId` has a higher priority than the `invoiceId`.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PostPayment"
        },
        "responses": {
          "200": {
            "description": "Transaction created.",
            "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/StorefrontTransaction"
                }
              }
            }
          },
          "201": {
            "description": "Transaction 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/StorefrontTransaction"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/payment-instruments": {
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront payment instruments"
        ],
        "summary": "Retrieve payment instruments",
        "operationId": "StorefrontGetPaymentInstrumentCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "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"
          }
        ],
        "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/StorefrontPaymentInstrument"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront payment instruments"
        ],
        "summary": "Create a payment instrument",
        "operationId": "StorefrontPostPaymentInstrument",
        "x-sdk-operation-name": "create",
        "security": [
          {
            "CustomerJWT": []
          },
          {
            "PublishableApiKey": []
          }
        ],
        "description": "Creates a payment instrument.\n\nTo use this operation,\nyou must first create a payment token using [FramePay](https://www.rebilly.com/docs/dev-docs/framepay/),\nthen provide the token ID in this operation.",
        "requestBody": {
          "$ref": "#/components/requestBodies/StorefrontPostPaymentInstrument"
        },
        "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/StorefrontPaymentInstrument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/payment-instruments/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront payment instruments"
        ],
        "summary": "Retrieve a payment instrument",
        "operationId": "StorefrontGetPaymentInstrument",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves a payment instrument with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionLimit"
          },
          {
            "$ref": "#/components/parameters/collectionOffset"
          }
        ],
        "responses": {
          "200": {
            "description": "Payment instrument 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/StorefrontPaymentInstrument"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "patch": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront payment instruments"
        ],
        "summary": "Update payment instrument",
        "operationId": "StorefrontPatchPaymentInstrument",
        "x-sdk-operation-name": "update",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Updates the values of a payment instrument with a specified ID.\n\nUse the FramePay payment token ID to update values.\nFor more information, see [FramePay](https://www.rebilly.com/docs/dev-docs/framepay/).",
        "requestBody": {
          "$ref": "#/components/requestBodies/StorefrontPatchPaymentInstrument"
        },
        "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/StorefrontPaymentInstrument"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/payment-instruments/{id}/deactivation": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront payment instruments"
        ],
        "summary": "Deactivate a payment instrument",
        "operationId": "StorefrontPostPaymentInstrumentDeactivation",
        "x-sdk-operation-name": "deactivate",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "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/StorefrontPaymentInstrument"
                }
              }
            }
          },
          "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 paymentInstrument = await api.paymentInstruments.deactivate({id: 'id-to-deactivate'});\n\nconsole.log(paymentInstrument.fields.status);\n"
          }
        ]
      }
    },
    "/storefront/payment-instruments/{id}/setup": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront payment instruments"
        ],
        "summary": "Retrieve a payment instrument setup transaction",
        "operationId": "StorefrontGetPaymentInstrumentSetup",
        "x-sdk-operation-name": "getSetupTransaction",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves the latest setup transaction for a payment instrument with a specified ID.\n\nFor more information, see [Transactions](#Transactions).",
        "responses": {
          "200": {
            "description": "Setup transaction retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontTransaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront payment instruments"
        ],
        "summary": "Create a setup payment instrument transaction",
        "operationId": "StorefrontPostPaymentInstrumentSetup",
        "x-sdk-operation-name": "setup",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Creates a setup payment instrument transaction.\n\nThis operation makes the payment instrument available for further payments.\nTreat the response as a regular transaction.\nFor example, approval links must be followed until the transaction is completed.",
        "requestBody": {
          "$ref": "#/components/requestBodies/SetupPaymentInstrumentRequest"
        },
        "responses": {
          "201": {
            "description": "Setup 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/StorefrontTransaction"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/payout-requests": {
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront transactions"
        ],
        "summary": "Retrieve payout requests",
        "operationId": "StorefrontGetPayoutRequestCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves a list of payout requests.",
        "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 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/StorefrontPayoutRequest"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      },
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront transactions"
        ],
        "summary": "Create a payout request",
        "operationId": "StorefrontPostPayoutRequest",
        "x-sdk-operation-name": "create",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Creates a payout request.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PostPayoutRequest"
        },
        "responses": {
          "201": {
            "description": "Payout request created.",
            "headers": {
              "Location": {
                "$ref": "#/components/headers/Location"
              }
            },
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontPayoutRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          }
        }
      }
    },
    "/storefront/payout-requests/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront transactions"
        ],
        "summary": "Retrieve a payout request",
        "operationId": "StorefrontGetPayoutRequest",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves a payout request with a specified ID.",
        "responses": {
          "200": {
            "description": "Payout request retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontPayoutRequest"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "patch": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront transactions"
        ],
        "summary": "Update a payout request",
        "operationId": "StorefrontPatchPayoutRequest",
        "x-sdk-operation-name": "update",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Update a payout request with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "paymentInstrumentId"
                ],
                "properties": {
                  "paymentInstrumentId": {
                    "type": "string",
                    "description": "ID of the preferable payment instrument for the payout request.",
                    "maxLength": 50,
                    "example": "inst_0YVB8KPKNXCBR9EDX7JHSED75N"
                  }
                }
              }
            }
          }
        },
        "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/StorefrontPayoutRequest"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/plans": {
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront plans"
        ],
        "summary": "Retrieve a list of plans",
        "operationId": "StorefrontGetPlanCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "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"
          },
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "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/StorefrontPlan"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/storefront/plans/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront plans"
        ],
        "summary": "Retrieve a plan",
        "operationId": "StorefrontGetPlan",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves a plan with a specified ID.",
        "parameters": [
          {
            "$ref": "#/components/parameters/collectionExpand"
          }
        ],
        "responses": {
          "200": {
            "description": "Plan retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontPlan"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/storefront/products": {
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront products"
        ],
        "summary": "Retrieve products",
        "operationId": "StorefrontGetProductCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "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/StorefrontProduct"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/storefront/products/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront products"
        ],
        "summary": "Retrieve a product",
        "operationId": "StorefrontGetProduct",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves a product with a specified ID.",
        "responses": {
          "200": {
            "description": "Product retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontProduct"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/storefront/purchase": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront purchases"
        ],
        "summary": "Make a purchase",
        "operationId": "StorefrontPostPurchase",
        "x-sdk-operation-name": "purchase",
        "description": "Executes a purchase.\n\nA purchase can be completed both with and without authentication.\nPurchases that use a pre-created payment instrument must use authentication.\n\nTo preview the purchase before completing it,\nuse the [Purchase preview](./StorefrontPostPreviewPurchase) operation.",
        "security": [
          {
            "CustomerJWT": []
          },
          {
            "PublishableApiKey": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StorefrontPurchase"
              }
            }
          }
        },
        "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/StorefrontPurchase"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/preview-purchase": {
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront purchases"
        ],
        "summary": "Preview a purchase",
        "operationId": "StorefrontPostPreviewPurchase",
        "x-sdk-operation-name": "preview",
        "description": "Previews a purchase.\n\nUse this operation to preview a purchase before completing it.\n\nA purchase can be completed both with and without authentication.\nPurchases that use a pre-created payment instrument must use authentication.\n\n> **Warning:** The shipping aspect of this API is experimental and may change to support multiple shipping methods.",
        "security": [
          {
            "CustomerJWT": []
          },
          {
            "PublishableApiKey": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/StorefrontOrderPreview"
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Purchase 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/StorefrontOrderPreview"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/quotes/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront quotes"
        ],
        "summary": "Retrieve a quote",
        "operationId": "StorefrontGetQuote",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "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/StorefrontQuote"
                }
              },
              "application/pdf": {
                "schema": {
                  "type": "string",
                  "format": "binary"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/storefront/quotes/{id}/accept": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront quotes"
        ],
        "summary": "Accept a quote",
        "operationId": "StorefrontPostQuoteAcceptance",
        "x-sdk-operation-name": "accept",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Accepts an issued quote with 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/StorefrontQuote"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/quotes/{id}/reject": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront quotes"
        ],
        "summary": "Reject a quote",
        "operationId": "StorefrontPostQuoteRejection",
        "x-sdk-operation-name": "reject",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "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/StorefrontQuote"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/ready-to-pay": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront purchases"
        ],
        "summary": "Ready to pay",
        "operationId": "StorefrontPostReadyToPay",
        "x-sdk-operation-name": "readyToPay",
        "security": [
          {
            "CustomerJWT": []
          },
          {
            "PublishableApiKey": []
          }
        ],
        "description": "Retrieves available payment methods for a specific transaction or purchase.\n\nThe order in which the payment methods are displayed to the customer must 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/puteventrule) and [Gateway accounts](https://www.rebilly.com/catalog/all/gateway-accounts).\n\nIf this operation to pay is used with a transaction-scoped JSON Web Token (JWT), all fields are ignored except `riskMetadata`.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReadyToPay"
              }
            }
          }
        },
        "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": {
                  "$ref": "#/components/schemas/ReadyToPayMethods"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/ready-to-payout": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront purchases"
        ],
        "summary": "Ready to payout",
        "operationId": "StorefrontPostReadyToPayout",
        "x-sdk-operation-name": "readyToPayout",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves available payment methods for a specific payout amount and currency.\n\nThe order in which the payment methods are displayed to the customer must 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-payout` action on the `ready-to-payout-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 all matching rules at the end of the `ready-to-payout-requested` event in the rules engine,\nand include an empty `paymentMethods` property for the `adjust-ready-to-payout` action.\n\nFor more information, see [Update event rules](https://www.rebilly.com/catalog/all/rules/puteventrule/) and [Gateway accounts](https://www.rebilly.com/catalog/all/gateway-accounts).",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReadyToPayout"
              }
            }
          }
        },
        "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": {
                  "$ref": "#/components/schemas/ReadyToPayoutMethods"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/register": {
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront account"
        ],
        "summary": "Register account",
        "operationId": "StorefrontPostRegister",
        "x-sdk-operation-name": "register",
        "security": [
          {
            "PublishableApiKey": []
          }
        ],
        "description": "Register account.",
        "requestBody": {
          "$ref": "#/components/requestBodies/PostRegister"
        },
        "responses": {
          "201": {
            "description": "Account registered.",
            "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/StorefrontAccount"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "422": {
            "$ref": "#/components/responses/ValidationError"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/subscriptions": {
      "post": {
        "x-badges": [
          {
            "name": "Experimental"
          }
        ],
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront orders"
        ],
        "summary": "Create a subscription",
        "operationId": "StorefrontPostSubscription",
        "x-sdk-operation-name": "create",
        "description": "Creates a subscription order in a billing portal.",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PostSubscription"
              }
            }
          },
          "description": "Create an order request.",
          "required": true
        },
        "responses": {
          "201": {
            "description": "Subscription 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/StorefrontOrder"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/transactions": {
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront transactions"
        ],
        "summary": "Retrieve transactions",
        "operationId": "StorefrontGetTransactionCollection",
        "x-sdk-operation-name": "getAll",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieve 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"
          }
        ],
        "responses": {
          "200": {
            "description": "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/StorefrontTransaction"
                  }
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          }
        }
      }
    },
    "/storefront/transactions/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront transactions"
        ],
        "summary": "Retrieve a transaction",
        "operationId": "StorefrontGetTransaction",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves a transaction with a specified ID.",
        "responses": {
          "200": {
            "description": "Transaction retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontTransaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      }
    },
    "/storefront/transactions/{id}/dcc": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront transactions"
        ],
        "summary": "Retrieve a transaction DCC offer",
        "operationId": "StorefrontGetTransactionDccOffer",
        "x-sdk-operation-name": "getDcc",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves a transaction DCC offer with a specified ID.",
        "responses": {
          "200": {
            "description": "Transaction DCC offer retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StorefrontTransaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          }
        }
      },
      "patch": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront transactions"
        ],
        "summary": "Update a transaction DCC offer",
        "operationId": "StorefrontPatchTransactionDccOffer",
        "x-sdk-operation-name": "updateDcc",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Updates a transaction DCC offer with a specified ID.",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "required": [
                  "choice"
                ],
                "properties": {
                  "choice": {
                    "type": "string",
                    "description": "DCC offer choice.",
                    "enum": [
                      "selected",
                      "rejected"
                    ]
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Transaction DCC offer 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/StorefrontTransaction"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/transactions/{id}/{token}/continue": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "$ref": "#/components/parameters/token"
        }
      ],
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront transactions"
        ],
        "summary": "Finish a transaction KYC verification",
        "operationId": "StorefrontPostKycRequestContinue",
        "x-sdk-operation-name": "finishKyc",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Process a KYC interrupted transaction with a specified ID.\n\nUse this operation to process the transaction after all documents of the KYC request with a specified token have been uploaded.",
        "responses": {
          "200": {
            "description": "KYC verification finished.",
            "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/StorefrontTransaction"
                }
              }
            }
          },
          "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"
          }
        }
      }
    },
    "/storefront/transactions/{id}/{token}/bypass": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        },
        {
          "$ref": "#/components/parameters/token"
        }
      ],
      "post": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront transactions"
        ],
        "summary": "Skip a transaction KYC verification",
        "operationId": "StorefrontPostKycRequestBypass",
        "x-sdk-operation-name": "skipKyc",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Skips an optional KYC request with a specified token, for a transaction with a specified ID.\n\nUse this operation to skip a KYC request that has been marked as optional in a transaction flow, so that you can further process the transaction.",
        "responses": {
          "200": {
            "description": "KYC verification skipped.",
            "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/StorefrontTransaction"
                }
              }
            }
          },
          "401": {
            "$ref": "#/components/responses/Unauthorized"
          },
          "403": {
            "$ref": "#/components/responses/Forbidden"
          },
          "404": {
            "$ref": "#/components/responses/NotFound"
          },
          "429": {
            "$ref": "#/components/responses/TooManyRequests"
          }
        }
      }
    },
    "/storefront/websites/{id}": {
      "parameters": [
        {
          "$ref": "#/components/parameters/resourceId"
        }
      ],
      "get": {
        "x-products": [
          "Storefront"
        ],
        "tags": [
          "Storefront websites"
        ],
        "summary": "Retrieve a website",
        "operationId": "StorefrontGetWebsite",
        "x-sdk-operation-name": "get",
        "security": [
          {
            "CustomerJWT": []
          }
        ],
        "description": "Retrieves a website with a specified ID.\nUse this operation to find the website name, logo, or more.",
        "responses": {
          "200": {
            "description": "Website retrieved.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Website"
                }
              }
            }
          },
          "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": {
    "application-instance-disabled": {
      "post": {
        "summary": "Application instance disabled",
        "operationId": "application-instance-disabled",
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application owners"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ApplicationInstanceDisabled"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "application-instance-enabled": {
      "post": {
        "summary": "Application instance enabled",
        "operationId": "application-instance-enabled",
        "x-products": [
          "Users"
        ],
        "tags": [
          "Application owners"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/ApplicationInstanceEnabled"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "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."
          }
        }
      }
    },
    "balance-transaction-settled": {
      "post": {
        "summary": "Balance transaction settled",
        "operationId": "balance-transaction-settled",
        "tags": [
          "Balance transactions"
        ],
        "x-products": [
          "Users"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/BalanceTransactionSettled"
        },
        "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-downtime-ended": {
      "post": {
        "summary": "Gateway account downtime ended",
        "operationId": "gateway-account-downtime-ended",
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/GatewayAccountWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "gateway-account-downtime-started": {
      "post": {
        "summary": "Gateway account downtime started",
        "operationId": "gateway-account-downtime-started",
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/GatewayAccountWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "gateway-account-limit-reached": {
      "post": {
        "summary": "Gateway account limit reached",
        "operationId": "gateway-account-limit-reached",
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/GatewayAccountAndGatewayAccountLimit"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "gateway-account-onboarding-completed": {
      "post": {
        "summary": "Gateway account onboarding completed",
        "operationId": "gateway-account-onboarding-completed",
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/GatewayAccountWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "gateway-account-onboarding-failed": {
      "post": {
        "summary": "Gateway account onboarding failed",
        "operationId": "gateway-account-onboarding-failed",
        "x-products": [
          "Users"
        ],
        "tags": [
          "Gateway accounts"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/GatewayAccountWebhook"
        },
        "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."
          }
        }
      }
    },
    "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-partially-refunded": {
      "post": {
        "summary": "Transaction partially refunded",
        "operationId": "transaction-partially-refunded",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWithChildWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "transaction-refunded": {
      "post": {
        "summary": "Transaction refunded",
        "operationId": "transaction-refunded",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWithChildWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "transaction-voided": {
      "post": {
        "summary": "Transaction voided",
        "operationId": "transaction-voided",
        "x-products": [
          "Core"
        ],
        "tags": [
          "Transactions"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/TransactionWithChildWebhook"
        },
        "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."
          }
        }
      }
    },
    "data-export-completed": {
      "post": {
        "summary": "Data export completed",
        "operationId": "data-export-completed",
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Data exports"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/DataExportWebhook"
        },
        "responses": {
          "2xx": {
            "description": "Returns any 2xx status to indicate that data is received."
          }
        }
      }
    },
    "data-export-failed": {
      "post": {
        "summary": "Data export failed",
        "operationId": "data-export-failed",
        "x-products": [
          "Reports"
        ],
        "tags": [
          "Data exports"
        ],
        "requestBody": {
          "$ref": "#/components/requestBodies/DataExportWebhook"
        },
        "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."
          }
        }
      }
    }
  }
}