openapi: 3.1.0
info:
  version: latest
  title: Core APIs
  contact:
    name: Rebilly API Support
    url: https://www.rebilly.com/contact/
    email: integrations@rebilly.com
  license:
    name: Rebilly
    url: https://www.rebilly.com/api-license/
  termsOfService: https://www.rebilly.com/terms-of-use/
  x-logo:
    url: https://rebilly-core.redoc.ly/rb_apiLogo.svg
    backgroundColor: '#0044d4'
  description: >
    # Introduction

    [comment]: <> (x-product-description-placeholder)

    The Rebilly API is built on HTTP and is RESTful.

    It has predictable resource URLs and returns HTTP response codes to indicate
    errors.

    It also accepts and returns JSON in the HTTP body.

    Use your favorite HTTP/REST library in your programming language when using
    this API,

    or use one of the Rebilly SDKs,

    which are available in [PHP](https://github.com/Rebilly/rebilly-php) and
    [JavaScript](https://github.com/Rebilly/rebilly-js-sdk).


    Every 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.

    This API reference documentation contains the most commonly integrated
    resources.


    # Authentication


    This topic describes the different forms of authentication that are
    available in the Rebilly API, and how to use them.


    Rebilly offers four forms of authentication: secret key, publishable key,
    JSON Web Tokens, and public signature key.


    - Secret API key: Use to make requests from the server side. Never share
    these keys. Keep them guarded and secure.

    - Publishable API key: Use in your client-side code to tokenize payment
    information.

    - JWT: Use to make short-life tokens that expire after a set period of time.


    <!-- ReDoc-Inject: <security-definitions> -->


    ## Manage API keys


    To create or manage API keys, select one of the following:


    - Use the Rebilly UI: see [Manage API
    keys](https://www.rebilly.com/docs/dev-docs/api-keys/#manage-api-keys)

    - Use the Rebilly API: see the [API key
    operations](https://www.rebilly.com/catalog/all/api-keys).


    For more information on API keys, see [API
    keys](https://www.rebilly.com/docs/concepts-and-features/concept/api-keys).


    # Errors

    Rebilly 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. As with any API responses, your client must be
    prepared to gracefully handle additional members of the response.


    # SDKs


    Rebilly provides a JavaScript SDK and a PHP SDK to help interact with the
    Rebilly API.

    However, no SDK is required to use the API.


    Rebilly also provides
    [FramePay](https://www.rebilly.com/docs/developer-docs/framepay/),

    a client-side iFrame-based solution, to help create payment tokens while
    minimizing PCI DSS compliance burdens

    and maximizing your customization ability.

    [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).


    ## JavaScript SDK


    For installation and usage instructions, see
    [SDKs](https://www.rebilly.com/docs/dev-docs/sdks/).

    All JavaScript SDK code examples are included in the API reference
    documentation.


    ## PHP SDK


    For installation and usage instructions, see
    [SDKs](https://www.rebilly.com/docs/dev-docs/sdks/).

    All SDK code examples are included in the API reference documentation.

    To use them, you must configure the `$client` as follows:


    ```php

    $client = new Rebilly\Client([
        'apiKey' => 'YourApiKeyHere',
        'baseUrl' => 'https://api.rebilly.com',
    ]);

    ```


    # Get started


    The full [Rebilly API](https://www.rebilly.com/catalog/all/) has over 500
    operations.

    This is likely more than you may need to implement your use cases.

    If you would like to implement a particular use case,

    [contact Rebilly](https://www.rebilly.com/support/) for guidance and
    feedback on the best API operations to use for the task.


    To integrate Rebilly, and learn about related resources and concepts,

    see [Get started](https://www.rebilly.com/docs/dev-docs#get-started).


    To create and manage API keys, see [API
    keys](https://www.rebilly.com/docs/dev-docs/api-keys/).


    # Rate limits


    Rebilly enforces rate limits on the API to ensure that no single
    organization consumes too many resources.

    Rate limits are applied to the organization, and not to the API key.

    In sandbox environment, rate limits are enforced for non-GET endpoints and
    are set at 3000 requests per 10 minutes.

    You can find the exact number of consumed requests in the
    `X-RateLimit-Limit` and `X-RateLimit-Remaining` headers in the response.

    If the rate limit is exceeded, the API returns a `429 Too Many Requests`
    response

    and a `X-RateLimit-Retry-After` header that includes a UTC timestamp of when
    the rate limit resets.
security:
  - SecretApiKey: []
  - JWT: []
servers:
  - url: https://api-sandbox.rebilly.com/organizations/{organizationId}
    description: Sandbox server
    variables:
      organizationId:
        default: '{organizationId}'
        description: >-
          Unique organization identifier.

          An organization is an entity that represents a company.

          For 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.

          An organization is an entity that represents a company.

          For 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.


        Usage 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.

        For more information, see [Retrieve an application
        instance](https://www.rebilly.com/catalog/all/application-owners/getapplicationinstancebyorganization/).


        Usage format: `Bearer <JWT>`.
      type: http
      scheme: bearer
      bearerFormat: JWT
    PublishableApiKey:
      description: >-
        This authentication method is applicable to specific operations.


        To 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.
        Keep them guarded and secure.

        Use your secret API key only to make requests from the server side.
        To 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,

        see [Create a session with username and
        password](https://www.rebilly.com/catalog/all/storefront-account/storefrontpostlogin).


        Usage format: `Bearer <JWT>`.
      type: http
      scheme: bearer
      bearerFormat: JWT
  parameters:
    collectionLimit:
      name: limit
      in: query
      description: Limits the number of collection items to be returned.
      schema:
        type: integer
        minimum: 0
        maximum: 1000
    collectionOffset:
      name: offset
      in: query
      description: >-
        Specifies the starting point within the collection of items to be
        returned.
      schema:
        type: integer
        minimum: 0
        maximum: 1000
    collectionSort:
      name: sort
      in: query
      description: >-
        Sorts and orders the collection of items. To sort in descending

        order, 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: >-
        Filters the collection items. This field requires

        a special format. Use `,` for multiple allowed values.  Use `;` for
        multiple fields.


        For more information, see

        [Using filter with
        collections](https://www.rebilly.com/docs/dev-docs/search-filters).
      schema:
        type: string
    collectionQuery:
      name: q
      in: query
      description: Use this field to perform a partial search of text fields.
      schema:
        type: string
    resourceId:
      name: id
      in: path
      description: ID of the resource.
      required: true
      schema:
        type: string
        maxLength: 50
        pattern: ^[@~\-\.\w]+$
    collectionExpand:
      name: expand
      in: query
      description: >-
        Expands a request to include embedded objects within the `_embedded`

        property of the response. This field accepts a comma-separated list of
        objects.


        For more information, see

        [Expand to include embedded
        objects](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.

        The 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
          - subscriptions
          - transactions
          - websites
          - products
          - plans
          - gateway-accounts
          - deposit-requests
    externalIdentifierResource:
      name: resource
      in: path
      description: Type of the 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 service.
      required: true
      schema:
        type: string
        enum:
          - quickbooks-online
    imageSize:
      name: imageSize
      in: query
      description: >-
        Resize image to specified size.

        Supports any sizes from 10x10 to 2000x2000, in the following format:
        `{width}x{height}`.

        If the value is invalid, the image returns the original size.

        This 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: ID of the application.
      required: true
      schema:
        type: string
        maxLength: 50
        pattern: ^[@~\-\.\w]+$
    organizationId:
      name: organizationId
      in: path
      description: >-
        Unique organization identifier.

        An organization is an entity that represents a company.

        For 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
    journalRecordId:
      name: journalRecordId
      in: path
      description: ID of the journal record.
      required: true
      schema:
        type: string
        maxLength: 50
        pattern: ^[@~\-\.\w]+$
    subscriptionExpand:
      name: expand
      in: query
      description: >-
        Expand a response to receive a full related object in the `_embedded`
        path.


        To expand multiple objects, use a comma-separated list.

        Example: `expand=recentInvoice,initialInvoice`.


        Available arguments are:

          - `customer`
          - `leadSource`
          - `website`
          - `shippingRate`
          - `initialInvoice`
          - `recentInvoice`
          - `upcomingInvoice`
          - `paymentInstrument`

        For more information, see [Expand to include embedded
        objects](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.


        To retrieve the full related object instead of the ID, expand the
        response.

        For more information, see [Expand to include embedded
        objects](#section/Expand-to-include-embedded-objects).
      schema:
        type: integer
        minimum: 1
    integrationLabel:
      name: label
      in: path
      description: Label of the integration.
      required: true
      schema:
        type: string
        enum:
          - google-sheets
          - keap-infusionsoft
          - intuit-quickbooks
    storefrontCustomFieldResource:
      name: resource
      in: path
      description: Type of resource schema.
      required: true
      schema:
        type: string
        enum:
          - customers
          - payment-instruments
          - subscriptions
          - transactions
  headers:
    Pagination-Total:
      description: Total number of items.
      schema:
        type: integer
      example: 332
    Pagination-Limit:
      description: Maximum number of items per page.
      schema:
        type: integer
      example: 100
    Pagination-Offset:
      description: |-
        Specifies the starting point within the
        collection of resource results. For example, a request with
        `limit=20` retrieves and displays the first 20 results on a page. A
        following request with `limit=20` and `offset=20`, retrieves the next
        page 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.

        For 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. 

        For example, in the sandbox environment, rate limits for non-GET
        endpoints are set at 3000 requests per 10 minutes.
      schema:
        type: integer
      example: 3600
    X-RateLimit-Retry-After:
      description: >-
        UTC timestamp after which the rate limit resets and the request can be
        retried.
      schema:
        type: integer
      example: 1713187500
  schemas:
    CreatedTime:
      type: string
      description: Date and time which 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 which updates automatically when the resource is updated.
      format: date-time
      readOnly: true
      x-sortable: true
      x-label: Last Update Time
    ResourceId:
      type: string
      description: Unique resource ID.
      maxLength: 50
      example: 4f6cf35x-2c4y-483z-a0a9-158621f77a21
    SelfLink:
      type: array
      description: Related links.
      readOnly: true
      items:
        type: object
        properties:
          href:
            description: Link URL.
            type: string
          rel:
            description: Type of link.
            type: string
            enum:
              - self
    Tag:
      type: object
      description: >-
        Use tags to organize and categorize customers or KYC documents based on
        keywords.

        For 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.
            Tag names are not case-sensitive.
          type: string
          maxLength: 255
          pattern: ^[@~\-\.\w\s]+$
          example: New
        type:
          description: >-
            Type of tag.

            Tags of a specific type can only be assigned to corresponding entity
            types.

            For 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'
    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. 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. This content varies per list.
        _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
        reviewerName:
          type:
            - string
            - 'null'
          description: First and last name of the person who reviewed the AML check.
        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: ^[\w\s\-\/\p{L}\p{M},.#;:()'&]+$
                  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: ^[\w\s\-\/\p{L}\p{M},.#;:()'&]+$
                  maxLength: 60
                city:
                  description: Customer's city of residence at the time of the AML check.
                  type:
                    - string
                    - 'null'
                  pattern: ^[\w\s\-\p{L}\p{M},.']+$
                  maxLength: 45
                  example: Austin
                region:
                  description: Customer's region of residence at the time of the AML check.
                  type:
                    - string
                    - 'null'
                  pattern: ^[\w\s\-\/\p{L}\p{M},.#;:()']+$
                  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
            tags:
              description: List of tags that have been assigned to the customer.
              type: array
              items:
                $ref: '#/components/schemas/Tag'
            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'
        _links:
          type: array
          description: Related links.
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - customer
    BaseProblem:
      type: object
      additionalProperties: true
      minProperties: 1
      description: >-
        RFC-7807 [problem details](https://tools.ietf.org/html/rfc7807) JSON
        object.
      properties:
        type:
          type: string
          description: >-
            Problem type in the form of a
            [URI](https://tools.ietf.org/html/rfc3986) reference.

            It should provide human-readable documentation for the problem type.

            When 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.

            Other 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.

            It may or may not yield further information if dereferenced.
    Unauthorized:
      allOf:
        - title: Unauthorized
        - type: object
          properties:
            status:
              type: integer
              description: HTTP status code.
              minimum: 401
              maximum: 401
        - $ref: '#/components/schemas/BaseProblem'
    Forbidden:
      allOf:
        - title: Forbidden
        - type: object
          properties:
            status:
              type: integer
              description: HTTP status code.
              minimum: 403
              maximum: 403
        - $ref: '#/components/schemas/BaseProblem'
    NotFound:
      allOf:
        - type: object
          properties:
            status:
              type: integer
              description: HTTP status code.
              minimum: 404
              maximum: 404
        - $ref: '#/components/schemas/BaseProblem'
    ValidationError:
      allOf:
        - title: Validation error
        - type: object
          properties:
            status:
              type: integer
              description: HTTP status code.
              minimum: 422
              maximum: 422
        - $ref: '#/components/schemas/BaseProblem'
        - type: object
          properties:
            invalidFields:
              description: Invalid field details.
              type: array
              items:
                type: object
                properties:
                  field:
                    type: string
                    description: |-
                      Name of the field.
                      Dot notation is used for nested object field names.
                  message:
                    description: Message field.
                    type: string
              example:
                - field: field1
                  message: field1 is invalid
                - field: subObject.field2
                  message: field2 is invalid
                - field: subObject.field2
                  message: another error in the field2
    TooManyRequests:
      type: object
      additionalProperties: true
      minProperties: 1
      description: >-
        RFC-7807 [problem details](https://tools.ietf.org/html/rfc7807) JSON
        object.
      properties:
        type:
          type: string
          description: >-
            Problem type in the form of a
            [URI](https://tools.ietf.org/html/rfc3986) reference.

            It should provide human-readable documentation for the problem type.

            When 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.

            Other 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.

            It may or may not yield further information if dereferenced.
    AmlCheckReview:
      type: object
      description: AML check review.
      properties:
        tag:
          type: string
          description: AML-related customer tag.
          enum:
            - aml-match-confirmed
            - aml-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. \
            `p0` is critical priority level, and `p3` is low priority level.
          properties:
            pep:
              type: object
              description: Priorities for the `pep` source type.
              properties:
                veryStrong:
                  $ref: '#/components/schemas/AmlPriority'
                strong:
                  $ref: '#/components/schemas/AmlPriority'
                medium:
                  $ref: '#/components/schemas/AmlPriority'
                weak:
                  $ref: '#/components/schemas/AmlPriority'
            enforcements:
              type: object
              description: Priorities for the `enforcement` source type.
              properties:
                veryStrong:
                  $ref: '#/components/schemas/AmlPriority'
                strong:
                  $ref: '#/components/schemas/AmlPriority'
                medium:
                  $ref: '#/components/schemas/AmlPriority'
                weak:
                  $ref: '#/components/schemas/AmlPriority'
            stateOwnedEnterprise:
              type: object
              description: Priorities for the `state-owned-enterprise` source type.
              properties:
                veryStrong:
                  $ref: '#/components/schemas/AmlPriority'
                strong:
                  $ref: '#/components/schemas/AmlPriority'
                medium:
                  $ref: '#/components/schemas/AmlPriority'
                weak:
                  $ref: '#/components/schemas/AmlPriority'
            sanctions:
              type: object
              description: Priorities for the `sanctions` source type.
              properties:
                veryStrong:
                  $ref: '#/components/schemas/AmlPriority'
                strong:
                  $ref: '#/components/schemas/AmlPriority'
                medium:
                  $ref: '#/components/schemas/AmlPriority'
                weak:
                  $ref: '#/components/schemas/AmlPriority'
            adverseMedia:
              type: object
              description: Priorities for the `adverse-media` source type.
              properties:
                veryStrong:
                  $ref: '#/components/schemas/AmlPriority'
                strong:
                  $ref: '#/components/schemas/AmlPriority'
                medium:
                  $ref: '#/components/schemas/AmlPriority'
                weak:
                  $ref: '#/components/schemas/AmlPriority'
    Attachment:
      type: object
      required:
        - fileId
        - relatedId
        - relatedType
      properties:
        id:
          type: string
          readOnly: true
          description: ID of the attachment.
          maxLength: 50
          example: att_0YV7J787J0DW0918MQQMDHWA7M
        fileId:
          type: string
          description: ID of the linked file object.
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        relatedType:
          description: Linked object type.
          type: string
          enum:
            - customer
            - customer-timeline-comment
            - customer-edd-timeline-comment
            - dispute
            - gateway-timeline-comment
            - invoice
            - invoice-timeline-comment
            - order-timeline-comment
            - organization
            - payment
            - plan
            - product
            - subscription
            - transaction
            - transaction-timeline-comment
        relatedId:
          description: ID of the linked object.
          type: string
        name:
          description: Name of original attachment.
          type: string
        description:
          description: Description of the attachment.
          type: string
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - file
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            file:
              type: object
    Conflict:
      allOf:
        - title: Conflict
        - type: object
          properties:
            status:
              type: integer
              description: HTTP status code.
              minimum: 409
              maximum: 409
        - $ref: '#/components/schemas/BaseProblem'
    AuthenticationOptions:
      type: object
      properties:
        passwordPattern:
          description: Allowed password pattern.
          type:
            - string
            - 'null'
          example: /^[0-9]+$/
        credentialTtl:
          description: Default credential lifetime, in seconds.
          type: integer
        authTokenTtl:
          description: Default auth-token lifetime, in seconds.
          type: integer
        resetTokenTtl:
          description: Default reset-token lifetime, in seconds.
          type: integer
        otpRequired:
          description: >-
            Specifies if a One-Time Password (OTP) is required to exchange a
            token.
          type: boolean
        _links:
          $ref: '#/components/schemas/SelfLink'
    CustomerId:
      type: string
      description: ID of the customer resource.
      maxLength: 50
      example: cus_0YV7DDSDD1C8DA64KHH2W33CPF
      x-basic: true
    AuthenticationTokenResponse:
      type: object
      title: Authentication token
      required:
        - username
      properties:
        username:
          description: >-
            Username of the customer who is associated with the authentication
            token.
          type: string
        customerId:
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/CustomerId'
        token:
          description: ID of the authentication token.
          type: string
          readOnly: true
        otpRequired:
          description: >-
            Specifies if a One-Time Password (OTP) is required to exchange the
            authentication token.
          type: boolean
        credentialId:
          description: ID of the user associated with the authentication token.
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        expiredTime:
          description: Date and time when the token expired.
          type:
            - string
            - 'null'
          format: date-time
        _links:
          $ref: '#/components/schemas/SelfLink'
    AuthenticationTokenPasswordMode:
      type: object
      required:
        - username
        - password
      properties:
        username:
          description: Username associated with the authentication token.
          type: string
        password:
          description: Password associated with the authentication token.
          type: string
          format: password
          writeOnly: true
        mode:
          type: string
          description: >-
            Specifies the authentication verification method.

            The `password` token requires the user to enter a password to log
            in.

            The `passwordless` token, requires a secret API key to log in.

            To 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.

            The `password` token requires the user to enter a password to log
            in.

            The `passwordless` token, requires a secret API key to log in.

            To obtain an API key, see [Manage API
            keys](https://www.rebilly.com/docs/dev-docs/api-keys/#manage-api-keys).
          writeOnly: true
          enum:
            - passwordless
        token:
          description: ID of the authentication token.
          type: string
          readOnly: true
        otpRequired:
          description: >-
            Specifies if a One-Time Password (OTP) is required to exchange the
            authentication token.
          type: boolean
        credentialId:
          description: ID of the user associated with the authentication token.
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        expiredTime:
          description: Date and time when the token expired.
          type: string
          format: date-time
        _links:
          $ref: '#/components/schemas/SelfLink'
    AuthenticationToken:
      type: object
      discriminator:
        propertyName: mode
        mapping:
          password: '#/components/schemas/AuthenticationTokenPasswordMode'
          passwordless: '#/components/schemas/AuthenticationTokenPasswordlessMode'
      oneOf:
        - $ref: '#/components/schemas/AuthenticationTokenPasswordMode'
        - $ref: '#/components/schemas/AuthenticationTokenPasswordlessMode'
    ApiKeyScope:
      type: object
      properties:
        organizationId:
          description: Array of account IDs.
          type: array
          items:
            $ref: '#/components/schemas/ResourceId'
        productId:
          description: Array of product IDs.
          type: array
          items:
            type: string
            description: Unique resource ID.
            maxLength: 50
            example: prod_0YV7DES3WPC5J8JD8QTVNZBZNZ
        planId:
          description: Array of plan IDs.
          type: array
          items:
            type: string
            description: Unique resource ID.
            maxLength: 50
            example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
        customFieldName:
          description: Array of custom field names.
          type: array
          items:
            type: string
            maxLength: 60
            pattern: ^[\w-]+$
      example:
        organizationId:
          - organizationId-id-1
    AclPermissions:
      type: array
      items:
        type: string
        format: operationId
      example:
        - PostFile
        - StorefrontGetAccount
        - StorefrontGetWebsite
        - StorefrontGetKycDocumentCollection
        - StorefrontGetKycDocument
        - StorefrontPostKycDocument
    Acl:
      type: array
      description: Access Control List (ACL) information.
      items:
        type: object
        required:
          - scope
          - permissions
        properties:
          scope:
            description: Scope of the API key.
            $ref: '#/components/schemas/ApiKeyScope'
          permissions:
            description: >-
              If you are creating a restricted API key, use this field to
              specify individual permissions.

              Use 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 whether to invalidate a token after an exchange is
            performed.
          type: boolean
          default: true
          example: true
          writeOnly: true
        oneTimePassword:
          description: >-
            One time password that sent by email. This 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.
            The 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
        redemption. For example, use this restriction to configure a coupon
        that can only be applied to the first subscription renewal of a
        particular 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
    CouponRestrictionMinimumOrderAmount:
      type: object
      description: |-
        Specifies a minimum order amount for a coupon application. For
        example, if the restriction amount is $20, the coupon is only
        applied 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: integer
          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.


            > **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'
          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'
      anyOf:
        - $ref: '#/components/schemas/CouponRestrictionDiscountPerRedemption'
        - $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
        customer. For example, use this restriction to limit the number of
        redemptions 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.

        These promotions incentivize new customers to buy and also reward
        existing customers.

        This restriction type enables you to add discounted plans to an invoice
        when a certain quantity of other plans are purchased.

        For 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.
          minItems: 1
          items:
            type: object
            required:
              - planId
              - quantity
            properties:
              planId:
                type: string
                description: Plan ID of the item being purchased.
                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.
          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.
                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.

            For 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: Determines the behavior for checking customer tags.
          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.

        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.
      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'
          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'
      anyOf:
        - $ref: '#/components/schemas/CouponRestrictionDiscountPerRedemption'
        - $ref: '#/components/schemas/CouponRestrictionExclusiveApplication'
        - $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. This 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.
          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. Use this field to provide an invoice
            discount item description.


            If this field is empty, the invoice discount item description uses
            the related coupon ID, in the following format:

            `Coupon "COUPON-ID"`.
        issuedTime:
          description: |-
            Date and time when the coupon is issued.
            This 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.

            Use the revision number when analyzing webhook data to
            determine if a change should take precedence over the current
            representation.
          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.

            This value must be greater than the `issuedTime` value.

            If 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.

            It 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.

                It should provide human-readable documentation for the problem
                type.

                When 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. Custom field type value cannot be changed.


            Array of strings with up to 255 characters. Maximum size is 1000
            elements.
          type: string
          enum:
            - array
        description:
          description: Description of the custom field.
          type:
            - string
            - 'null'
        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 whether this value is required.

                This 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. Custom field type value cannot be changed.

            Specifies a `true` or `false` value.
          type: string
          enum:
            - boolean
        description:
          description: Description of the custom field.
          type:
            - string
            - 'null'
        additionalSchema:
          type:
            - object
            - 'null'
          description: Additional schema which adds additional values constrains.
          properties:
            required:
              description: Specifies whether 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. Custom field type value cannot be changed.


            String 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'
        additionalSchema:
          type:
            - object
            - 'null'
          description: Additional schema which adds additional values constrains.
          properties:
            required:
              description: Specifies whether 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. Custom field type value cannot be changed.


            String 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'
        additionalSchema:
          type:
            - object
            - 'null'
          description: Additional schema which adds additional values constrains.
          properties:
            required:
              description: Specifies whether 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. Custom field type value cannot be changed.

            Cardinal value of between `-2^31` and `2^31-1`.
          type: string
          enum:
            - integer
        description:
          description: Description of the custom field.
          type:
            - string
            - 'null'
        additionalSchema:
          type:
            - object
            - 'null'
          description: Additional schema which adds additional values constrains.
          properties:
            minimum:
              description: |-
                Minimum allowed integer.
                This value can be combined with the `maximum` parameter.
              type: integer
            maximum:
              description: |-
                Maximum allowed integer.
                This value can be combined with the `minimum` parameter.
              type: integer
            required:
              description: Specifies whether 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. Custom field type value cannot be changed.


            Float 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'
        additionalSchema:
          type:
            - object
            - 'null'
          description: Additional schema which adds additional values constrains.
          properties:
            minimum:
              description: |-
                Minimum allowed number.
                This value can be combined with the `maximum` parameter.
              type: number
              format: double
            maximum:
              description: |-
                Maximum allowed number.
                This value can be combined with the `minimum` parameter.
              type: number
              format: double
            required:
              description: Specifies whether 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. Custom field type value cannot be changed.

            Regular string of up to 255 characters.
          type: string
          enum:
            - string
        description:
          description: Description of the custom field.
          type:
            - string
            - 'null'
        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 .
                A maximum length of 4000 characters can be configured.
                By 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 whether 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. Custom field type value cannot be changed.

            A map of 3-letter currency, code, and amount.
            Example: `{"currency": "EUR", "amount": 25.30}`.
          type: string
          enum:
            - monetary
        description:
          description: Description of the custom field.
          type:
            - string
            - 'null'
        additionalSchema:
          type:
            - object
            - 'null'
          description: Additional schema which adds additional values constrains.
          properties:
            required:
              description: Specifies whether 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.

        A website is where an organization obtains a customer.

        For 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
    PaymentMethod:
      type: string
      description: Payment method.
      enum:
        - payment-card
        - ach
        - cash
        - check
        - paypal
        - AdvCash
        - 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
        - Cleo
        - CODVoucher
        - Conekta-oxxo
        - Conekta-spei
        - cryptocurrency
        - Cupon-de-pagos
        - CyberSource
        - Dimoco-pay-smart
        - Directa24Card
        - domestic-cards
        - Efecty
        - echeck
        - ecoPayz
        - ecoVoucher
        - EPS
        - ePay.bg
        - Ethereum
        - e-wallet
        - ezyEFT
        - eZeeWallet
        - FasterPay
        - Flexepin
        - Giropay
        - Google Pay
        - Gpaysafe
        - iDebit
        - iDEAL
        - ING-homepay
        - INOVAPAY-pin
        - INOVAPAY-wallet
        - InstaDebit
        - InstantPayments
        - instant-bank-transfer
        - Interac-online
        - Interac-eTransfer
        - Interac-express-connect
        - Interac
        - invoice
        - iWallet
        - Jeton
        - JetonCash
        - jpay
        - KakaoPay
        - Khelocard
        - Klarna
        - KNOT
        - Litecoin
        - loonie
        - LPG-online
        - LPG-payment-card
        - Matrix
        - MaxiCash
        - Megafon
        - MercadoPago
        - MiFinity-eWallet
        - miscellaneous
        - MobilePay
        - Multibanco
        - Bancontact
        - Bancontact-mobile
        - MTS
        - MuchBetter
        - MyFatoorah
        - Neosurf
        - Netbanking
        - Neteller
        - Nordea-Solo
        - NordikCoin
        - OchaPay
        - online-bank-transfer
        - Onlineueberweisen
        - oriental-wallet
        - OXXO
        - P24
        - Pagadito
        - PagoEffectivo
        - Pagsmile-lottery
        - Pagsmile-deposit-express
        - PayCash
        - Payco
        - Payeer
        - PaymentAsia-crypto
        - Paysafecard
        - PayTabs
        - Pay4Fun
        - Paynote
        - Paymero
        - Paymero-QR
        - PayU
        - PayULatam
        - Perfect-money
        - Piastrix
        - PIX
        - PinPay
        - phone
        - PhonePe
        - POLi
        - PostFinance-card
        - PostFinance-e-finance
        - QIWI
        - QPay
        - QQPay
        - rapyd-checkout
        - rebilly-hosted-payment-form
        - Resurs
        - 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
        - voucher
        - voucher-2
        - voucher-3
        - voucher-4
        - Wallet88
        - Webmoney
        - Webpay
        - Webpay-2
        - Webpay Card
        - WeChat Pay
        - XPay-P2P
        - XPay-QR
        - Yandex-money
        - Zotapay
        - Zimpler
    VaultedInstrument:
      title: Vaulted payment instrument
      description: >-
        Vaulted payment instrument.


        To use this payment instrument for automatic subscription renewals,

        and for transactions when no specific payment instrument is provided by
        the user,

        set this as the default payment instrument.
      required:
        - method
        - paymentInstrumentId
      properties:
        method:
          description: >-
            Payment method supported vault.

            For more information, see [Payment
            instrument](https://www.rebilly.com/catalog/all/payment-instruments).
          type: string
          enum:
            - payment-card
            - ach
            - paypal
          allOf:
            - $ref: '#/components/schemas/PaymentMethod'
        paymentInstrumentId:
          type: string
          description: ID of the payment instrument.
          maxLength: 50
          example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
    AlternativePaymentInstrument:
      title: Alternative instrument
      description: >-
        Alternative payment method instrument.


        To use this payment instrument for automatic subscription renewals,

        and for transactions when no specific payment instrument is provided by
        the user,

        set this as the default payment instrument.
      type: object
      required:
        - method
      properties:
        method:
          $ref: '#/components/schemas/PaymentMethod'
        paymentInstrumentId:
          type: string
          description: ID of the payment instrument.
          maxLength: 50
          example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
    CashInstrument:
      title: Cash
      description: >-
        Cash payment instrument object.


        To use this payment instrument for automatic subscription renewals,

        and for transactions when no specific payment instrument is provided by
        the user,

        set 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.


        To use this payment instrument for automatic subscription renewals,

        and for transactions when no specific payment instrument is provided by
        the user,

        set 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.

        For 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: ^[\w\s\-\p{L}\p{M},.']+$
          maxLength: 45
          example: Benjamin
        lastName:
          description: Contact's last name.
          type:
            - string
            - 'null'
          pattern: ^[\w\s\-\p{L}\p{M},.']+$
          maxLength: 45
          example: Franklin
        organization:
          description: Contact's organization.
          type:
            - string
            - 'null'
          pattern: ^[\w\s\-\p{L}\p{M},.'&]+$
          maxLength: 255
          example: Rebilly
        address:
          description: First line of the contact's street address.
          type:
            - string
            - 'null'
          pattern: ^[\w\s\-\/\p{L}\p{M},.#;:()'&]+$
          maxLength: 60
          example: 36 Craven St
        address2:
          description: Second line of the contact's street address.
          type:
            - string
            - 'null'
          pattern: ^[\w\s\-\/\p{L}\p{M},.#;:()'&]+$
          maxLength: 60
        city:
          description: Contact's city of residence.
          type:
            - string
            - 'null'
          pattern: ^[\w\s\-\p{L}\p{M},.']+$
          maxLength: 45
          example: Austin
        region:
          description: Contact's region of residence.
          type:
            - string
            - 'null'
          pattern: ^[\w\s\-\/\p{L}\p{M},.#;:()']+$
          maxLength: 45
          example: Texas
        country:
          description: >-
            Contact's country of residence in ISO 3166 alpha-2 country code.

            For 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: ^[\w\s\-\/\p{L}\p{M},.#;:()']+$
          maxLength: 255
          example: CEO
        hash:
          description: Use 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.


        This 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 approved payment amount in 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.

        An organization is an entity that represents a company.

        For 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
    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.

            If supplied, the token is converted into a payment instrument and
            set as the `defaultPaymentInstrument` value.

            If both are supplied, the value of this property overrides the
            `defaultPaymentInstrument` value.

            The token expires after first use.
        defaultPaymentInstrument:
          anyOf:
            - $ref: '#/components/schemas/VaultedInstrument'
            - $ref: '#/components/schemas/AlternativePaymentInstrument'
            - $ref: '#/components/schemas/CashInstrument'
            - $ref: '#/components/schemas/CheckInstrument'
            - type: '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.
          readOnly: true
          type: integer
        lastPaymentTime:
          x-label: Last Payment
          x-sortable: true
          x-basic: true
          description: Time and date of the customer's last approved payment.
          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.

            This value is auto-incrementing.

            If this value is `0`, the record relates to a lead.

            A lead is a customer who has not made a payment yet.

            If 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.


            Use this value when analyzing webhook data to determine if a change
            must take precedence over the current representation.
          type: integer
          readOnly: true
        isEddRequired:
          description: >-
            Specifies if Enhanced Due Diligence (EDD) is enabled for this
            customer.

            For more information, see [Enhanced Due
            Diligence](https://www.rebilly.com/docs/kyc-and-aml/edd/).
          type: boolean
          default: false
        hasFulfilledKyc:
          description: >-
            Specifies if the customer has accepted and reviewed identity and
            address documents, or an accepted credit file document.
          type: boolean
          readOnly: true
        organizationId:
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/OrganizationId'
        locale:
          type:
            - string
            - 'null'
          description: >-
            Language locale identifier in [RFC
            5646](https://tools.ietf.org/html/rfc5646) format.
          example: fr-FR
          default: null
        taxNumbers:
          type:
            - array
            - 'null'
          description: Tax numbers of the customer.
          items:
            $ref: '#/components/schemas/TaxNumber'
        _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:
            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.
            This 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'
    LeadSourceData:
      type: object
      description: Lead source information.
      properties:
        medium:
          description: >-
            Category of the lead source traffic.

            For 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.
            For 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.

            In 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.

            This 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: url
          maxLength: 2083
        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
    LeadSource:
      allOf:
        - $ref: '#/components/schemas/LeadSourceData'
        - type: object
          properties:
            original:
              readOnly: true
              allOf:
                - $ref: '#/components/schemas/LeadSourceData'
    RedemptionCancelTimelineAction:
      description: Cancel redemption.
      type: object
      readOnly: true
      properties:
        action:
          type: string
          enum:
            - redemption-cancel
        redemptionId:
          $ref: '#/components/schemas/ResourceId'
    ResendEmailTimelineAction:
      type: object
      description: Resend email action.
      readOnly: true
      properties:
        action:
          type: string
          enum:
            - resend-email
        messageId:
          $ref: '#/components/schemas/ResourceId'
    RulesetRestoreTimelineAction:
      type: object
      description: Restore ruleset version.
      readOnly: true
      properties:
        action:
          type: string
          enum:
            - ruleset-restore
        version:
          type: integer
          description: Version of the ruleset to restore.
    ShowEddSearchLogsTimelineAction:
      type: object
      description: Show Enhanced Due Diligence (EDD) search logs action.
      readOnly: true
      properties:
        action:
          type: string
          enum:
            - show-edd-search-logs
        searchLogId:
          $ref: '#/components/schemas/ResourceId'
        type:
          type: string
          enum:
            - arrest
            - bankruptcy
            - fraud
            - occupation
    TimelineAction:
      type: object
      discriminator:
        propertyName: action
        mapping:
          redemption-cancel: '#/components/schemas/RedemptionCancelTimelineAction'
          resend-email: '#/components/schemas/ResendEmailTimelineAction'
          ruleset-restore: '#/components/schemas/RulesetRestoreTimelineAction'
          show-edd-search-logs: '#/components/schemas/ShowEddSearchLogsTimelineAction'
      oneOf:
        - $ref: '#/components/schemas/RedemptionCancelTimelineAction'
        - $ref: '#/components/schemas/ResendEmailTimelineAction'
        - $ref: '#/components/schemas/RulesetRestoreTimelineAction'
        - $ref: '#/components/schemas/ShowEddSearchLogsTimelineAction'
    TimelineTable:
      type: object
      description: Additional timeline message information.
      discriminator:
        propertyName: type
        mapping:
          three-columns: '#/components/schemas/ThreeColumnsTimelineTable'
          two-columns: '#/components/schemas/TwoColumnsTimelineTable'
          one-column: '#/components/schemas/OneColumnTimelineTable'
          list: '#/components/schemas/ListTimelineTable'
      properties:
        type:
          type: string
          enum:
            - list
            - one-columns
            - two-columns
            - three-columns
        title:
          type: string
          description: Data table title.
        footer:
          type: string
          description: Data table footer.
    ThreeColumnsTimelineTable:
      allOf:
        - $ref: '#/components/schemas/TimelineTable'
        - type: object
          properties:
            data:
              type: array
              description: Table data. Each array element represents a table row.
              items:
                type: object
                properties:
                  attribute:
                    type: string
                  previousValue:
                    type: string
                  newValue:
                    type: string
                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. Each array element represents a table row.
              items:
                type: object
                properties:
                  attribute:
                    type: string
                  value:
                    type: string
                example:
                  attribute: Who
                  value: John Doe
    OneColumnTimelineTable:
      allOf:
        - $ref: '#/components/schemas/TimelineTable'
        - type: object
          properties:
            data:
              type: array
              description: Table data. Each array element represents a table row.
              items:
                type: object
                properties:
                  attribute:
                    type: string
                  value:
                    type: string
                example:
                  attribute: Who
                  value: John Doe
    ListTimelineTable:
      allOf:
        - $ref: '#/components/schemas/TimelineTable'
        - type: object
          properties:
            data:
              type: array
              description: Table data. Each array element represents a line.
              items:
                type: string
    TimelineExtraData:
      type: object
      description: Additional data.
      readOnly: true
      properties:
        actions:
          description: |-
            Actions available for a timeline message.
            If 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: Author's full name.
              type: string
            userId:
              description: Author's user ID.
              type: string
              maxLength: 50
              example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        mentions:
          description: User mentions, or tags, in a timeline.
          type: object
          additionalProperties:
            type: string
          example:
            '@test@mail.com': userId-1
        links:
          description: Links that are attached to a timeline message.
          type: array
          items:
            type: object
            properties:
              resourceType:
                type: string
                enum:
                  - kyc-document
                  - invoice
                  - subscription
                  - transaction
                  - email-message
                  - dispute
                  - coupon
                  - external
              resourceId:
                $ref: '#/components/schemas/ResourceId'
              placeholder:
                type: string
                example: KYC document
              externalUrl:
                type: string
                example: http://example.com
    ServerTimestamp:
      type: string
      description: Read-only timestamp in ISO 8601 date-time format.
      format: date-time
      readOnly: true
    CustomerTimeline:
      type: object
      properties:
        id:
          type: string
          description: ID of the customer timeline custom event.
          readOnly: true
          maxLength: 50
          example: tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC
        type:
          description: Type of timeline message.
          type: string
          enum:
            - account-password-reset-requested
            - account-verification-requested
            - aml-list-was-possibly-matched
            - deposit-request-completed
            - deposit-request-created
            - deposit-request-expired
            - deposit-request-started
            - coupon-applied
            - coupon-redeemed
            - coupon-redemption-canceled
            - custom-event
            - custom-event-processed
            - custom-fields-changed
            - customer-bank-account-blocked
            - customer-blocked
            - customer-comment-created
            - customer-created
            - customer-merged
            - customer-payment-card-blocked
            - customer-requested-otp
            - customer-tagged
            - customer-untagged
            - default-payment-instrument-changed
            - email-message-sent
            - experian-check-performed
            - invoice-abandoned
            - invoice-created
            - invoice-disputed
            - invoice-issued
            - invoice-paid
            - invoice-partially-paid
            - invoice-partially-refunded
            - invoice-past-due
            - invoice-refunded
            - invoice-reissued
            - invoice-revenue-recognized
            - invoice-voided
            - kyc-document-accepted
            - kyc-document-created
            - kyc-document-modified
            - kyc-document-rejected
            - kyc-document-reviewed
            - kyc-request-fulfilled
            - lead-source-changed
            - order-activated
            - order-canceled
            - order-churned
            - order-completed
            - order-created
            - order-downgraded
            - order-paid-early
            - order-reactivated
            - order-renewed
            - order-trial-ended
            - order-upgraded
            - payment-card-expiration-was-modified
            - payment-card-expired
            - payment-instrument-created
            - payment-instrument-deactivated
            - primary-address-changed
            - quickbooks-customer-created
            - quickbooks-customer-task-failed
            - quote-canceled
            - quote-created
            - quote-expired
            - quote-issued
            - quote-order-attached
            - quote-recalled
            - quote-rejected
            - quote-updated
            - refund-was-reflected-in-invoices
            - subscription-paused
            - subscription-resumed
            - subscription-trial-end-changed
            - transaction-abandoned
            - transaction-amount-discrepancy-found
            - transaction-approved
            - transaction-canceled
            - transaction-declined
            - transaction-discrepancy-found
            - transaction-disputed
            - transaction-reconciled
            - transaction-refunded
            - transaction-voided
            - transaction-waiting-gateway
        customEventType:
          description: >-
            Timeline custom event type.

            Used with `custom-event` type.

            This 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.
            Used with `custom-event` type.
            Transforms to `extraData` two-column table in response.
          type: object
          writeOnly: true
          example:
            customAttribute: customValue
            otherAttribute: otherValue
        triggeredBy:
          description: Specifies who, or what, triggered the timeline event.
          type: string
          readOnly: true
          enum:
            - rebilly
            - app
            - direct-api
        message:
          description: Detailed message description.
          type: string
        extraData:
          $ref: '#/components/schemas/TimelineExtraData'
        occurredTime:
          description: Date and time when the timeline message occurred.
          $ref: '#/components/schemas/ServerTimestamp'
        _links:
          $ref: '#/components/schemas/SelfLink'
    Dispute:
      type: object
      properties:
        id:
          type: string
          description: ID of the dispute.
          readOnly: true
          maxLength: 50
          example: dp_0YVCE8J5F2DE58FV0S8YASW4HK
        customerId:
          description: ID of the customer who is disputing a transaction.
          type:
            - string
            - 'null'
          readOnly: true
          maxLength: 50
          example: cus_0YV7DDSDD1C8DA64KHH2W33CPF
        transactionId:
          description: ID of the disputed transaction.
          type:
            - string
            - 'null'
          maxLength: 50
          example: txn_0YVDTQJ8YWDGQACV2N2N5SPWQ0
        currency:
          $ref: '#/components/schemas/CurrencyCode'
        amount:
          description: Dispute amount.
          type: number
          format: double
        acquirerReferenceNumber:
          description: Acquirer reference number for the dispute.
          type:
            - string
            - 'null'
        caseId:
          description: Case ID of the dispute.
          type:
            - string
            - 'null'
        reasonCode:
          description: >-
            Code used in the chargeback that describes the reason for the
            dispute.
          type:
            - string
            - 'null'
          maxLength: 255
        reasonDescription:
          description: Description of the reason for the dispute.
          type:
            - string
            - 'null'
          maxLength: 512
          readOnly: true
        category:
          description: Category of dispute.
          type: string
          readOnly: true
          enum:
            - fraud
            - authorization
            - processing-errors
            - consumer-disputes
            - uncategorized
            - bank-return
        type:
          description: Type of dispute.
          type: string
          enum:
            - information-request
            - first-chargeback
            - second-chargeback
            - arbitration
            - fraud
            - ethoca-alert
            - verifi-alert
            - bank-return
            - paypal-claim
            - representment
            - inquiry
            - forced-refund
        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.

            If 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.

            Use the revision number when analyzing webhook data to
            determine if a change should take precedence over the current
            representation.
          type: integer
          readOnly: true
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - transaction
                  - customer
                  - attachments
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            transaction:
              type: object
            customer:
              type: object
    TransactionId:
      type: string
      description: ID of the transaction.
      maxLength: 50
      example: txn_0YVDTQJ8YWDGQACV2N2N5SPWQ0
    File:
      type: object
      properties:
        id:
          type: string
          description: ID of the file.
          readOnly: true
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        name:
          description: Original file name.
          type: string
          maxLength: 255
        extension:
          description: File extension.
          type: string
        description:
          description: Description of the file.
          type: string
          maxLength: 255
        sourceType:
          description: Source of the file.
          type:
            - string
            - 'null'
          enum:
            - upload
            - camera
            - organization-export
            - organization-closure-export
            - null
          example: upload
        tags:
          description: List of tags associated with the file.
          type: array
          items:
            type: string
        mime:
          description: MIME type of the file.
          type: string
          readOnly: true
          enum:
            - image/png
            - image/jpeg
            - image/gif
            - application/pdf
            - application/json
            - application/zip
            - text/csv
        size:
          description: File size, in bytes.
          type: integer
          readOnly: true
        width:
          description: Image width. This field applicable to images only.
          type:
            - integer
            - 'null'
          readOnly: true
        height:
          description: Image height. This field 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. This field
            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.

            If 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.

            If 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://blog.rebilly.com/wp-content/uploads/2017/09/rb_LogoInverted_Small.png
        isPublic:
          description: >-
            Specifies if the file is available publicly without authentication.

            If this value is `true`, the permalink in the `_links` section
            contains the public URL.
          type: boolean
          example: false
        name:
          description: File name used for downloading.
          type: string
          maxLength: 255
          example: logo.png
        description:
          description: Description of the file.
          type: string
          maxLength: 255
          example: My file description
        sourceType:
          description: Source of the file.
          type:
            - string
            - 'null'
          enum:
            - upload
            - camera
            - organization-export
            - organization-closure-export
            - null
          example: upload
        tags:
          description: List of tags associated with the file.
          type: array
          items:
            type: string
          example:
            - test
            - tags
    ManualShipping:
      description: Manually set shipping amount.
      type: object
      required:
        - amount
        - calculator
      properties:
        amount:
          x-type: Money
          type: number
          format: double
          description: Shipping amount.
        calculator:
          description: Shipping calculator.
          type: string
          enum:
            - manual
    RebillyShipping:
      description: Rebilly-based shipping which is calculated by shipping rates.
      type: object
      required:
        - calculator
      properties:
        calculator:
          description: Shipping calculator.
          type: string
          enum:
            - rebilly
        rateId:
          description: >-
            ID of the shipping rate. If unset the cheapest applicable shipping
            rate is chosen.
          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'
      anyOf:
        - $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: integer
          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: integer
          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: integer
          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'
      anyOf:
        - $ref: '#/components/schemas/ManualTax'
        - $ref: '#/components/schemas/RebillyTaxJarTax'
        - $ref: '#/components/schemas/RebillyAvalaraTax'
    InvoiceItem:
      type: object
      required:
        - type
        - unitPrice
      properties:
        id:
          type: string
          description: ID of the invoice item.
          readOnly: true
          maxLength: 50
          example: ii_0YVFDEQS2KCFTBN9HXWJFY55GV
        type:
          description: Type of invoice item.
          type: string
          x-basic: true
          enum:
            - debit
            - credit
        description:
          description: Description of the invoice item.
          type: string
          maxLength: 1000
        unitPrice:
          description: Unit price of the invoice item.
          type: number
          format: double
        quantity:
          description: Quantity of the invoice item.
          type: integer
        price:
          description: Total price of the invoice item.
          type: number
          format: double
          readOnly: true
        productId:
          type:
            - string
            - 'null'
          description: ID of the product.
          maxLength: 50
          example: prod_0YV7DES3WPC5J8JD8QTVNZBZNZ
        planId:
          type:
            - string
            - 'null'
          description: ID of the plan.
          maxLength: 50
          readOnly: true
          example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
        subscriptionId:
          type:
            - string
            - 'null'
          description: ID of the order.
          maxLength: 50
          readOnly: true
          example: sub_01HRF27SATGE4Z6PBJE6PD8328
        discountAmount:
          description: Discount amount applied to the invoice item.
          type: number
          format: double
          readOnly: true
        periodStartTime:
          description: Date and time when the billing period starts.
          type:
            - string
            - 'null'
          format: date-time
        periodEndTime:
          description: Date and time when the billing period ends.
          type:
            - string
            - 'null'
          format: date-time
        periodNumber:
          description: >-
            Billing period number that is associated with the invoice item.

            For example, an invoice item for a service is included in billing
            period number 3.

            The 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.

            If 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:

            - The unused amount of the credit memo.

            - 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
        - Aircash
        - Airpay
        - Airwallex
        - AmazonPay
        - AmexVPC
        - 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
        - Cryptonator
        - CyberSource
        - DataCash
        - Dengi
        - Dimoco
        - Directa24
        - dLocal
        - Dragonphoenix
        - Dropayment
        - EasyPayDirect
        - EBANX
        - ecoPayz
        - 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
        - iCanPay
        - ICEPAY
        - iCheque
        - iDebit
        - Ilixium
        - Ingenico
        - INOVAPAY
        - Inovio
        - Intuit
        - InstaDebit
        - IpayOptions
        - JetPay
        - Jeton
        - JPMOrbital
        - Khelocard
        - Klarna
        - Konnektive
        - LaCore
        - Limepay
        - loonie
        - LPG
        - MaxiCash
        - MercadoPago
        - MiFinity
        - MobilePay
        - Moneris
        - Monolo
        - MonRem
        - MtaPay
        - MuchBetter
        - MuchBetterGateway
        - MyFatoorah
        - Neosurf
        - Netbanking
        - Neteller
        - NGenius
        - NinjaWallet
        - NMI
        - NordikCoin
        - NOWPayments
        - NuaPay
        - OchaPay
        - OmniMatrix
        - Onlineueberweisen
        - OnRamp
        - Orbital
        - Pagadito
        - Pagsmile
        - Panamerican
        - ParamountCommerce
        - ParamountEft
        - ParamountInterac
        - PandaGateway
        - Pay4Fun
        - PayCash
        - PayClub
        - PayCom
        - PayEcards
        - Payeezy
        - Payflow
        - Paynote
        - PaymentAsia
        - PaymenTechnologies
        - PaymentsOS
        - Paymero
        - PayPal
        - Payper
        - Payr
        - PayRedeem
        - PayRetailers
        - Paysafe
        - Paysafecard
        - Paysafecash
        - PayTabs
        - PayU
        - PayULatam
        - Payvision
        - PharosPayments
        - Piastrix
        - Pin4Pay
        - Plugnpay
        - PostFinance
        - PPRO
        - Prosa
        - PSiGate
        - Rapyd
        - Realex
        - Realtime
        - Redsys
        - Rotessa
        - RPN
        - Safecharge
        - SaltarPay
        - Sagepay
        - SeamlessChex
        - SecureTrading
        - SecurionPay
        - Skrill
        - SmartInvoice
        - SMSVoucher
        - Sofort
        - SparkPay
        - StaticGateway
        - STPMexico
        - Stripe
        - Tabby
        - Telr
        - TestProcessor
        - ToditoCash
        - Triple000
        - Truevo
        - TrustsPay
        - Trustly
        - TWINT
        - Unlimit
        - UPayCard
        - USAePay
        - VantivLitle
        - vegaaH
        - VCreditos
        - VegaWallet
        - Wallet88
        - Walpay
        - WesternUnion
        - Wirecard
        - WorldlineAtosFrankfurt
        - Worldpay
        - XPay
        - Zimpler
        - Zotapay
    AcquirerName:
      description: Acquirer name.
      type:
        - string
        - 'null'
      enum:
        - Adyen
        - ACI
        - 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
        - iCanPay
        - ICEPAY
        - iCheque
        - Ilixium
        - Ingenico
        - INOVAPAY
        - Intuit
        - Jeton
        - JPMOrbital
        - Khelocard
        - Klarna
        - Konnektive
        - Limepay
        - 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
        - PayCash
        - PayClub
        - PayEcards
        - PaymentAsia
        - PaymenTechnologies
        - PaymentsOS
        - Paymero
        - Paynetics
        - PayPal
        - Payper
        - Payr
        - PayRedeem
        - PayRetailers
        - PayTabs
        - PayU
        - PayULatam
        - Payvision
        - PharosPayments
        - Piastrix
        - Pin4Pay
        - Peoples Trust Company
        - PostFinance
        - PPRO
        - Privatbank
        - Prosa
        - PSiGate
        - QQPay
        - Rapyd
        - RBC
        - RBS WorldPay
        - RealTime
        - Rotessa
        - Safecharge
        - SaltarPay
        - SecureTrading
        - SecurionPay
        - Skrill
        - SmartInvoice
        - SMSVoucher
        - Sofort
        - SparkPay
        - State Bank of Mauritius
        - STPMexico
        - Stripe
        - Tabby
        - TBI
        - Telr
        - TestProcessor
        - ToditoCash
        - Triple000
        - Truevo
        - Trustly
        - TrustPay
        - TrustsPay
        - TSYS
        - TWINT
        - UPayCard
        - Vantiv
        - VCreditos
        - VegaWallet
        - VoicePay
        - Wallet88
        - WeChat Pay
        - Wells Fargo
        - Wing Hang Bank
        - Wirecard
        - WorldPay
        - XPay
        - Zimpler
        - Zotapay
    MoneyAmount:
      type: number
      format: double
      example: 10
      x-type: Money
    Money:
      type: object
      required:
        - amount
        - currency
      properties:
        amount:
          $ref: '#/components/schemas/MoneyAmount'
        currency:
          $ref: '#/components/schemas/CurrencyCode'
    HttpHeaders:
      type: object
      description: HTTP headers.
      additionalProperties:
        type: string
      example:
        Content-Type: application/json
        Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
      x-is-free-form: true
    RiskMetadata:
      type: object
      title: Risk metadata
      description: Risk metadata used for 3D Secure and risk scoring.
      properties:
        ipAddress:
          description: Customer's IP address.
          type:
            - string
            - 'null'
          format: ipv4 or ipv6
          example: 93.92.91.90
        fingerprint:
          description: >-
            Customer's device fingerprint.

            A device fingerprint is a unique token that is used to identify the
            customer.

            The device fingerprint is generated based on device attributes, such
            as: hardware,

            software, 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. This 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. This value is
                obtained from the `navigator.javaEnabled` property.
              type: boolean
            language:
              description: >-
                Browser language settings. This value is obtained from the
                `navigator.language` property.
              type: string
              example: en-US
              maxLength: 8
            screenWidth:
              description: >-
                Width of the browser screen. This value is obtained from the
                `screen.width` property.
              type: integer
              minimum: 0
              maximum: 65535
              example: 1920
            screenHeight:
              description: >-
                Height of the browser screen. This 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.

                A positive offset indicates that the local time is behind UTC.

                A negative offset indicates that the local time is ahead of UTC.

                You 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's 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,
            such 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.
            This 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.

            If 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.
            If an adjustment occurs,
            the 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.

            A 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.

            For 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.

            The default value is the website URL.
          type:
            - string
            - 'null'
          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.

            For 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.

            Use 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.

            This 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.

            This value is only available when a transaction uses a payment
            gateway.

            If a transaction does not use a payment gateway, this value is
            `null`.
          allOf:
            - $ref: '#/components/schemas/AcquirerName'
        method:
          deprecated: true
          description: |-
            Payment method.

            >**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.


            This 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
          anyOf:
            - $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).
            If 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:
                - rejected
                - selected
                - unknown
        riskScore:
          description: Risk score for the transaction.
          type: integer
          readOnly: true
        riskMetadata:
          oneOf:
            - $ref: '#/components/schemas/RiskMetadata'
            - type: 'null'
        notificationUrl:
          description: >-
            URL where a server-to-server POST notification is sent.

            This notification is sent when the transaction result is finalized
            after a timeout or an offsite interaction.


            Do not interpret this notification as a confirmation,

            complete a `GET` request to confirm the result of the transaction.

            To ensure the request is not reattempted,

            when the result is confirmed, respond with a `2xx` HTTP status code.


            The following placeholders are available to use in this URI: `{id}`
            and `{result}`.

            These placeholders are replaced the with the transaction ID and
            result accordingly.
          type:
            - string
            - 'null'
          format: uri
        isDisputed:
          description: Specifies if a transaction is disputed.
          type: boolean
          readOnly: true
        disputeTime:
          description: |-
            Date and time when the dispute is created.
            If 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.
            This ID must be unique within a 24 hour period.

            > **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. The created transaction is
            based on the properties of this deposit request.
          maxLength: 50
          example: dep_req_0YVJ65BSGYC3EAT58SEX8KY6J7
        payoutRequestId:
          readOnly: true
          type:
            - string
            - 'null'
          description: >-
            ID of the payout request if applicable. The 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.
            If 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'
      anyOf:
        - $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.

            The 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'
      anyOf:
        - $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
      properties:
        method:
          type: string
          enum:
            - none
          description: No payment amount adjustment.
    AmountAdjustmentPoliciesDiscountAmountRemaining:
      title: Discount remaining amount
      type: object
      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.
            This 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.
            This 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.
          $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: url
          description: |-
            URL where the customer is redirected to pay the invoice
            using one of the methods which are available to the customer.
            This is an alternative to creating a new transaction with empty
            `methods`.
        creditMemoAllocations:
          type: array
          description: Credit memo allocations to an invoice.
          readOnly: true
          items:
            $ref: '#/components/schemas/CreditMemoInvoiceAllocation'
        customerId:
          x-basic: true
          allOf:
            - $ref: '#/components/schemas/CustomerId'
        transactions:
          type: array
          description: Invoice transactions array.
          maxItems: 10
          readOnly: true
          items:
            $ref: '#/components/schemas/Transaction'
        retryInstruction:
          description: >-
            Invoice payment retry instruction.

            This 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.

            Use the revision number when analyzing webhook data to
            determine if a change should take precedence over the current
            representation.
          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.

            If this value is `null`, no delinquency time is configured.

            If the `dueTime` of the order becomes greater than the
            `delinquencyTime` value,

            the `delinquencyTime` value becomes equal to `dueTime`.


            If 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.

            If 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.

            If 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.

            If this field is `null` or omitted, this value is set to the current
            date-time.
          type:
            - string
            - 'null'
          format: date-time
    InvoiceTransactionAllocation:
      type: object
      properties:
        invoiceId:
          type: string
          description: Unique resource ID.
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        transactionId:
          $ref: '#/components/schemas/TransactionId'
        amount:
          type: number
          format: double
        currency:
          $ref: '#/components/schemas/CurrencyCode'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - invoice
                  - transaction
    InvoiceTransaction:
      type: object
      required:
        - transactionId
      properties:
        transactionId:
          description: ID of the transaction to apply to the invoice.
          $ref: '#/components/schemas/TransactionId'
        amount:
          description: >-
            Amount to be applied to the invoice. This value must not exceed the
            transaction amount.

            If omitted, the lesser of the unused transaction amount or the
            invoice due amount is used.
          type: number
          format: double
    InvoiceTimeline:
      type: object
      properties:
        id:
          type: string
          description: ID of the timeline message.
          readOnly: true
          maxLength: 50
          example: tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC
        type:
          description: Type of timeline message.
          type: string
          readOnly: true
          enum:
            - coupon-applied
            - email-message-sent
            - invoice-abandoned
            - invoice-disputed
            - invoice-issued
            - invoice-paid
            - invoice-partially-paid
            - invoice-partially-refunded
            - invoice-past-due
            - invoice-refunded
            - invoice-reissued
            - invoice-renewal-payment-declined
            - invoice-revenue-recognized
            - invoice-tax-calculation-failed
            - invoice-voided
            - quickbooks-credit-memo-created
            - quickbooks-credit-memo-voided
            - quickbooks-invoice-created
            - quickbooks-invoice-task-failed
            - quickbooks-invoice-updated
            - quickbooks-invoice-voided
            - quickbooks-revenue-recognition-created
            - timeline-comment-created
            - transaction-abandoned
            - transaction-approved
            - transaction-canceled
            - transaction-declined
            - transaction-initiated
            - transaction-refunded
            - transaction-voided
        triggeredBy:
          description: Specifies who, or what, triggered the timeline event.
          type: string
          readOnly: true
          enum:
            - rebilly
            - app
            - direct-api
        message:
          description: Describes the message details.
          type: string
        extraData:
          $ref: '#/components/schemas/TimelineExtraData'
        occurredTime:
          description: Date and time when the timeline message occurred.
          readOnly: true
          $ref: '#/components/schemas/ServerTimestamp'
        _links:
          $ref: '#/components/schemas/SelfLink'
    CreditMemoTaxItem:
      type: object
      required:
        - amount
        - description
      properties:
        amount:
          description: Amount of the tax.
          type: number
          format: double
        description:
          type: string
          description: Description of the tax.
        rate:
          description: >-
            Overall sales tax rate which includes state, county, city and
            district tax.
          type:
            - number
            - 'null'
          format: double
        stateAmount:
          description: Amount of sales tax to collect for the state.
          type:
            - number
            - 'null'
          format: double
          example: 0.94
        countyAmount:
          description: Amount of sales tax to collect for the county.
          type:
            - number
            - 'null'
          format: double
          example: 0.04
        cityAmount:
          description: Amount of sales tax to collect for the city.
          type:
            - number
            - 'null'
          format: double
          example: 0
        specialDistrictAmount:
          description: Amount of sales tax to collect for the special district.
          type:
            - number
            - 'null'
          format: double
          example: 0.38
        stateRate:
          description: State sales tax rate for given location.
          type:
            - number
            - 'null'
          format: double
        countyRate:
          description: County sales tax rate for given location.
          type:
            - number
            - 'null'
          format: double
        cityRate:
          description: City sales tax rate for given location.
          type:
            - number
            - 'null'
          format: double
        specialDistrictRate:
          description: Special district sales tax rate for given location.
          type:
            - number
            - 'null'
          format: double
        jurisdictions:
          description: Jurisdiction names for the invoice.
          type:
            - object
            - 'null'
          properties:
            country:
              description: Two-letter ISO country code for the provided location.
              type:
                - string
                - 'null'
              example: US
            state:
              description: Postal abbreviated state name for the provided location.
              type:
                - string
                - 'null'
              example: CA
            county:
              description: County name for the provided location.
              type:
                - string
                - 'null'
              example: LOS ANGELES
            city:
              description: City name for the provided location.
              type:
                - string
                - 'null'
              example: LOS ANGELES
    CreditMemo:
      type: object
      description: Credit memo object.
      required:
        - customerId
        - currency
      properties:
        id:
          type: string
          description: ID of the credit memo.
          readOnly: true
          maxLength: 50
          example: crmm_0YVCNN22TWC3G8H82QNPNVZCHG
        number:
          description: >-
            Auto-incrementing number based on the sequence of credit memos for
            any particular customer.
          readOnly: true
          type: integer
        allocations:
          type: object
          description: Allocations reduce the unused amount of a credit memo.
          properties:
            transactions:
              type: array
              description: >-
                List of transactions (typically refunds, credits, and
                chargebacks) that are allocated to reduce the unused amount of a
                credit memo.

                  - To delete transaction allocations, send an empty transaction allocation array in the request.
                  - To modify transaction allocations, send a modified transaction allocation array in the request.
                  - 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.

                      If 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:

                      - The unused amount of the credit memo.

                      - 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.


                - To delete invoice allocations, send an empty invoice
                allocation array in the request.
                  Only `unpaid`, `partially-paid`, and `past-due` invoices can be deleted.
                - To modify invoice allocations, send a modified invoice
                allocation array in the request.
                  Only `unpaid`, `partially-paid`, and `past-due` invoices can be modified.
                - 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:
            - issued
            - applied
            - partially-applied
            - voided
          x-enumDescriptions:
            issued: The credit memo is available with a full amount to be applied.
            applied: >-
              The full amount of the credit memo has been applied. No more
              credit can be created from it.
            partially-applied: |-
              A partial amount of the credit memo has been applied.
              A credit can be created from the remaining amount.
            voided: Credit memo has been voided and cannot be used anymore.
        reason:
          description: Reason for the credit memo.
          type: string
          enum:
            - return
            - product-unsatisfactory
            - order-change
            - order-cancellation
            - chargeback
            - write-off
            - waiver
            - customer-credit
            - other
        description:
          type: string
          x-basic: true
          description: >-
            Public description, that is visible to customers, which describes
            the purpose of the credit memo.
        shippingAmount:
          description: Shipping amount of an invoice to credit.
          type: number
          format: double
          default: 0
          x-type: Money
        taxAmount:
          description: Sum of items tax amount of an invoice to credit.
          readOnly: true
          type: number
          format: double
          default: 0
          x-type: Money
        totalAmount:
          description: >-
            Total amount of all credits in the credit memo, including items,
            shipping, and tax.
          readOnly: true
          type: number
          format: double
          default: 0
          x-type: Money
        unusedAmount:
          description: Unused credit memo amount that has not been allocated.
          readOnly: true
          type: number
          format: double
          default: 0
          x-type: Money
        revision:
          type: integer
          readOnly: true
          description: Number of times the credit memo has been modified.
        customerId:
          readOnly: true
          $ref: '#/components/schemas/CustomerId'
        currency:
          readOnly: true
          $ref: '#/components/schemas/CurrencyCode'
        invoiceId:
          type:
            - string
            - 'null'
          description: ID of the invoice to which the credit memo is issued.
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - customer
                  - invoice
    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.

                  - To delete transaction allocations, send an empty transaction allocation array in the request.
                  - To modify transaction allocations, send a modified transaction allocation array in the request.
                  - 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.

                      If 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:

                      - The unused amount of the credit memo.

                      - 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.


                - To delete invoice allocations, send an empty invoice
                allocation array in the request.
                  Only `unpaid`, `partially-paid`, and `past-due` invoices can be deleted.
                - To modify invoice allocations, send a modified invoice
                allocation array in the request.
                  Only `unpaid`, `partially-paid`, and `past-due` invoices can be modified.
                - 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.

                      If 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:

                      - The unused amount of the credit memo.

                      - The invoice due amount.
                    type: number
                    format: double
                  currency:
                    readOnly: true
                    $ref: '#/components/schemas/CurrencyCode'
                  createdTime:
                    description: Date and time at which a credit memo is allocated.
                    $ref: '#/components/schemas/ServerTimestamp'
                  updatedTime:
                    $ref: '#/components/schemas/UpdatedTime'
        items:
          type: array
          description: Items of the credit memo.
          items:
            type: object
            required:
              - unitPrice
              - quantity
            properties:
              id:
                type: string
                description: ID of the credit memo item.
                readOnly: true
                maxLength: 50
                example: crmm_itm_01HXC7PK2C6F367VYCFXDRYMAQ
              invoiceItemId:
                description: ID of the invoice item to which the credit item is referenced.
                type:
                  - string
                  - 'null'
                maxLength: 50
                example: ii_0YVFDEQS2KCFTBN9HXWJFY55GV
              description:
                description: Description of the credit memo item.
                type: string
              unitPrice:
                description: Price of the credit memo item.
                type: number
                format: double
              quantity:
                description: Quantity of the credit memo item.
                type: integer
              price:
                description: Total price of the credit memo item.
                type: number
                format: double
                readOnly: true
              productId:
                type:
                  - string
                  - 'null'
                description: ID of the related product.
                maxLength: 50
                example: prod_0YV7DES3WPC5J8JD8QTVNZBZNZ
              planId:
                description: ID of the related plan.
                type:
                  - string
                  - 'null'
                maxLength: 50
                example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
              tax:
                description: Credit memo item tax.
                oneOf:
                  - $ref: '#/components/schemas/CreditMemoTaxItem'
                  - type: 'null'
        reason:
          description: Reason for the credit memo.
          type: string
          enum:
            - return
            - product-unsatisfactory
            - order-change
            - order-cancellation
            - chargeback
            - write-off
            - waiver
            - customer-credit
            - other
        description:
          type: string
          x-basic: true
          description: >-
            Public description, that is visible to customers, which describes
            the purpose of the credit memo.
        shippingAmount:
          description: Shipping amount of an invoice to credit.
          type: number
          format: double
          default: 0
          x-type: Money
    CreditMemoTimeline:
      type: object
      properties:
        id:
          type: string
          description: ID of the timeline message.
          readOnly: true
          maxLength: 50
          example: tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC
        type:
          description: Type of timeline message.
          type: string
          readOnly: true
          enum:
            - credit-memo-created
            - credit-memo-applied
            - credit-memo-partially-applied
            - credit-memo-voided
        triggeredBy:
          description: Specifies who, or what, triggered the timeline event.
          type: string
          readOnly: true
          enum:
            - rebilly
            - app
            - direct-api
        message:
          description: Content of the timeline message.
          type: string
        extraData:
          $ref: '#/components/schemas/TimelineExtraData'
        occurredTime:
          description: Date and time when the timeline message occurred.
          readOnly: true
          $ref: '#/components/schemas/ServerTimestamp'
        _links:
          $ref: '#/components/schemas/SelfLink'
    JournalAccount:
      type: object
      required:
        - name
      properties:
        id:
          type: string
          description: ID of the journal account.
          readOnly: true
          maxLength: 50
          example: jrn_acc_0YVCXS791DD8JAK1WV3VHM70ZQ
        name:
          type: string
          description: Name of the journal account.
          example: Unearned revenue
        description:
          type:
            - string
            - 'null'
        createdTime:
          description: Date and time when the journal record is created.
          $ref: '#/components/schemas/ServerTimestamp'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    JournalEntry:
      type: object
      required:
        - period
        - currency
      properties:
        id:
          type: string
          description: ID of the journal entry.
          readOnly: true
          maxLength: 50
          example: jrn_ent_0YVCXSFCF2DJX99NBBSJCEVETB
        period:
          type: object
          properties:
            startDate:
              type: string
              format: date
              example: '2022-09-01'
            endDate:
              type: string
              format: date
              example: '2022-09-30'
        label:
          type: string
          description: Custom label that could be used for filtering entries.
          maxLength: 255
          default: monthly
        currency:
          description: Currency of the journal record revenue.
          $ref: '#/components/schemas/CurrencyCode'
        description:
          type: string
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    JournalRecord:
      type: object
      required:
        - type
        - journalEntryId
        - customerId
        - invoiceId
        - invoiceItemId
        - debitAccountId
        - creditAccountId
      properties:
        id:
          type: string
          description: Unique resource ID.
          maxLength: 50
          example: jrn_rec_0YVCXV2HE5DBT89QV7RXSJEZQ4
        journalEntryId:
          description: ID of the journal entry.
          readOnly: true
          type: string
        customerId:
          description: ID of the customer.
          type: string
          maxLength: 50
          example: cus_0YV7DDSDD1C8DA64KHH2W33CPF
        invoiceId:
          type: string
          description: ID of the invoice.
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        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.

            This 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'
        creditAccountId:
          description: ID of the credit journal account.
          type:
            - string
            - 'null'
        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
        _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.
            Use `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.

            For more information, see [Facial recognition and identity
            verification](https://www.rebilly.com/docs/kyc-and-aml/kyc#facial-recognition-identity-verification).
          type: boolean
    KycDocumentMatchLevels:
      description: Document verification level.
      type: integer
      enum:
        - 1
        - 2
        - 3
      default: 2
      x-enumDescriptions:
        '1': >-
          Strict verification requirements. This option is used for credit
          transactions.
        '2': >-
          Moderate verification requirements. This option is used for sale
          transactions.
        '3': >-
          Basic verification requirements. This option is used when a high level
          of verification is not required.
    KycRequest:
      type: object
      description: KYC request information.
      required:
        - customerId
        - documents
      properties:
        id:
          type: string
          readOnly: true
          description: ID of the KYC request.
          maxLength: 50
          example: kyc_req_0YV7JMJ3DBCGRBR7K9D4HVGPP5
        customerId:
          $ref: '#/components/schemas/CustomerId'
        documents:
          type: array
          description: Documents to request from the customer.
          minItems: 1
          items:
            $ref: '#/components/schemas/KycRequestDocument'
        status:
          description: Status of the request.
          type: string
          readOnly: true
          enum:
            - gathering
            - attempted
            - partial
            - pending-review
            - fulfilled
            - failed
            - abandoned
            - expired
          x-enumDescriptions:
            gathering: |-
              No documents have been provided yet.
              This is a temporary state.
            attempted: >-
              At least one document has been provided but none were assigned the
              `accepted` status.

              This is a temporary state.
            partial: >-
              At least one requested document has the `accepted` status,

              but not all requested documents have been assigned the `accepted`
              status.

              This is a temporary state.
            pending-review: >-
              At least one requested document has the `pending` status,

              and no requested documents have been assigned the `accepted`
              status.

              This is a temporary state, until the document is reviewed,

              or another `accepted` document is provided.
            fulfilled: >-
              All requested documents are provided and have been assigned the
              `accepted` status.

              This is a permanent state.
            failed: >-
              At least one requested document has exhausted all attempts,

              and has not been assigned a `accepted`, `pending`, or
              `in-progress` status.

              This is a permanent state.
            abandoned: |-
              One or more documents provided but the request expired.
              This is a permanent state.
            expired: |-
              No documents were provided and the request expired.
              This is a permanent state.
        redirectUrl:
          description: >-
            URL where the customer is redirected when a KYC document upload is
            complete.

            When the customer is redirected,

            Rebilly appends an `info` query parameter that has one of the
            following values:
              - `back`: Customer clicked the `back to website` link.
              - `token_expired`: Customer's token expired.
              - `success`: Customer uploaded KYC documents that have been analyzed.
              - `manual`: Customer uploaded KYC documents that require a manual review.
                This is because the analyzer rejected the documents or could not process them.
              - `partial`: Some of the customer's KYC documents have been analyzed,
                but other documents have not.
                For example, this may occur when a proof of address document is analyzed but proof of ID is not.

            Example: `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.


            Use 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.
            The default value is one hour in the future.
          type: string
          format: date-time
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - documents
                  - gatherer
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            documents:
              type: array
    KycDocumentRejectionReasonTypes:
      description: Reason the document is rejected.
      type: string
      enum:
        - document-unreadable
        - document-expired
        - document-not-matching
        - document-duplicate
        - document-invalid
        - document-not-open
        - underage-person
        - third-party-or-mismatch
        - expiration-date-missing
        - issue-date-missing
        - subtype-missing
        - dob-mismatch
        - name-mismatch
        - critical-info-missing
        - old-address-on-id
        - tampered-document
        - other
    KycDocumentRejection:
      description: Reason the document is rejected.
      type:
        - object
        - 'null'
      required:
        - type
      readOnly: true
      properties:
        type:
          $ref: '#/components/schemas/KycDocumentRejectionReasonTypes'
        message:
          description: KYC document rejection message.
          type: string
          maxLength: 255
          example: Provided document is unreadable
    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.
            This value is null if no match is found.
          type:
            - string
            - 'null'
          example: John
        lastName:
          description: |-
            Last name of the customer.
            This value is null if no match is found.
          type:
            - string
            - 'null'
          example: Doe
        dateOfBirth:
          description: |-
            Date of birth detected on the document.
            This value is null if no match is detected.
          type:
            - string
            - 'null'
          format: date-time
        expirationDate:
          description: |-
            Expiration date detected on the document.
            This value is null if no expiration date is detected.
          type:
            - string
            - 'null'
          format: date-time
        issueDate:
          description: |-
            Issue date detected on the document.
            This 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.
            The minimal age is 21+ the for USA and 18+ for all other countries.
            This 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.
            This 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.
            This value may contain alphanumeric characters.
          type:
            - string
            - 'null'
          example: '1234567890'
        documentSubtype:
          description: Interpreted subtype of the uploaded document.
          type:
            - string
            - 'null'
          $ref: '#/components/schemas/KycDocumentSubtypes'
        hasMatchingFaceProof:
          description: Specifies if an identity document has matching face proof.
          type: boolean
          example: false
        isTampered:
          description: Specifies if an identity document has been tampered with.
          type: boolean
          example: false
        isDigitallyTampered:
          description: >-
            Specifies if an identity document has been digitally tampered with
            (experimental).
          type: boolean
          example: false
        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.


            All KYC documents start the verification process with a score of
            100.

            If a check fails, the score is reduced by the corresponding weight.

            For example, if the `firstName` check weight is set to `5`, and the
            check fails,

            the KYC document score becomes `95`.
          properties:
            containsImage:
              type: integer
              minimum: 0
              maximum: 100
              description: >-
                Weight added if the document does not include an image that
                contains a face.
            isIdentityDocument:
              type: integer
              minimum: 0
              maximum: 100
              description: Weight added if the document does not resemble an ID.
            isPublishedOnline:
              type: integer
              minimum: 0
              maximum: 100
              description: >-
                Weight added if an exact match of the document is not found
                online.
            firstName:
              type: integer
              minimum: 0
              maximum: 100
              description: Weight added if the customer's first name is not matched.
            lastName:
              type: integer
              minimum: 0
              maximum: 100
              description: Weight added if the customer's last name is not matched.
            expirationDate:
              type: integer
              minimum: 0
              maximum: 100
              description: >-
                Weight added if an expiration date is not detected on the
                document.
            dateOfBirth:
              type: integer
              minimum: 0
              maximum: 100
              description: Weight added if a date of birth is not detected on the document.
            matchesDateOfBirth:
              type: integer
              minimum: 0
              maximum: 100
              description: >-
                Weight added if an identity document does not have a matching
                date of birth.
            issueDate:
              type: integer
              minimum: 0
              maximum: 100
              description: Weight added if an issue date is not detected on the document.
            hasMinimalAge:
              type: integer
              minimum: 0
              maximum: 100
              description: >-
                Weight added if the document does not verify the minimal age
                limit.

                Minimal 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.
        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.
    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.


            Uploaded `identity-proof` files must have the following tags
            attached to be used for KYC purposes:

            `['kyc', 'id-front']`, `['kyc', 'id-back']`, `['kyc',
            'face-proof']`.
          type: array
          items:
            type: string
            maxLength: 50
            example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        documentType:
          description: >-
            Document type submitted for validation.

            Only 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.


            Use this value when analyzing webhook data to determine if a change
            must take precedence over the current representation.
          type: integer
          readOnly: true
        documentMatches:
          type:
            - object
            - 'null'
          readOnly: true
          description: Proof of identity document matches.
          properties:
            score:
              description: >-
                Calculated score that represents the percentage of confidence
                that this ID represents the customer.
              type: number
              format: double
              example: 0.75
            data:
              $ref: '#/components/schemas/KycIdentityMatches'
        parsedData:
          type:
            - object
            - 'null'
          readOnly: true
          description: Parsed data.
          properties:
            score:
              description: >-
                Calculated score that represents the percentage of confidence
                that this ID represents the customer.
              type: number
              format: double
              example: 0.75
            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.
            This value is null if no match is found.
          type:
            - string
            - 'null'
          example: John
        lastName:
          description: |-
            Last name of the customer.
            This value is null if no match is found.
          type:
            - string
            - 'null'
          example: Doe
        line1:
          description: |-
            Address of the customer's residence.
            This value is null if no match is found.
          type:
            - string
            - 'null'
          example: 36 Craven St
        city:
          description: |-
            Customer's city of residence.
            This value is null if no match is found.
          type:
            - string
            - 'null'
          example: London
        region:
          description: |-
            Customer's region of residence.
            This value is null if no match is found.
          type:
            - string
            - 'null'
          example: London
        postalCode:
          description: |-
            Postal code of the customer's residence.
            This 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.
            Use this field to determine if the document is recent.
          type:
            - string
            - 'null'
          format: date
          example: '2021-01-01'
        phone:
          description: Phone number of the company or agency that issued the document.
          type:
            - string
            - 'null'
          example: (123) 456-7890
        documentSubtype:
          description: Interpreted subtype of the uploaded document.
          type:
            - string
            - 'null'
          $ref: '#/components/schemas/KycDocumentSubtypes'
        isTampered:
          description: Specifies if an address proof document has been tampered with.
          type: boolean
          example: false
    KycSettingsAddress:
      type: object
      description: Address proof settings.
      properties:
        weights:
          type: object
          description: >-
            Property weights that are used for the KYC document verification
            process.


            All KYC documents start the verification process with a score of
            100.

            If a check fails, the score is reduced by the corresponding weight.

            For example, if the `firstName` check weight is set to `5`, and the
            check fails,

            the 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.


            Uploaded `identity-proof` files must have the following tags
            attached to be used for KYC purposes:

            `['kyc', 'id-front']`, `['kyc', 'id-back']`, `['kyc',
            'face-proof']`.
          type: array
          items:
            type: string
            maxLength: 50
            example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        documentType:
          description: >-
            Document type submitted for validation.

            Only 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.


            Use this value when analyzing webhook data to determine if a change
            must take precedence over the current representation.
          type: integer
          readOnly: true
        documentMatches:
          type:
            - object
            - 'null'
          readOnly: true
          properties:
            score:
              description: >-
                Calculated score that represents the percentage of confidence
                that this proof of address represents the customer.
              type: number
              format: double
              example: 0.75
            data:
              $ref: '#/components/schemas/KycAddressMatches'
        parsedData:
          type:
            - object
            - 'null'
          readOnly: true
          properties:
            score:
              description: >-
                Calculated score that represents the percentage of confidence
                that this proof of address represents the customer.
              type: number
              format: double
              example: 0.75
            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.
            This value is null if no match is found.
          type:
            - string
            - 'null'
          example: John
        lastName:
          description: |-
            Last name of the customer.
            This 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.


            Uploaded `identity-proof` files must have the following tags
            attached to be used for KYC purposes:

            `['kyc', 'id-front']`, `['kyc', 'id-back']`, `['kyc',
            'face-proof']`.
          type: array
          items:
            type: string
            maxLength: 50
            example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        documentType:
          description: >-
            Document type submitted for validation.

            Only 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.


            Use this value when analyzing webhook data to determine if a change
            must take precedence over the current representation.
          type: integer
          readOnly: true
        documentMatches:
          type:
            - object
            - 'null'
          readOnly: true
          description: Proof of funds document matches.
          properties:
            data:
              $ref: '#/components/schemas/FundsMatches'
        parsedData:
          type:
            - object
            - 'null'
          readOnly: true
          properties:
            data:
              $ref: '#/components/schemas/FundsMatches'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - customer
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            customer:
              type: object
            files:
              type: array
              maxItems: 3
              description: Linked files.
    PurchaseMatches:
      type: object
      properties:
        firstName:
          description: |-
            First name of the customer if it is matched.
            This value is null if no match is found.
          type:
            - string
            - 'null'
          example: John
        lastName:
          description: |-
            Last name of the customer if it is matched.
            This 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.
            This 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.


            Uploaded `identity-proof` files must have the following tags
            attached to be used for KYC purposes:

            `['kyc', 'id-front']`, `['kyc', 'id-back']`, `['kyc',
            'face-proof']`.
          type: array
          items:
            type: string
            maxLength: 50
            example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        documentType:
          description: >-
            Document type submitted for validation.

            Only 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.


            Use this value when analyzing webhook data to determine if a change
            must take precedence over the current representation.
          type: integer
          readOnly: true
        documentMatches:
          type:
            - object
            - 'null'
          readOnly: true
          description: Proof of purchase document matches.
          properties:
            data:
              $ref: '#/components/schemas/PurchaseMatches'
        parsedData:
          type:
            - object
            - 'null'
          readOnly: true
          description: Parsed data.
          properties:
            data:
              $ref: '#/components/schemas/PurchaseMatches'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - customer
                  - paymentInstrument
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            customer:
              type: object
            files:
              type: array
              maxItems: 3
              description: Linked files.
    CreditFileCommonDecisionData:
      readOnly: true
      type: object
      properties:
        lastNameMatch:
          description: Last name match.
          type: string
          readOnly: true
          example: 'Y'
        firstNameMatch:
          description: First name match.
          type: string
          readOnly: true
          example: 'Y'
        civicNumberMatch:
          description: Civic number match.
          type: string
          readOnly: true
          example: 'Y'
        streetNameMatch:
          description: Street name match.
          type: string
          readOnly: true
          example: 'Y'
        cityMatch:
          description: City match.
          type: string
          readOnly: true
          example: 'Y'
        postalCodeMatch:
          description: Postal code match.
          type: string
          readOnly: true
          example: 'Y'
        provinceMatch:
          description: Province match.
          type: string
          readOnly: true
          example: 'Y'
        dateOfBirthMatch:
          description: Date of birth match.
          type: string
          readOnly: true
          example: 'Y'
        ageOfCreditFileThreeOrMoreYearsOld:
          description: Age of credit file is three or more years old.
          type: string
          readOnly: true
          example: 'Y'
        addressAsReported:
          description: Address as reported.
          type: string
          readOnly: true
          example: 'Y'
        nameAsReported:
          description: Name as reported.
          type: string
          readOnly: true
          example: 'Y'
        dateOfBirthAsReported:
          description: Date of birth as reported.
          type: string
          readOnly: true
          example: 'Y'
    CreditFileMatches:
      type: object
      properties:
        creditBureau:
          description: Credit bureau from which the credit file data is sourced.
          type: string
          readOnly: true
          enum:
            - equifax
            - experian
            - transunion
            - test-bureau
        creditFileNumber:
          description: Credit file number from the credit bureau.
          type: string
          readOnly: true
        name:
          description: Name of the person to consult about the credit file.
          type: string
          readOnly: true
        consultedDate:
          description: Date to consult with the credit bureau about the credit file.
          type: string
          format: date-time
          readOnly: true
        decision:
          description: >-
            Specifies if the credit file is used in a single source, or as part
            of a dual source, proof of identity decision.
          type: string
          enum:
            - single-source
            - dual-source
            - other
          x-enumDescriptions:
            single-source: >-
              Credit file used as a single source of proof for an identity
              decisions.
            dual-source: >-
              Credit file used as a source of proof where the credit bureau
              agency found two reliable trade sources.

              At 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.


            Uploaded `identity-proof` files must have the following tags
            attached to be used for KYC purposes:

            `['kyc', 'id-front']`, `['kyc', 'id-back']`, `['kyc',
            'face-proof']`.
          type: array
          items:
            type: string
            maxLength: 50
            example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        documentType:
          description: >-
            Document type submitted for validation.

            Only 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.


            Use this value when analyzing webhook data to determine if a change
            must take precedence over the current representation.
          type: integer
          readOnly: true
        documentMatches:
          description: Proof of credit document matches.
          type:
            - object
            - 'null'
          readOnly: true
          properties:
            data:
              $ref: '#/components/schemas/CreditFileMatches'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - customer
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            customer:
              type: object
            files:
              type: array
              maxItems: 3
              description: Linked files.
    KycDocument:
      type: object
      description: KYC document information.
      discriminator:
        propertyName: documentType
        mapping:
          identity-proof: '#/components/schemas/ProofOfIdentityKycDocument'
          address-proof: '#/components/schemas/ProofOfAddressKycDocument'
          funds-proof: '#/components/schemas/ProofOfFundsKycDocument'
          purchase-proof: '#/components/schemas/ProofOfPurchaseKycDocument'
          credit-file-proof: '#/components/schemas/ProofOfCreditFileKycDocument'
      oneOf:
        - $ref: '#/components/schemas/ProofOfIdentityKycDocument'
        - $ref: '#/components/schemas/ProofOfAddressKycDocument'
        - $ref: '#/components/schemas/ProofOfFundsKycDocument'
        - $ref: '#/components/schemas/ProofOfPurchaseKycDocument'
        - $ref: '#/components/schemas/ProofOfCreditFileKycDocument'
    KycSettings:
      type: object
      description: Settings for KYC score calculation.
      properties:
        identityProof:
          $ref: '#/components/schemas/KycSettingsIdentity'
        addressProof:
          $ref: '#/components/schemas/KycSettingsAddress'
        uiVersion:
          description: Version of the KYC document gatherer UI.
          type:
            - string
            - 'null'
          enum:
            - '1'
            - '2'
          default: '1'
          x-enumDescriptions:
            '1': Classic design.
            '2': >-
              Modern design, optimized for the best user experience on both
              mobile and desktop devices.
    ResetPasswordToken:
      type: object
      required:
        - username
      properties:
        token:
          description: ID of the token.
          type: string
          readOnly: true
        username:
          description: Username associated with the token.
          type: string
        credentialId:
          description: Credential ID associated with the token.
          type: string
          readOnly: true
        expiredTime:
          description: Date and time when the password expires.
          type:
            - string
            - 'null'
          format: date-time
        _links:
          $ref: '#/components/schemas/SelfLink'
    PaymentCardBrand:
      description: Brand of payment card.
      type: string
      enum:
        - Visa
        - MasterCard
        - American Express
        - Discover
        - Maestro
        - Solo
        - Electron
        - JCB
        - Voyager
        - Diners Club
        - Switch
        - Laser
        - China UnionPay
        - AstroPay Card
    UseAsBackup:
      description: >-
        Specifies if this payment instrument can be used as a backup for invoice
        payment retries.
      type: boolean
      default: false
    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.

            An `active` status means that a payment instrument has been used at
            least once for an approved transaction.

            To remove an instrument from use, set this value to `deactivated`.


            For 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.
            This value is generated from the `bin` and the `last4` values.
            This value contains alphanumeric characters.
          type: string
          readOnly: true
        bin:
          description: >-
            Bank Identification Number (BIN) of the payment card.

            This value is the same as the first 6 digits of the associated
            Primary Account Number (PAN).
          type: string
          format: bin
          readOnly: true
        last4:
          description: Last 4 digits of the associated Primary Account Number (PAN).
          type: string
          readOnly: true
        pan:
          description: Primary Account Number (PAN) of the payment card.
          type: string
          writeOnly: true
        expYear:
          description: Expiration year of the payment card.
          type: integer
        expMonth:
          description: Expiration month of the payment card.
          type: integer
        cvv:
          description: Card Verification Value (CVV) of the payment card.
          type: string
          writeOnly: true
        brand:
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/PaymentCardBrand'
        bankCountry:
          description: Bank country of the payment instrument.
          type:
            - string
            - 'null'
          readOnly: true
        bankName:
          description: Bank name of the payment instrument.
          type: string
          readOnly: true
        billingAddress:
          description: Contact's billing address.
          $ref: '#/components/schemas/ContactObject'
        useAsBackup:
          $ref: '#/components/schemas/UseAsBackup'
        billingPortalUrl:
          description: URL of the billing portal where the card can be updated.
          type: string
          readOnly: true
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        stickyGatewayAccountId:
          description: >-
            ID of the sticky gateway account.

            All future payments are processed by this gateway account.


            For more information,

            see [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.


            Use this value when analyzing webhook data to determine if a change
            must take precedence over the current representation.
          type: integer
          readOnly: true
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - customer
                  - authTransaction
                  - approvalUrl
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            authTransaction:
              type: object
            customer:
              type: object
    BankAccount:
      type: object
      title: Bank account
      required:
        - method
      properties:
        id:
          type: string
          description: ID of the payment instrument.
          readOnly: true
          maxLength: 50
          example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
        customerId:
          $ref: '#/components/schemas/CustomerId'
        method:
          description: Method of payment instrument.
          type: string
          readOnly: true
          enum:
            - ach
        bankName:
          description: Name of the bank.
          type: string
        routingNumber:
          description: Bank routing number.
          type: string
        accountNumberType:
          description: >-
            Type of bank account number.

            A 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.
            This value contains alphanumeric characters.
            Depending on the type of bank account number,
            a bank account fingerprint is generated using one of the following:
            - BBAN: `last4` and `routingNumber` values.
            - 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.

            All future payments are processed by this gateway account.


            For 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'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        revision:
          description: >-
            Number of times the payment instrument data has been modified.


            Use 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'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        stickyGatewayAccountId:
          description: >-
            ID of the sticky gateway account.

            All future payments are processed by this gateway account.


            For 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.


            Use this value when analyzing webhook data to determine if a change
            must take precedence over the current representation.
          type: integer
          readOnly: true
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - customer
                  - authTransaction
                  - approvalUrl
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            authTransaction:
              type: object
            customer:
              type: object
    KhelocardCard:
      type: object
      title: Khelocard card
      required:
        - method
      properties:
        id:
          type: string
          description: ID of the payment instrument.
          readOnly: true
          maxLength: 50
          example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
        customerId:
          $ref: '#/components/schemas/CustomerId'
        method:
          description: Method of payment instrument.
          type: string
          enum:
            - Khelocard
        fingerprint:
          description: >-
            Unique value which identifies the payment instrument.

            This value contains alphanumeric characters.

            This 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'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        stickyGatewayAccountId:
          description: >-
            ID of the sticky gateway account.

            All future payments are processed by this gateway account.


            For 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.


            Use 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
        - 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
        - Cleo
        - CODVoucher
        - Conekta-oxxo
        - Cupon-de-pagos
        - cryptocurrency
        - domestic-cards
        - Directa24Card
        - echeck
        - ecoPayz
        - ecoVoucher
        - Efecty
        - EPS
        - ePay.bg
        - eZeeWallet
        - FasterPay
        - Flexepin
        - Giropay
        - Gpaysafe
        - Google Pay
        - iDebit
        - iDEAL
        - ING-homepay
        - INOVAPAY-pin
        - INOVAPAY-wallet
        - InstaDebit
        - instant-bank-transfer
        - InstantPayments
        - Interac
        - Interac-online
        - Interac-eTransfer
        - invoice
        - iWallet
        - Jeton
        - JetonCash
        - jpay
        - KakaoPay
        - Khelocard
        - Klarna
        - KNOT
        - loonie
        - Matrix
        - MaxiCash
        - Megafon
        - MercadoPago
        - MiFinity-eWallet
        - miscellaneous
        - MobilePay
        - Bancontact
        - Bancontact-mobile
        - MTS
        - MuchBetter
        - Multibanco
        - Neosurf
        - Netbanking
        - Neteller
        - Nordea-Solo
        - OchaPay
        - online-bank-transfer
        - Onlineueberweisen
        - oriental-wallet
        - OXXO
        - P24
        - Pagadito
        - PagoEffectivo
        - Pagsmile-deposit-express
        - Pagsmile-lottery
        - PayCash
        - Payco
        - Payeer
        - PaymentAsia-crypto
        - Paymero
        - Perfect-money
        - Piastrix
        - PIX
        - plaid-account
        - PayTabs
        - Paysafecard
        - Paysafecash
        - Pay4Fun
        - Paynote
        - PinPay
        - phone
        - PhonePe
        - POLi
        - PostFinance-card
        - PostFinance-e-finance
        - QIWI
        - QPay
        - QQPay
        - rapyd-checkout
        - Resurs
        - SafetyPay
        - Samsung Pay
        - SEPA
        - Skrill
        - Skrill Rapid Transfer
        - SMSVoucher
        - Sofort
        - SparkPay
        - swift-dbt
        - Tele2
        - Terminaly-RF
        - ToditoCash-card
        - Trustly
        - Tupay
        - UPayCard
        - UPI
        - USD-coin
        - VCreditos
        - VenusPoint
        - 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
    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'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        stickyGatewayAccountId:
          description: >-
            ID of the sticky gateway account.

            All future payments are processed by this gateway account.


            For more information,

            see [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.


            Use this value when analyzing webhook data to determine if a change
            must take precedence over the current representation.
          type: integer
          readOnly: true
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - customer
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            customer:
              type: object
    PaymentInstrument:
      discriminator:
        propertyName: method
        mapping:
          payment-card: '#/components/schemas/PaymentCard'
          ach: '#/components/schemas/BankAccount'
          paypal: '#/components/schemas/PayPalAccount'
          Khelocard: '#/components/schemas/KhelocardCard'
          cash: '#/components/schemas/AlternativeInstrument'
          check: '#/components/schemas/AlternativeInstrument'
          AdvCash: '#/components/schemas/AlternativeInstrument'
          Alfa-click: '#/components/schemas/AlternativeInstrument'
          Alipay: '#/components/schemas/AlternativeInstrument'
          AstroPay Card: '#/components/schemas/AlternativeInstrument'
          AstroPay-GO: '#/components/schemas/AlternativeInstrument'
          BankReferenced: '#/components/schemas/AlternativeInstrument'
          bank-transfer: '#/components/schemas/AlternativeInstrument'
          bank-transfer-2: '#/components/schemas/AlternativeInstrument'
          bank-transfer-3: '#/components/schemas/AlternativeInstrument'
          bank-transfer-4: '#/components/schemas/AlternativeInstrument'
          bank-transfer-5: '#/components/schemas/AlternativeInstrument'
          bank-transfer-6: '#/components/schemas/AlternativeInstrument'
          bank-transfer-7: '#/components/schemas/AlternativeInstrument'
          bank-transfer-8: '#/components/schemas/AlternativeInstrument'
          bank-transfer-9: '#/components/schemas/AlternativeInstrument'
          Baloto: '#/components/schemas/AlternativeInstrument'
          Beeline: '#/components/schemas/AlternativeInstrument'
          Belfius-direct-net: '#/components/schemas/AlternativeInstrument'
          bitcoin: '#/components/schemas/AlternativeInstrument'
          Bizum: '#/components/schemas/AlternativeInstrument'
          Boleto: '#/components/schemas/AlternativeInstrument'
          cash-deposit: '#/components/schemas/AlternativeInstrument'
          CASHlib: '#/components/schemas/AlternativeInstrument'
          CashToCode: '#/components/schemas/AlternativeInstrument'
          China UnionPay: '#/components/schemas/AlternativeInstrument'
          Cleo: '#/components/schemas/AlternativeInstrument'
          CODVoucher: '#/components/schemas/AlternativeInstrument'
          Conekta-oxxo: '#/components/schemas/AlternativeInstrument'
          Cupon-de-pagos: '#/components/schemas/AlternativeInstrument'
          cryptocurrency: '#/components/schemas/AlternativeInstrument'
          domestic-cards: '#/components/schemas/AlternativeInstrument'
          ecoPayz: '#/components/schemas/AlternativeInstrument'
          ecoVoucher: '#/components/schemas/AlternativeInstrument'
          Efecty: '#/components/schemas/AlternativeInstrument'
          EPS: '#/components/schemas/AlternativeInstrument'
          ePay.bg: '#/components/schemas/AlternativeInstrument'
          eZeeWallet: '#/components/schemas/AlternativeInstrument'
          FasterPay: '#/components/schemas/AlternativeInstrument'
          Flexepin: '#/components/schemas/AlternativeInstrument'
          Giropay: '#/components/schemas/AlternativeInstrument'
          Gpaysafe: '#/components/schemas/AlternativeInstrument'
          Google Pay: '#/components/schemas/AlternativeInstrument'
          iDebit: '#/components/schemas/AlternativeInstrument'
          iDEAL: '#/components/schemas/AlternativeInstrument'
          ING-homepay: '#/components/schemas/AlternativeInstrument'
          INOVAPAY-pin: '#/components/schemas/AlternativeInstrument'
          INOVAPAY-wallet: '#/components/schemas/AlternativeInstrument'
          InstaDebit: '#/components/schemas/AlternativeInstrument'
          instant-bank-transfer: '#/components/schemas/AlternativeInstrument'
          InstantPayments: '#/components/schemas/AlternativeInstrument'
          Interac: '#/components/schemas/AlternativeInstrument'
          Interac-online: '#/components/schemas/AlternativeInstrument'
          Interac-eTransfer: '#/components/schemas/AlternativeInstrument'
          invoice: '#/components/schemas/AlternativeInstrument'
          iWallet: '#/components/schemas/AlternativeInstrument'
          Jeton: '#/components/schemas/AlternativeInstrument'
          jpay: '#/components/schemas/AlternativeInstrument'
          Klarna: '#/components/schemas/AlternativeInstrument'
          KNOT: '#/components/schemas/AlternativeInstrument'
          loonie: '#/components/schemas/AlternativeInstrument'
          Matrix: '#/components/schemas/AlternativeInstrument'
          MaxiCash: '#/components/schemas/AlternativeInstrument'
          Megafon: '#/components/schemas/AlternativeInstrument'
          MiFinity-eWallet: '#/components/schemas/AlternativeInstrument'
          miscellaneous: '#/components/schemas/AlternativeInstrument'
          Bancontact: '#/components/schemas/AlternativeInstrument'
          Bancontact-mobile: '#/components/schemas/AlternativeInstrument'
          MTS: '#/components/schemas/AlternativeInstrument'
          MuchBetter: '#/components/schemas/AlternativeInstrument'
          Multibanco: '#/components/schemas/AlternativeInstrument'
          Neosurf: '#/components/schemas/AlternativeInstrument'
          Netbanking: '#/components/schemas/AlternativeInstrument'
          Neteller: '#/components/schemas/AlternativeInstrument'
          Nordea-Solo: '#/components/schemas/AlternativeInstrument'
          OchaPay: '#/components/schemas/AlternativeInstrument'
          online-bank-transfer: '#/components/schemas/AlternativeInstrument'
          Onlineueberweisen: '#/components/schemas/AlternativeInstrument'
          oriental-wallet: '#/components/schemas/AlternativeInstrument'
          OXXO: '#/components/schemas/AlternativeInstrument'
          P24: '#/components/schemas/AlternativeInstrument'
          Pagadito: '#/components/schemas/AlternativeInstrument'
          PagoEffectivo: '#/components/schemas/AlternativeInstrument'
          Pagsmile-deposit-express: '#/components/schemas/AlternativeInstrument'
          Pagsmile-lottery: '#/components/schemas/AlternativeInstrument'
          PayCash: '#/components/schemas/AlternativeInstrument'
          Payeer: '#/components/schemas/AlternativeInstrument'
          PaymentAsia-crypto: '#/components/schemas/AlternativeInstrument'
          Paymero: '#/components/schemas/AlternativeInstrument'
          Perfect-money: '#/components/schemas/AlternativeInstrument'
          Piastrix: '#/components/schemas/AlternativeInstrument'
          plaid-account: '#/components/schemas/AlternativeInstrument'
          PayTabs: '#/components/schemas/AlternativeInstrument'
          Paysafecard: '#/components/schemas/AlternativeInstrument'
          Paysafecash: '#/components/schemas/AlternativeInstrument'
          Pay4Fun: '#/components/schemas/AlternativeInstrument'
          Paynote: '#/components/schemas/AlternativeInstrument'
          PinPay: '#/components/schemas/AlternativeInstrument'
          phone: '#/components/schemas/AlternativeInstrument'
          PhonePe: '#/components/schemas/AlternativeInstrument'
          POLi: '#/components/schemas/AlternativeInstrument'
          PostFinance-card: '#/components/schemas/AlternativeInstrument'
          PostFinance-e-finance: '#/components/schemas/AlternativeInstrument'
          QIWI: '#/components/schemas/AlternativeInstrument'
          QPay: '#/components/schemas/AlternativeInstrument'
          QQPay: '#/components/schemas/AlternativeInstrument'
          rapyd-checkout: '#/components/schemas/AlternativeInstrument'
          Resurs: '#/components/schemas/AlternativeInstrument'
          SafetyPay: '#/components/schemas/AlternativeInstrument'
          SEPA: '#/components/schemas/AlternativeInstrument'
          Skrill: '#/components/schemas/AlternativeInstrument'
          Skrill Rapid Transfer: '#/components/schemas/AlternativeInstrument'
          SMSVoucher: '#/components/schemas/AlternativeInstrument'
          Sofort: '#/components/schemas/AlternativeInstrument'
          SparkPay: '#/components/schemas/AlternativeInstrument'
          swift-dbt: '#/components/schemas/AlternativeInstrument'
          Tele2: '#/components/schemas/AlternativeInstrument'
          Terminaly-RF: '#/components/schemas/AlternativeInstrument'
          ToditoCash-card: '#/components/schemas/AlternativeInstrument'
          Trustly: '#/components/schemas/AlternativeInstrument'
          UPayCard: '#/components/schemas/AlternativeInstrument'
          UPI: '#/components/schemas/AlternativeInstrument'
          USD-coin: '#/components/schemas/AlternativeInstrument'
          VCreditos: '#/components/schemas/AlternativeInstrument'
          VenusPoint: '#/components/schemas/AlternativeInstrument'
          voucher: '#/components/schemas/AlternativeInstrument'
          voucher-2: '#/components/schemas/AlternativeInstrument'
          voucher-3: '#/components/schemas/AlternativeInstrument'
          voucher-4: '#/components/schemas/AlternativeInstrument'
          Webmoney: '#/components/schemas/AlternativeInstrument'
          Webpay: '#/components/schemas/AlternativeInstrument'
          Webpay-2: '#/components/schemas/AlternativeInstrument'
          Webpay Card: '#/components/schemas/AlternativeInstrument'
          WeChat Pay: '#/components/schemas/AlternativeInstrument'
          XPay-P2P: '#/components/schemas/AlternativeInstrument'
          XPay-QR: '#/components/schemas/AlternativeInstrument'
          Yandex-money: '#/components/schemas/AlternativeInstrument'
          Zotapay: '#/components/schemas/AlternativeInstrument'
          Zimpler: '#/components/schemas/AlternativeInstrument'
      anyOf:
        - $ref: '#/components/schemas/PaymentCard'
        - $ref: '#/components/schemas/BankAccount'
        - $ref: '#/components/schemas/PayPalAccount'
        - $ref: '#/components/schemas/KhelocardCard'
        - $ref: '#/components/schemas/AlternativeInstrument'
    PaymentInstrumentCreateToken:
      title: Payment token
      type: object
      required:
        - customerId
        - token
      properties:
        customerId:
          $ref: '#/components/schemas/CustomerId'
        token:
          description: ID of the payment token.
          type: string
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        useAsBackup:
          $ref: '#/components/schemas/UseAsBackup'
    PaymentCardCreatePlain:
      title: Payment card
      type: object
      required:
        - method
        - customerId
        - pan
        - expYear
        - expMonth
        - billingAddress
      properties:
        method:
          description: Method of the payment instrument.
          type: string
          enum:
            - payment-card
        customerId:
          $ref: '#/components/schemas/CustomerId'
        pan:
          description: Primary Account Number (PAN) of the payment card.
          type: string
          writeOnly: true
        expYear:
          description: Expiration year of the payment card.
          type: integer
        expMonth:
          description: Expiration month of the payment card.
          type: integer
        cvv:
          description: Card Verification Value (CVV) of the payment card.
          type: string
          writeOnly: true
        billingAddress:
          description: Billing address.
          $ref: '#/components/schemas/ContactObject'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        riskMetadata:
          $ref: '#/components/schemas/RiskMetadata'
        useAsBackup:
          $ref: '#/components/schemas/UseAsBackup'
    BankAccountCreatePlain:
      title: Bank account
      type: object
      required:
        - accountNumberType
      discriminator:
        propertyName: accountNumberType
        mapping:
          BBAN: '#/components/schemas/BBANType'
          IBAN: '#/components/schemas/IBANType'
      properties:
        accountNumberType:
          type: string
          enum:
            - IBAN
            - BBAN
    BBANType:
      type: object
      description: BBAN type object.
      required:
        - accountNumberType
        - method
        - customerId
        - accountNumber
        - routingNumber
        - accountType
        - billingAddress
      allOf:
        - $ref: '#/components/schemas/BankAccountCreatePlain'
        - properties:
            method:
              description: Payment method of the payment instrument.
              type: string
              enum:
                - ach
            customerId:
              $ref: '#/components/schemas/CustomerId'
            accountNumberType:
              description: >-
                Bank account number type.

                A valid value is a Basic Bank Account Number (BBAN) or an
                International Bank Account Number (IBAN).
              type: string
              default: BBAN
              enum:
                - IBAN
                - BBAN
            accountNumber:
              description: >-
                Customer's bank account number.

                Detailed 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]+$
            routingNumber:
              description: Bank routing number.
              type: string
              pattern: ^[0-9]+$
            accountType:
              description: Bank account type.
              type: string
              enum:
                - checking
                - savings
                - other
            bankName:
              description: Bank name.
              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
      required:
        - accountNumberType
        - method
        - customerId
        - accountNumber
        - billingAddress
      description: IBAN type object.
      allOf:
        - $ref: '#/components/schemas/BankAccountCreatePlain'
        - properties:
            method:
              description: Payment method of the payment instrument.
              type: string
              enum:
                - ach
            customerId:
              $ref: '#/components/schemas/CustomerId'
            accountNumberType:
              description: >-
                Customer's bank account number type.

                A valid value is a Basic Bank Account Number (BBAN) or an
                International Bank Account Number (IBAN).
              type: string
              default: BBAN
              enum:
                - IBAN
                - BBAN
            accountNumber:
              description: >-
                Customer's bank account number.

                Detailed 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
            bankName:
              description: Bank name.
              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'
    PaymentInstrumentUpdateToken:
      type: object
      properties:
        token:
          description: ID of the payment token.
          type: string
        billingAddress:
          description: >-
            Customer's billing address.

            If 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.

            All future payments are processed by this gateway account.

            To remove the sticky gateway account from a payment instrument, set
            this value to `null`.


            For more information,

            see [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.

            All future payments are processed by this gateway account.


            For more information,

            see [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.

            All future payments are processed by this gateway account.


            For more information,

            see [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.

        Use this formula for subscriptions that involve the same price,

        number of units, and reoccur over a fixed period of time.


        For 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:


            - Quantity in the order.
              This value may be variable if you are charging based on usage.
              If you are not charging based on usage,
              this value is determined when an order is created.

            - Price of the quantity range.
              Some formulas set a price based on defined product quantity ranges.

            For 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,

            number of units, and reoccur over a fixed period of time,

            such as every: day, week, month, year, or number of years.


            For example, a streaming company charges customers $13.99 each month
            for subscription period that is 6 months in duration.

            The 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.

        Use this formula to charge a flat fee per unit.

        For example, $0.10 per transaction or $4 per unit.


        For 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:


            - Quantity in the order.
              This value may be variable if you are charging based on usage.
              If you are not charging based on usage,
              this value is determined when an order is created.

            - Price of the quantity range.
              Some formulas set a price based on defined product quantity ranges.

            For 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.
            For example, $0.10 for each transaction or $4 per unit.

            If the value of this field is `0`, the product is free.
          type: number
          format: double
          example: 99.95
        minQuantity:
          description: |-
            Minimum permitted unit quantity.
            If 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.
            If 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.

        Use this formula to charge for units that are sold in specific
        quantities.


        For 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:


            - Quantity in the order.
              This value may be variable if you are charging based on usage.
              If you are not charging based on usage,
              this value is determined when an order is created.

            - Price of the quantity range.
              Some formulas set a price based on defined product quantity ranges.

            For 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.


            For example, a bank charges a merchant based on the number of
            transactions they complete each month.


            Price total | Max quantity | Description

            ------------|--------------|------------

            $50         | 1000         | Up to 1000 transactions

            $100        | 1500         | Between 1000 and 1500 transactions

            $200        | 3000         | Between 1500 and 3000 transactions

            $500        | null         | More than 3000 transactions


            - If the merchant completes 900 transaction in a month, they are
            charged $50.

            - If the merchant completes 1001 transaction in a month, they are
            charged $100.

            - If the merchant completes 2500  transaction in a month, they are
            charged $200.

            - 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.
                  If the value of this field is `0`, the product is free.
                type: number
                format: double
                example: 99.95
              maxQuantity:
                description: |-
                  Maximum permitted unit quantity.
                  If this value is `null`, no limit is in place.

                  This value starts from the end of the previous quantity range.
                  If there are no previous quantity ranges,
                  this value starts at 1.
                type:
                  - integer
                  - 'null'
                example: 1
                minimum: 1
                maximum: 999999999
        minQuantity:
          description: |-
            Minimum permitted unit quantity.
            If 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.

        Use this formula to charge for units that are sold within defined
        quantity ranges, or tiers.


        For 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:


            - Quantity in the order.
              This value may be variable if you are charging based on usage.
              If you are not charging based on usage,
              this value is determined when an order is created.

            - Price of the quantity range.
              Some formulas set a price based on defined product quantity ranges.

            For 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.

            If a customer buys a number of units that span more than one tier,

            the total cost is calculated based on the cost of the units in each
            tier.


            For example, a software company sells user licenses based on the
            following:


            Tier | Price per user | Max quantity | Description

            -----|----------------|--------------|------------

            1    | $40            | 3            | 1 to 3 user licenses

            2    | $30            | 5            | 5 to 8 user licenses

            3    | $15            | null         | 9 or more user licenses


            If a customer buys 10 user licenses, the pricing is as follows:

            - 3 licenses at tier 1 (3 x $40) is 120

            - 5 licenses at tier 2 (5 x $30) is 150

            - 2 licenses at tier 3 (2 x $15) is 30


            Total cost = $330


            Formula: `(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.
                  If the value of this field is `0`, the product is free.
                type: number
                format: double
                example: 99.95
              maxQuantity:
                description: |-
                  Maximum permitted unit quantity.
                  If this value is `null`, no limit is in place.

                  This value starts from the end of the previous quantity range.
                  If there are no previous quantity ranges,
                  this value starts at 1.
                type:
                  - integer
                  - 'null'
                example: 1
                minimum: 1
                maximum: 999999999
        minQuantity:
          description: |-
            Minimum permitted unit quantity.
            If 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.

        Use this formula to charge for units that are sold in bulk,

        or volume ranges. In general,

        this formula means that a customer pays less per unit when they buy a
        large volume of units.


        For 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:


            - Quantity in the order.
              This value may be variable if you are charging based on usage.
              If you are not charging based on usage,
              this value is determined when an order is created.

            - Price of the quantity range.
              Some formulas set a price based on defined product quantity ranges.

            For 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.

            This formula enables customers to pays less per unit when they buy a
            large volume of units.

            Unit cost is based on the highest volume range, and does not include
            lower volume range pricing.


            For example, a company sells t-shirts in the following volume
            ranges:


            Price per unit| Max quantity | Description

            --------------|--------------|------------

            $10           | 1            | 1 t-shirt

            $8            | 5            | 2 to 5 t-shirts

            $4            | null         | 6 or more t-shirts


            - If a customer buys 1 unit, they pay $10.

            - If a customer buys 3 units, they pay $24 per unit, which is $8 per
            unit.

            - 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.
                  If the value of this field is `0`, the product is free.
                type: number
                format: double
                example: 99.95
              maxQuantity:
                description: |-
                  Maximum permitted unit quantity.
                  If this value is `null`, no limit is in place.

                  This value starts from the end of the previous quantity range.
                  If there are no previous quantity ranges,
                  this value starts at 1.
                type:
                  - integer
                  - 'null'
                example: 1
                minimum: 1
                maximum: 999999999
        minQuantity:
          description: |-
            Minimum permitted unit quantity.
            If 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: Set up information of the plan.
      required:
        - price
      properties:
        price:
          description: |-
            Price of setting up the plan.
            If your service charges a set up fee, specify it here.
            To charge no set up fee, set this value to `0`.
          type: number
          format: double
    OneTimeSalePlan:
      type: object
      description: >-
        Details of the one-time sale plan. Use this plan for non-recurring,
        one-time, sales.
      required:
        - name
        - currency
        - productId
        - pricing
      properties:
        id:
          type: string
          description: ID of the plan.
          maxLength: 50
          example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
          readOnly: true
        name:
          description: |-
            Name of the plan.
            This name is displayed on invoices and receipts.
          type: string
          maxLength: 255
        description:
          type: string
          description: |-
            Plain-text description of the plan.
            This field accepts plain-text only.
          maxLength: 65535
        richDescription:
          type: string
          description: >-
            Rich-text description of the plan.

            This 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.

            Compare this value with materialized subscription item revision
            values.
        isTrialOnly:
          type: boolean
          description: >-
            Specifies if a plan is a trial that does not have recurring
            instructions.
          readOnly: true
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - attachments
    ServicePeriodAnchorInstruction:
      type:
        - object
        - 'null'
      description: |-
        Instruction for calculating the service period anchor.

        The service period anchor is used, in conjunction with the subscription
        start 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'
      anyOf:
        - $ref: '#/components/schemas/SchedulingMethodDayOfMonth'
        - $ref: '#/components/schemas/SchedulingMethodDayOfWeek'
    PlanTrial:
      type:
        - object
        - 'null'
      required:
        - price
        - period
      properties:
        price:
          description: |-
            Price of setting up a trial.
            If your service charges a fee for a trial, specify it here.
            To 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.


        Invoice time shift adjusts the invoice issue and due date when billing
        must occur before the service period changes.


        Use invoice time shift in conjunction with `billingTiming` to:


        - Bill immediately when the service period starts.

        - Bill immediately after the service period ends.

        - Bill at an interval of time before the service period starts.

        - Bill at an interval of time after the service period starts.

        - Bill at an interval of time before the service period ends.

        - Bill at an interval of time after the service period ends.
      properties:
        issueTimeShift:
          type: object
          description: >-
            Calculation instruction of the billing time.


            This is used in conjunction with the service period anchor to
            calculate

            the time at which the invoice is issued. For 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).
          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.


            This is used in conjunction with the billing anchor to calculate
            when

            an invoice is due for payment. For 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).


            The sequential order of due time shift is always after the due date.
          default:
            duration: 1
            unit: hour
          properties:
            duration:
              type: integer
              description: Amount of time by which to move the invoice due time or date.
              minimum: 1
            unit:
              description: Unit of time.
              oneOf:
                - $ref: '#/components/schemas/TimeUnit'
                - $ref: '#/components/schemas/TimePluralUnit'
    SubscriptionPlan:
      description: >-
        Details of the subscription order plan. Use this plan for subscriptions
        or sales that reoccur over a period of time.
      type: object
      required:
        - name
        - currency
        - productId
        - pricing
      properties:
        id:
          type: string
          description: ID of the plan.
          maxLength: 50
          example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
          readOnly: true
        name:
          description: |-
            Name of the plan.
            This name is displayed on invoices and receipts.
          type: string
          maxLength: 255
        description:
          type: string
          description: |-
            Plain-text description of the plan.
            This field accepts plain-text only.
          maxLength: 65535
        richDescription:
          type: string
          description: >-
            Rich-text description of the plan.

            This 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.

            Compare this value with materialized subscription item revision
            values.
        isTrialOnly:
          type: boolean
          description: >-
            Specifies if a plan is a trial that does not have recurring
            instructions.
          readOnly: true
        recurringInterval:
          description: |-
            Service interval settings.
            For a one-time sale, set this value to `null`.
          type: object
          required:
            - unit
            - length
          properties:
            periodAnchorInstruction:
              $ref: '#/components/schemas/ServicePeriodAnchorInstruction'
            unit:
              description: Unit of time.
              type: string
              enum:
                - day
                - week
                - month
                - year
            length:
              description: Length of time.
              type: integer
              minimum: 1
            limit:
              description: >-
                Number of invoices the subscription order generates.

                If this value is `1`, only the initial order creation is
                generated.


                Example: For a 1 year contract that is billed monthly,

                where the `periodUnit` is `month` and the `periodDuration` is
                `1`,

                set 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.

                For `prepaid` plans the customer pays when the service period
                starts,

                whereas, for `postpaid` plans, the customer pays when the
                service period ends.
              enum:
                - prepaid
                - postpaid
        trial:
          description: |-
            Trial configuration setting.
            If 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.

            Report usage during a service period and charge customers
            afterwards.

            Metered billing plans must be postpaid.
          properties:
            strategy:
              type: string
              enum:
                - sum
                - last
              x-enumDescriptions:
                sum: Total amount of reported invoice item quantity usage.
                last: Last reported invoice item quantity usage.
            min:
              description: >-
                Minimum quantity that is charged at the end of a service period
                regardless of reported usage.
              type:
                - number
                - 'null'
              format: float
              minimum: 0.01
            max:
              description: >-
                Maximum quantity that is charged at the end of a service period
                regardless of reported usage.
              type:
                - number
                - 'null'
              format: float
              minimum: 0.01
        invoiceTimeShift:
          deprecated: true
          $ref: '#/components/schemas/InvoiceTimeShift'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - attachments
    TrialOnlyPlan:
      description: |-
        Details of the trial-only plan.
        Use this plan for limited-time product trials.
        Trials may have a reduced fee, or may be free.
      type: object
      required:
        - name
        - currency
        - productId
        - trial
      properties:
        id:
          type: string
          description: ID of the plan.
          maxLength: 50
          example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
          readOnly: true
        name:
          description: |-
            Name of the plan.
            This name is displayed on invoices and receipts.
          type: string
          maxLength: 255
        description:
          type: string
          description: |-
            Plain-text description of the plan.
            This field accepts plain-text only.
          maxLength: 65535
        richDescription:
          type: string
          description: >-
            Rich-text description of the plan.

            This 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.

            Compare this value with materialized subscription item revision
            values.
        isTrialOnly:
          type: boolean
          description: >-
            Specifies if a plan is a trial that does not have recurring
            instructions.
          readOnly: true
        trial:
          description: Trial configuration settings.
          $ref: '#/components/schemas/PlanTrial'
        invoiceTimeShift:
          description: >-
            Use invoice time shift to adjust the invoice issue and due date when
            billing must occur before the service period changes.

            For example, rent must be paid in advance,

            so the invoice must be in advance of the billing date.

            For more information, see [Service period anchor, and billing
            timing, and invoice time
            shift](https://www.rebilly.com/docs/dev-docs/concepts/#service-period-anchor-and-billing-timing-and-invoice-time-shift).
          $ref: '#/components/schemas/InvoiceTimeShift'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - attachments
    Plan:
      anyOf:
        - $ref: '#/components/schemas/OneTimeSalePlan'
        - $ref: '#/components/schemas/SubscriptionPlan'
        - $ref: '#/components/schemas/TrialOnlyPlan'
    Product:
      type: object
      required:
        - name
      description: >-
        Products are the items that your business sells.

        Products include digital goods, services, and physical goods.

        Products appear on invoice line items.

        If you set a tax category identifier, taxes are calculated at invoice
        generation.

        If the product is shippable, shipping costs are calculated at invoice
        generation.

        Pricing and variations are set within plans.

        For 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.
            If 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.

            Product option values are defined in plans.

            For 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.

            For a complete list of supported tax categories, see [TaxJar sales
            tax API
            reference](https://developers.taxjar.com/api/reference/#get-list-tax-categories).

            If 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.


        To create a new plan, see [Create a
        plan](https://www.rebilly.com/catalog/all/plans/postplan).
      required:
        - id
      properties:
        id:
          description: ID of the plan.
          $ref: '#/components/schemas/ResourceId'
    FlexiblePlan:
      allOf:
        - type: object
          required:
            - id
          properties:
            id:
              type: string
              description: ID of the plan.
              maxLength: 50
              example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
        - anyOf:
            - $ref: '#/components/schemas/OneTimeSalePlan'
            - $ref: '#/components/schemas/SubscriptionPlan'
            - $ref: '#/components/schemas/TrialOnlyPlan'
    UsageLimits:
      type: object
      description: >-
        Specifies the soft and hard usage limit thresholds for an item with a
        metered billing plan.

        This value is ignored when the plan is not metered.
      properties:
        softLimit:
          type: object
          description: >-
            Defines thresholds for notification purposes.

            For example, to notify the customer that their usage is near the
            hard limit of their metered billing plan.

            This notification informs the customer so that they can upgrade
            their plan before the hard limit is reached.

            When the reported usage reaches 75%, 90%, and 100% of the configured
            limit a specific event is triggered.

            To notify the customer, a webhook and notification can be configured
            for this event.

            This field is useful for accounting and customer success purposes.

            The 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.

            Hard limits are used in addition to soft limits.

            When a soft limit is reached,

            a customer may receive a notification

            but the service can still be provided up to the hard limit value so
            that the customer can upgrade their plan.

            When the reported usage reaches the configured limit,

            a specific event is triggered.

            To notify the customer in the merchant system,

            or block a service,

            a webhook and notification can be configured for this event.

            When the total usage reaches the hard limit quantity,

            or amount values,

            metered 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
    QuoteSubscriptionItem:
      type: object
      required:
        - plan
      properties:
        id:
          description: ID of the quote item.
          readOnly: true
          type: string
          example: qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY
        type:
          description: Specifies the type of order item.
          type: string
          x-basic: true
          enum:
            - subscription
        quantity:
          description: |-
            Number of product units in the specified plan.
            Quantity for metered billing is always 0.
          type: integer
          default: 1
        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.
            This value is only used for metered billing items.
          example: 50% of the markup for approved transactions
          default: ''
          maxLength: 255
        usageLimits:
          oneOf:
            - $ref: '#/components/schemas/UsageLimits'
            - type: 'null'
          default: null
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
    QuoteOneTimeSaleItem:
      type: object
      required:
        - plan
      properties:
        id:
          description: ID of the quote item.
          readOnly: true
          type: string
          example: qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY
        type:
          description: Specifies the type of order item.
          type: string
          x-basic: true
          enum:
            - one-time-sale
        quantity:
          description: Number of product units in the specified plan.
          type: integer
          default: 1
        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.
            When a quote is accepted, a new order is created.
          type: string
          enum:
            - creation
        acceptanceConditions:
          type: array
          writeOnly: true
          description: >-
            Conditions that must be met for the quote to be automatically
            accepted.
          items:
            type: string
            enum:
              - customer
              - payment
            x-enumDescriptions:
              customer: Quote can be accepted by customer.
              payment: Related invoice must be paid in full.
          example:
            - payment
          default:
            - customer
        acceptanceFulfillment:
          type: array
          readOnly: true
          description: List of `acceptanceConditions` with fulfillment status.
          items:
            type: object
            properties:
              condition:
                type: string
                enum:
                  - customer
                  - payment
                  - organization
              isFulfilled:
                type: boolean
        invoiceId:
          type: string
          description: ID of the payment invoice.
          readOnly: true
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        status:
          description: Status of the quote.
          type: string
          readOnly: true
          enum:
            - draft
            - issued
            - accepted
            - rejected
            - canceled
            - expired
          x-enumDescriptions:
            draft: Quote can be edited. This quote cannot be sent to a customer.
            issued: Quote cannot be edited. This quote can be sent to a customer.
            accepted: Customer accepted the quote and created an order.
            rejected: Customer rejected the quote.
            canceled: Organization or customer canceled the quote.
            expired: Expired before customer or organization interaction.
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        order:
          type: object
          description: Properties of the related order.
          required:
            - items
          properties:
            id:
              description: ID of the related order.
              readOnly: true
              type:
                - string
                - 'null'
              maxLength: 50
              example: ord_01HVKA5975PJBSQ1SX72G3MSZC
            items:
              type: array
              description: Items included in the quote.
              minItems: 1
              items:
                $ref: '#/components/schemas/QuoteItem'
            autopay:
              type: boolean
              default: false
              description: >-
                Specifies if payment attempts for the related order are made
                automatically.

                If autopay is enabled, the payment is retrieved from the
                customer on the renewal date using the payment instrument that
                is set at `paymentInstrumentId`,

                or 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'
        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.

                This includes recurring items only.

                If 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.

            The default expiration time is one month from the time the quote is
            issued.

            In 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.
            The default value is the website URL.
          type: string
          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.


            For 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.

                  If the quote is issued, a customer can be redirected to the
                  `invoicePaymentFormUrl` value

                  to 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.

            When a quote is accepted, quote items and settings are applied to
            the related order.
          type: string
          enum:
            - change
        acceptanceConditions:
          type: array
          writeOnly: true
          description: >-
            Conditions that must be met for the quote to be automatically
            accepted.
          items:
            type: string
            enum:
              - customer
              - payment
            x-enumDescriptions:
              customer: Quote can be accepted by customer.
              payment: Related invoice must be paid in full.
          example:
            - payment
          default:
            - customer
        acceptanceFulfillment:
          type: array
          readOnly: true
          description: List of `acceptanceConditions` with fulfillment status.
          items:
            type: object
            properties:
              condition:
                type: string
                enum:
                  - customer
                  - payment
                  - organization
              isFulfilled:
                type: boolean
        invoiceId:
          type: string
          description: ID of the payment invoice.
          readOnly: true
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        status:
          description: Status of the quote.
          type: string
          readOnly: true
          enum:
            - draft
            - issued
            - accepted
            - rejected
            - canceled
            - expired
          x-enumDescriptions:
            draft: Quote can be edited. This quote cannot be sent to a customer.
            issued: Quote cannot be edited. This quote can be sent to a customer.
            accepted: >-
              Customer accepted the quote. Quote items and settings are applied
              to the order.
            rejected: Customer rejected the quote.
            canceled: Organization or customer canceled the quote.
            expired: Expired before customer or organization interaction.
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        order:
          type: object
          description: Properties of the related order.
          required:
            - id
            - items
          properties:
            id:
              description: ID of the related order.
              type: string
              maxLength: 50
              example: ord_01HVKA5975PJBSQ1SX72G3MSZC
            items:
              type: array
              description: Items included in the quote.
              minItems: 1
              items:
                $ref: '#/components/schemas/QuoteItem'
            renewalPolicy:
              description: >-
                Specifies if the order retains its current `renewalTime` or
                resets it to a newly calculated `renewalTime`.
              type: string
              default: retain
              enum:
                - reset
                - retain
            prorated:
              description: >-
                Specifies whether to give a pro rata credit for the amount of
                time remaining between the `effectiveTime` and the end of the
                current period.

                In addition, if the `renewalTime` is retained, by setting the
                `renewalPolicy` to `retain`,

                a 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.

                If this field is omitted, this value defaults to the time of
                quote acceptance.
              type:
                - string
                - 'null'
              format: date-time
            keepTrial:
              description: >-
                Specifies if the order must retain its active trial.

                This field is only applicable if `renewalPolicy` is set to
                `retain`.
              type: boolean
              default: false
            interimOnly:
              type: boolean
              default: true
              description: >-
                Specifies if the quotation invoice must include interim items
                only.

                If this value is set to `false`, all upcoming items are
                included.
            autopay:
              type:
                - boolean
                - 'null'
              description: >-
                Specifies if payment attempts for the related order are made
                automatically.

                If autopay is enabled, the payment is retrieved from the
                customer on the renewal date using the payment instrument that
                is set at `paymentInstrumentId`,

                or the default payment instrument on the order.

                If this value is `null`, the related order autopay is not
                affected.
            shipping:
              $ref: '#/components/schemas/Shipping'
        invoicePreview:
          type: object
          description: Preview of the quote invoice.
          readOnly: true
          properties:
            currency:
              description: Currency of the invoice.
              $ref: '#/components/schemas/CurrencyCode'
            initialAmounts:
              type: object
              description: Total amounts of the initial invoice.
              properties:
                amount:
                  description: Amount of the invoice.
                  type: number
                  x-type: Money
                  format: double
                subtotalAmount:
                  description: Subtotal amount of the invoice.
                  type: number
                  x-type: Money
                  format: double
                discountAmount:
                  description: Discount amount that is applied to the invoice.
                  type: number
                  x-type: Money
                  format: double
                shippingAmount:
                  description: Shipping amount that is applied to the invoice.
                  type: number
                  x-type: Money
                  format: double
                taxAmount:
                  description: Tax amount that is applied to the invoice.
                  type: number
                  x-type: Money
                  format: double
            recurringAmounts:
              type:
                - object
                - 'null'
              description: >-
                Total amounts of the recurring invoice.

                This includes recurring items only.

                If 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.

            The default expiration time is one month from the time the quote is
            issued.

            In 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.
            The default value is the website URL.
          type: string
          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.


            For 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.

                  If the quote is issued, a customer can be redirected to the
                  `invoicePaymentFormUrl` value

                  to 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.

            When a quote is accepted, quote items and settings are applied to
            the order and the order is reactivated.
          type: string
          enum:
            - reactivation
        acceptanceConditions:
          type: array
          writeOnly: true
          description: >-
            Conditions that must be met for the quote to be automatically
            accepted.
          items:
            type: string
            enum:
              - customer
              - payment
            x-enumDescriptions:
              customer: Quote can be accepted by customer.
              payment: Related invoice must be paid in full.
          example:
            - payment
          default:
            - customer
        acceptanceFulfillment:
          type: array
          readOnly: true
          description: List of `acceptanceConditions` with fulfillment status.
          items:
            type: object
            properties:
              condition:
                type: string
                enum:
                  - customer
                  - payment
                  - organization
              isFulfilled:
                type: boolean
        invoiceId:
          type: string
          description: ID of the payment invoice.
          readOnly: true
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        status:
          description: Status of the quote.
          type: string
          readOnly: true
          enum:
            - draft
            - issued
            - accepted
            - rejected
            - canceled
            - expired
          x-enumDescriptions:
            draft: Quote can be edited. This quote cannot be sent to a customer.
            issued: Quote cannot be edited. This quote can be sent to a customer.
            accepted: >-
              Customer accepted the quote. The related order is reactivated and
              quote items and settings are applied to the order.
            rejected: Customer rejected the quote.
            canceled: Organization or customer canceled the quote.
            expired: Expired before customer or organization interaction.
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        order:
          type: object
          description: Properties of the related order.
          required:
            - id
            - items
          properties:
            id:
              description: ID of the related order.
              type: string
              maxLength: 50
              example: ord_01HVKA5975PJBSQ1SX72G3MSZC
            items:
              type: array
              description: Items included in the quote.
              minItems: 1
              items:
                $ref: '#/components/schemas/QuoteItem'
            effectiveTime:
              description: >-
                Date and time when the service period starts,

                unless the order is canceled but still active.

                If the order is still active,

                the order continues for the current service period.


                If 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.

                If this field is omitted, this value is computed from the
                `effectiveTime` field.


                If the order is canceled but still active,

                it is ignored and the next renewal occurs as scheduled.
              type:
                - string
                - 'null'
              format: date-time
            paymentInstrumentId:
              description: >-
                ID of the payment instrument.

                If 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.

                If autopay is enabled, the payment is retrieved from the
                customer on the renewal date using the payment instrument that
                is set at `paymentInstrumentId`,

                or the default payment instrument on the order.

                If this value is `null`, the related order autopay is not
                affected.
            shipping:
              $ref: '#/components/schemas/Shipping'
        invoicePreview:
          type: object
          description: Preview of the quote invoice.
          readOnly: true
          properties:
            currency:
              description: Currency of the invoice.
              $ref: '#/components/schemas/CurrencyCode'
            initialAmounts:
              type: object
              description: Total amounts of the initial invoice.
              properties:
                amount:
                  description: Amount of the invoice.
                  type: number
                  x-type: Money
                  format: double
                subtotalAmount:
                  description: Subtotal amount of the invoice.
                  type: number
                  x-type: Money
                  format: double
                discountAmount:
                  description: Discount amount that is applied to the invoice.
                  type: number
                  x-type: Money
                  format: double
                shippingAmount:
                  description: Shipping amount that is applied to the invoice.
                  type: number
                  x-type: Money
                  format: double
                taxAmount:
                  description: Tax amount that is applied to the invoice.
                  type: number
                  x-type: Money
                  format: double
            recurringAmounts:
              type:
                - object
                - 'null'
              description: >-
                Total amounts of the recurring invoice.

                This includes recurring items only.

                If 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.

            The default expiration time is one month from the time the quote is
            issued.

            In 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.
            The default value is the website URL.
          type: string
          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.


            For 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.

                  If the quote is issued, a customer can be redirected to the
                  `invoicePaymentFormUrl` value

                  to 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. For examples, see
        [ISO.org](https://www.iso.org/obp/ui/#search/code/).
      type: string
      pattern: ^[A-Z]{2}$
      example: US
    ApplePayFeature:
      type: object
      title: Apple Pay Digital Wallet
      properties:
        name:
          type: string
          description: Name of the feature.
          enum:
            - Apple Pay
        displayName:
          description: >-
            String of 64 or fewer UTF-8 characters containing the canonical name
            for your store,

            that is suitable for display.

            Do not localize the name.
          type: string
          example: Test Merchant
        country:
          $ref: '#/components/schemas/Country'
    GooglePayFeature:
      type: object
      title: Google Pay Digital Wallet
      properties:
        name:
          type: string
          description: Name of the feature.
          enum:
            - Google Pay
        merchantName:
          description: Merchant name in Google Pay.
          type: string
          example: Test Merchant
        merchantOrigin:
          description: Merchant origin in Google Pay. The fully qualified domain name.
          type: string
          example: www.example.com
        country:
          $ref: '#/components/schemas/Country'
    SamsungPayFeature:
      type: object
      title: Samsung Pay Digital Wallet
      properties:
        name:
          type: string
          description: Name of the feature.
          enum:
            - Samsung Pay
        merchantName:
          description: Merchant name in Samsung Pay.
          type: string
          example: Test Merchant
    PaymentCardFeature:
      type: object
      discriminator:
        propertyName: name
        mapping:
          Apple Pay: '#/components/schemas/ApplePayFeature'
          Google Pay: '#/components/schemas/GooglePayFeature'
          Samsung Pay: '#/components/schemas/SamsungPayFeature'
      oneOf:
        - $ref: '#/components/schemas/ApplePayFeature'
        - $ref: '#/components/schemas/GooglePayFeature'
        - $ref: '#/components/schemas/SamsungPayFeature'
    ReadyToPayMethodFilters:
      type: array
      description: >-
        For the method to be applicable, one or more of the following filters
        must match.

        If no filters are sent, no restrictions are applied.

        For 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.
            For example, a digital wallet.
            If 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.
            For example, a digital wallet or a processor.
            If 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.
            For example, a digital wallet or a processor.
            If 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'
      anyOf:
        - $ref: '#/components/schemas/ReadyToPayPaymentCardMethod'
        - $ref: '#/components/schemas/ReadyToPayAchMethod'
        - $ref: '#/components/schemas/ReadyToPayGenericMethod'
        - $ref: '#/components/schemas/ReadyToPayPayPalMethod'
        - $ref: '#/components/schemas/ReadyToPayKlarnaMethod'
    SubscriptionOrOneTimeSaleItem:
      type: object
      required:
        - plan
      properties:
        id:
          type: string
          description: ID of the order item.
          readOnly: true
          maxLength: 50
        planId:
          description: ID of the plan.
          deprecated: true
          x-basic: true
          type: string
          maxLength: 50
          example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
        quantity:
          description: Number of product units in the specified plan.
          type: integer
        quantityFilled:
          description: Number of filled product units.
          type: integer
        plan:
          anyOf:
            - $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
        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.
            An order may be a subscription or a one-time purchase.

            > **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.

            A 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: >-
            Trial details.

            To use plan defaults do not send the `trial` key, or send a `null`
            value.
          properties:
            enabled:
              description: |-
                Specifies if there is a trial for this subscription.
                Plans without trial prices are free trials.
              type: boolean
            endTime:
              description: >-
                Time and date when the trial ends.

                If a trial is enabled on this subscription, a value must be
                provided.
              type:
                - string
                - 'null'
              format: date-time
        isTrialOnly:
          description: |-
            Specifies if a subscription ends after a trial period.
            If this value is `true`, recurring settings are ignored.
          type: boolean
          default: false
        isTrialConverted:
          description: Use `trialConversionTime` field instead.
          type: boolean
          readOnly: true
          example: true
          deprecated: true
        trialConversionTime:
          description: >-
            Date and time when the subscription had a trial conversion.

            Trial 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.

            This setting overrides plan settings.
            To use plan settings, set this value to `null`.

            To use multiple plans in one subscription,
            all plans must have the same billing period,
            this property enables the customer to subscribe to different plans.
          $ref: '#/components/schemas/InvoiceTimeShift'
        recurringInterval:
          type:
            - object
            - 'null'
          description: |-
            Recurring interval to override plan settings.
            To use plan settings, set this value to `null`.

            To use multiple plans in one subscription,
            all 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.

            If autopay is enabled, the payment is retrieved from the customer on
            the renewal date using the payment instrument that is set at
            `paymentInstrumentId`,

            or the default payment instrument on the subscription.
          type: boolean
          default: true
        startTime:
          description: |-
            Date and time when the subscription starts.
            If this value is `null`, the current time is used.
            This value cannot be more than one service period in the past.
          type:
            - string
            - 'null'
          x-sortable: true
          x-basic: true
          example: null
          format: date-time
        churnTime:
          description: Date and time when the subscription is deactivated.
          x-sortable: true
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        renewalTime:
          description: Date and time when the subscription renews.
          type:
            - string
            - 'null'
          x-sortable: true
          x-basic: true
          format: date-time
        rebillNumber:
          description: Current billing period number.
          type:
            - integer
            - 'null'
          readOnly: true
          x-sortable: true
        lineItems:
          description: >-
            Subscription line items which queue until the next renewal, or
            interim, invoice is issued for the subscription.
          readOnly: true
          type: array
          deprecated: true
          items:
            type: object
            description: >-
              Invoice line item. Use 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
          description: |-
            Subtotal of line items in this subscription (signed value).
            If 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.

            If this value is not provided, or if the payment instrument is
            inactive,

            the customer's default payment instrument is used.
          maxLength: 50
          example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
        billingStatus:
          description: >-
            Billing status of the most recent invoice.

            This value may help you to determine if you should change the
            service status of the service,

            such 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.

            A website is where an organization obtains a customer.

            For 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).


            > **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.
            The 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.

            If this value is not passed during order creation,

            a [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,

            which is added to the due time of the order when setting the
            delinquency time for all related invoices.

            When the delinquency time of an invoice is reached, the order is
            automatically canceled.


            If this value is not passed during order creation,

            an [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.


            For more information, see
            [Coupons](https://www.rebilly.com/docs/settings/coupons-and-discounts/).


            This parameter uses the following logic:


            - If this parameter is not supplied, applied coupons are not
            changed.

            - If an empty array is supplied, all applied coupon redemptions are
            canceled.

            - If a list of coupons is supplied, unapplied coupons in the list
            are applied.
              Coupons that have already been applied do not change state.
              Applied coupons that are not supplied in list are canceled.

            If the list of applied coupons on a pending order is changed by this
            parameter during an order update, the invoice for the order is
            reissued.
          writeOnly: true
          items:
            type: string
            description: ID of the coupon.
        poNumber:
          description: Purchase order number displayed on the issued invoices.
          type:
            - string
            - 'null'
          example: PO123456
        shipping:
          $ref: '#/components/schemas/Shipping'
        notes:
          description: Notes for the customer displayed on the order invoice.
          type: string
        canceledBy:
          description: Specifies who initiated the cancellation.
          type:
            - string
            - 'null'
          readOnly: true
          enum:
            - merchant
            - customer
            - rebilly
            - null
        cancelCategory:
          description: Category of the cancellation.
          type:
            - string
            - 'null'
          readOnly: true
          enum:
            - billing-failure
            - delinquency
            - did-not-use
            - did-not-want
            - missing-features
            - bugs-or-problems
            - do-not-remember
            - risk-warning
            - contract-expired
            - too-expensive
            - never-started
            - switched-plan
            - organization-deactivated
            - other
            - null
        cancelDescription:
          description: Description of the cancellation reason in free form.
          type:
            - string
            - 'null'
          readOnly: true
          maxLength: 255
        revision:
          description: >-
            Number of times the order data has been modified.


            The revision is useful when analyzing webhook data to determine if
            the

            change takes precedence over the current representation.
          type: integer
          readOnly: true
        riskMetadata:
          description: >-
            Risk metadata.

            If 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 billing portal. This field is presented only
            if billing portal exists.

            This 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.
            An 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.

            This value may help you to determine if you should change the
            service status of the service,

            such 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.
            The 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.

            If this value is not passed during order creation,

            a [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.


            For more information, see
            [Coupons](https://www.rebilly.com/docs/settings/coupons-and-discounts/).


            This parameter uses the following logic:


            - If this parameter is not supplied, applied coupons are not
            changed.

            - If an empty array is supplied, all applied coupon redemptions are
            canceled.

            - If a list of coupons is supplied, unapplied coupons in the list
            are applied.
              Coupons that have already been applied do not change state.
              Applied coupons that are not supplied in list are canceled.

            If 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.


            The revision is useful when analyzing webhook data to determine if
            the

            change takes precedence over the current representation.
          type: integer
          readOnly: true
        riskMetadata:
          description: >-
            Risk metadata.

            If 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.
            Includes 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.
            If `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.

                If 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.
                If `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'
    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.

              To remove an item, include the items array and exclude the items
              you want to remove.
            required:
              - plan
            properties:
              plan:
                description: Plan details.
                oneOf:
                  - $ref: '#/components/schemas/OriginalPlan'
                  - $ref: '#/components/schemas/FlexiblePlan'
              quantity:
                description: Number of units of the product on the given plan.
                type: integer
              usageLimits:
                $ref: '#/components/schemas/UsageLimits'
        renewalPolicy:
          description: >-
            Specifies if the subscription retains its current `renewalTime` or
            resets it to a newly calculated `renewalTime`.
          type: string
          enum:
            - reset
            - retain
        prorated:
          description: >-
            Specifies whether to give a pro rata credit for the amount of time
            remaining between the `effectiveTime` and the end of the current
            period.


            In addition, if the `renewalTime` is retained, by setting the
            `renewalPolicy` to `retain`,

            a 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.

            If 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.
            Subscriptions cannot be changed in preview.
          type: boolean
          default: false
        keepTrial:
          description: |-
            Specifies if the subscription order must retain its active trial.
            This field is only applicable if `renewalPolicy` is set to `retain`.
          type: boolean
          default: false
        ignoreRecurring:
          description: >-
            Specifies if the subscription order must ignore the recurring
            settings of items in the order.

            This field is only applicable if the subscription is trial-only and
            the `keepTrial` value is `true`.

            For more information, see [Trial-only
            subscription](https://www.rebilly.com/docs/dev-docs/subscriptions#trial-only-subscription).
          type: boolean
          default: false
    SubscriptionItemUpdate:
      type: object
      required:
        - quantityFilled
      properties:
        quantityFilled:
          description: Filled quantity of the subscription item (experimental property).
          type: integer
        excludeFromMrr:
          type: boolean
          description: >-
            Specifies if this item should be excluded from monthly recurring
            revenue calculations.
    SubscriptionInvoice:
      type: object
      properties:
        transactionId:
          description: >-
            If present, applies a payment to the invoice created. If 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.


            This time must be later than the current time.

            If this time is earlier then the current time, the current time is
            used.


            If 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.


            To resume a subscription from this point in time,

            use the current time or an earlier time.

            If `endTime` is earlier then the current time, the current time is
            used.

            If 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.

            By default, this value is computed as the time between the pause and
            the renewal.


            Example: A $30 per month subscription on a 30-day month is paused on
            day 20 of the subscription.

            There are 10 unused days on the subscription.

            Therefore, the subscription renews in 10 days after it is resumed.

            The upcoming invoice does not change the amount for the invoiced
            period, it remains at $30.

            If the subscription uses a billing anchor,

            the 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),

            and the billing anchor is ignored for that period.


            For more information, see [Service period anchor, billing timing,
            and invoice time
            shift](https://www.rebilly.com/docs/dev-docs/concepts/#service-period-anchor-and-billing-timing-and-invoice-time-shift).
          type:
            - string
            - 'null'
          example: P3600S
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    SubscriptionCancellation:
      type: object
      required:
        - subscriptionId
      properties:
        id:
          type: string
          description: ID of the cancellation.
          readOnly: true
          maxLength: 50
          example: sub_cnl_0YVJ5XVQM9CDP8248ZQX0RDMKV
        subscriptionId:
          type: string
          description: ID of the canceled subscription order.
          maxLength: 50
          example: sub_01HRF27SATGE4Z6PBJE6PD8328
        proratedInvoiceId:
          type:
            - string
            - 'null'
          description: ID of the invoice on which the cancellation proration is calculated.
          readOnly: true
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        appliedInvoiceId:
          type:
            - string
            - 'null'
          description: >-
            ID of the invoice on which the cancellation fees or credits are
            applied.
          readOnly: true
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        canceledBy:
          description: Specifies who initiated the cancellation.
          type: string
          default: customer
          enum:
            - merchant
            - customer
            - rebilly
        reason:
          description: Reason for the cancellation.
          type: string
          default: other
          enum:
            - did-not-use
            - did-not-want
            - missing-features
            - bugs-or-problems
            - do-not-remember
            - risk-warning
            - contract-expired
            - too-expensive
            - other
            - billing-failure
        description:
          description: Description of the cancellation reason in free form.
          type: string
          maxLength: 255
        prorated:
          description: >-
            Specifies if the customer gets a pro-rata credit for the time
            remaining between `churnTime` and subscription next renewal time.
          type: boolean
          default: false
        status:
          description: Status of the subscription order.
          type: string
          default: confirmed
          enum:
            - draft
            - confirmed
            - completed
            - revoked
          x-enumDescriptions:
            draft: >-
              Creates a daft cancellation so that the cancellation and charge
              can be previewed.
            confirmed: |-
              Confirms a subscription cancellation.
              Sets the subscription to cancel when the `churnTime` is reached.
            completed: >-
              Marks a subscription cancellation as completed.

              This is a read-only status that is set when the `churnTime` is
              reached.

              The cancellation may not be changed or deleted when the status is
              `completed`.
            revoked: Revokes a subscription cancellation.
        canceledTime:
          description: >-
            Date and time when a subscription is cancelled.

            By 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.

            If 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.

            The `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.
            Proration 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,
            unless the subscription is canceled but still active.

            If the subscription is still active,
            the subscription continues for the current service period.

            If 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.

            If this field is omitted, this value is computed from the
            `effectiveTime` field.


            If the subscription is canceled but still active,

            it is ignored and the next renewal occurs as scheduled.
          type: string
          format: date-time
        paymentInstrumentId:
          writeOnly: true
          description: >-
            ID of the payment instrument.

            If 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.

            For example, an invoice item for a service is included in billing
            period number 3.

            The 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.

            Use the revision number when analyzing webhook data to
            determine if a change should take precedence over the current
            representation.
          type: integer
        organizationId:
          allOf:
            - $ref: '#/components/schemas/OrganizationId'
        items:
          type: array
          description: Upcoming invoice items array.
          items:
            $ref: '#/components/schemas/UpcomingInvoiceItem'
        amount:
          description: Amount of the invoice.
          type: number
          x-type: Money
          x-sortable: true
          x-basic: true
          format: double
          readOnly: true
        amountDue:
          description: Amount that is due on the invoice.
          type: number
          x-type: Money
          x-sortable: true
          format: double
          readOnly: true
        subtotalAmount:
          description: Subtotal amount of the invoice.
          type: number
          x-type: Money
          format: double
          readOnly: true
        discountAmount:
          description: Discount amount that is applied to the invoice.
          type: number
          x-type: Money
          format: double
          readOnly: true
        shipping:
          $ref: '#/components/schemas/Shipping'
        tax:
          $ref: '#/components/schemas/Taxes'
        billingAddress:
          description: Billing address of the invoice.
          $ref: '#/components/schemas/ContactObject'
        deliveryAddress:
          description: Delivery address of the invoice.
          $ref: '#/components/schemas/ContactObject'
        poNumber:
          description: Purchase order number that is displayed on the invoice.
          type:
            - string
            - 'null'
          example: PO123456
        notes:
          description: Notes for the customer that are displayed on the invoice.
          type: string
        discounts:
          type: array
          description: Discounts applied.
          readOnly: true
          items:
            type: object
            readOnly: true
            properties:
              couponId:
                type: string
                description: ID of the coupon.
                maxLength: 50
                example: cpn_0YVCNKF81GD778N4YNVGDJK558
              redemptionId:
                description: ID of the redemption.
                $ref: '#/components/schemas/ResourceId'
              amount:
                description: Total amount discounted by this coupon.
                type: number
                format: double
              description:
                type: string
                description: Description of the discount.
              context:
                $ref: '#/components/schemas/DiscountContext'
        dueTime:
          description: Date and time when the invoice is due for payment.
          type: string
          x-sortable: true
          format: date-time
        issuedTime:
          description: Date and time when the invoice is issued.
          x-label: Date Issued
          x-sortable: true
          x-basic: true
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - website
                  - customer
                  - organization
                  - subscription
                  - attachments
                  - leadSource
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          properties:
            customer:
              type: object
            website:
              type: object
            organization:
              type: object
            leadSource:
              type: object
    OrderTimeline:
      type: object
      properties:
        id:
          type: string
          description: ID of the timeline message.
          readOnly: true
          maxLength: 50
          example: tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC
        type:
          description: Type of timeline message.
          type: string
          readOnly: true
          enum:
            - coupon-applied
            - email-message-sent
            - invoice-abandoned
            - invoice-disputed
            - invoice-issued
            - invoice-paid
            - invoice-partially-paid
            - invoice-partially-refunded
            - invoice-past-due
            - invoice-refunded
            - invoice-reissued
            - invoice-renewal-payment-declined
            - invoice-voided
            - order-activated
            - order-autopay-changed
            - order-billing-address-changed
            - order-billing-anchor-changed
            - order-canceled
            - order-churned
            - order-completed
            - order-custom-fields-changed
            - order-delivery-address-changed
            - order-downgraded
            - order-items-changed
            - order-paid-early
            - order-quantity-changed
            - order-reactivated
            - order-recurring-interval-changed
            - order-renewal-time-changed
            - order-renewed
            - order-risk-metadata-changed
            - order-trial-ended
            - order-upgraded
            - order-voided
            - order-abandoned
            - quote-accepted
            - subscription-paused
            - subscription-pause-created
            - subscription-pause-modified
            - subscription-pause-revoked
            - subscription-resumed
            - subscription-trial-end-changed
            - timeline-comment-created
        triggeredBy:
          description: Specifies who, or what, triggered the timeline event.
          type: string
          readOnly: true
          enum:
            - rebilly
            - app
            - direct-api
        message:
          description: Contents of the timeline message.
          type: string
        extraData:
          $ref: '#/components/schemas/TimelineExtraData'
        occurredTime:
          description: Date and time when the timeline message occurred.
          readOnly: true
          $ref: '#/components/schemas/ServerTimestamp'
        _links:
          $ref: '#/components/schemas/SelfLink'
    Usage:
      type: object
      required:
        - subscriptionId
        - planId
        - quantity
      properties:
        id:
          type: string
          readOnly: true
          description: ID of the usage record.
          maxLength: 50
          example: sub_usg_0YVJ636B95DNA9M3B1638HXBCQ
        subscriptionId:
          type: string
          description: ID of the subscription for which a usage is reported.
          maxLength: 50
          example: sub_01HRF27SATGE4Z6PBJE6PD8328
        planId:
          type: string
          description: ID of the plan for which a usage is reported.
          maxLength: 50
          example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
        invoiceId:
          type:
            - string
            - 'null'
          description: >-
            ID of the invoice to which usage is applied. This 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. This value is
            populated when the invoice is issued.
          readOnly: true
          type:
            - string
            - 'null'
          maxLength: 50
          example: ii_0YVFDEQS2KCFTBN9HXWJFY55GV
        quantity:
          description: |-
            Number of used product units of a plan.
            Products are the goods and services that your business sells.
            Plans describe how the customer must pay for products.
          type: number
          format: float
          minimum: 0.01
        usageTime:
          description: >-
            Date and time, in ISO 8601 format, when a usage occurred.

            If 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.


            When set to `true`, the system automatically adjusts the reported
            quantity to the maximum allowed limit and reports the usage.

            When 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.

        A payment card token is a string that represents a customer's payment
        card details.

        It can be used once, and expires upon first use or within 30 minutes of
        token creation.

        To generate a full payment card token, you must provide the
        `billingAddress`.

        If `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.
                This value is required to perform a payment.
              type: string
              writeOnly: true
            cvv:
              description: Card Verification Value (CVV/CVC) of the payment card.
              type: string
              writeOnly: true
            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.
                This 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.
            This value is required to perform payments.
            For 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.

            A 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.

            A valid value is basic bank account number (BBAN) or international
            bank account number (IBAN).
          type: string
          enum:
            - IBAN
        accountNumber:
          description: >-
            Bank account number.

            Detailed 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'
      anyOf:
        - $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.

                This value is the same as the first 6 digits of the associated
                Primary Account Number (PAN).
              type:
                - string
                - 'null'
              format: bin
              readOnly: true
            last4:
              description: >-
                Last 4 digits of the Primary Account Number (PAN) of the payment
                card.
              type: string
              readOnly: true
            brand:
              readOnly: true
              allOf:
                - $ref: '#/components/schemas/PaymentCardBrand'
            expMonth:
              readOnly: true
              description: Payment card expiration month.
              type: integer
            expYear:
              readOnly: true
              description: Payment card expiration year.
              type: integer
            payload:
              writeOnly: true
              description: |-
                Digital wallet encoded data.
                This 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
        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'
    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/AlternativePaymentToken'
          domestic-cards: '#/components/schemas/AlternativePaymentToken'
          ecoPayz: '#/components/schemas/AlternativePaymentToken'
          ecoVoucher: '#/components/schemas/AlternativePaymentToken'
          Efecty: '#/components/schemas/AlternativePaymentToken'
          EPS: '#/components/schemas/AlternativePaymentToken'
          ePay.bg: '#/components/schemas/AlternativePaymentToken'
          eZeeWallet: '#/components/schemas/AlternativePaymentToken'
          FasterPay: '#/components/schemas/AlternativePaymentToken'
          Flexepin: '#/components/schemas/AlternativePaymentToken'
          Giropay: '#/components/schemas/AlternativePaymentToken'
          Gpaysafe: '#/components/schemas/AlternativePaymentToken'
          Google Pay: '#/components/schemas/AlternativePaymentToken'
          iDebit: '#/components/schemas/AlternativePaymentToken'
          iDEAL: '#/components/schemas/AlternativePaymentToken'
          ING-homepay: '#/components/schemas/AlternativePaymentToken'
          INOVAPAY-pin: '#/components/schemas/AlternativePaymentToken'
          INOVAPAY-wallet: '#/components/schemas/AlternativePaymentToken'
          InstaDebit: '#/components/schemas/AlternativePaymentToken'
          instant-bank-transfer: '#/components/schemas/AlternativePaymentToken'
          InstantPayments: '#/components/schemas/AlternativePaymentToken'
          Interac: '#/components/schemas/AlternativePaymentToken'
          Interac-online: '#/components/schemas/AlternativePaymentToken'
          Interac-eTransfer: '#/components/schemas/AlternativePaymentToken'
          invoice: '#/components/schemas/AlternativePaymentToken'
          iWallet: '#/components/schemas/AlternativePaymentToken'
          Jeton: '#/components/schemas/AlternativePaymentToken'
          jpay: '#/components/schemas/AlternativePaymentToken'
          KNOT: '#/components/schemas/AlternativePaymentToken'
          loonie: '#/components/schemas/AlternativePaymentToken'
          Matrix: '#/components/schemas/AlternativePaymentToken'
          MaxiCash: '#/components/schemas/AlternativePaymentToken'
          Megafon: '#/components/schemas/AlternativePaymentToken'
          MiFinity-eWallet: '#/components/schemas/AlternativePaymentToken'
          miscellaneous: '#/components/schemas/AlternativePaymentToken'
          Bancontact: '#/components/schemas/AlternativePaymentToken'
          Bancontact-mobile: '#/components/schemas/AlternativePaymentToken'
          MTS: '#/components/schemas/AlternativePaymentToken'
          MuchBetter: '#/components/schemas/AlternativePaymentToken'
          Multibanco: '#/components/schemas/AlternativePaymentToken'
          Neosurf: '#/components/schemas/AlternativePaymentToken'
          Netbanking: '#/components/schemas/AlternativePaymentToken'
          Neteller: '#/components/schemas/AlternativePaymentToken'
          Nordea-Solo: '#/components/schemas/AlternativePaymentToken'
          OchaPay: '#/components/schemas/AlternativePaymentToken'
          online-bank-transfer: '#/components/schemas/AlternativePaymentToken'
          Onlineueberweisen: '#/components/schemas/AlternativePaymentToken'
          oriental-wallet: '#/components/schemas/AlternativePaymentToken'
          OXXO: '#/components/schemas/AlternativePaymentToken'
          P24: '#/components/schemas/AlternativePaymentToken'
          Pagadito: '#/components/schemas/AlternativePaymentToken'
          PagoEffectivo: '#/components/schemas/AlternativePaymentToken'
          Pagsmile-deposit-express: '#/components/schemas/AlternativePaymentToken'
          Pagsmile-lottery: '#/components/schemas/AlternativePaymentToken'
          PayCash: '#/components/schemas/AlternativePaymentToken'
          Payeer: '#/components/schemas/AlternativePaymentToken'
          PaymentAsia-crypto: '#/components/schemas/AlternativePaymentToken'
          Paymero: '#/components/schemas/AlternativePaymentToken'
          Perfect-money: '#/components/schemas/AlternativePaymentToken'
          Piastrix: '#/components/schemas/AlternativePaymentToken'
          PayTabs: '#/components/schemas/AlternativePaymentToken'
          Paysafecard: '#/components/schemas/AlternativePaymentToken'
          Paysafecash: '#/components/schemas/AlternativePaymentToken'
          Pay4Fun: '#/components/schemas/AlternativePaymentToken'
          Paynote: '#/components/schemas/AlternativePaymentToken'
          PinPay: '#/components/schemas/AlternativePaymentToken'
          phone: '#/components/schemas/AlternativePaymentToken'
          PhonePe: '#/components/schemas/AlternativePaymentToken'
          POLi: '#/components/schemas/AlternativePaymentToken'
          PostFinance-card: '#/components/schemas/AlternativePaymentToken'
          PostFinance-e-finance: '#/components/schemas/AlternativePaymentToken'
          QIWI: '#/components/schemas/AlternativePaymentToken'
          QPay: '#/components/schemas/AlternativePaymentToken'
          QQPay: '#/components/schemas/AlternativePaymentToken'
          rapyd-checkout: '#/components/schemas/AlternativePaymentToken'
          Resurs: '#/components/schemas/AlternativePaymentToken'
          SafetyPay: '#/components/schemas/AlternativePaymentToken'
          SEPA: '#/components/schemas/AlternativePaymentToken'
          Skrill: '#/components/schemas/AlternativePaymentToken'
          Skrill Rapid Transfer: '#/components/schemas/AlternativePaymentToken'
          SMSVoucher: '#/components/schemas/AlternativePaymentToken'
          Sofort: '#/components/schemas/AlternativePaymentToken'
          SparkPay: '#/components/schemas/AlternativePaymentToken'
          swift-dbt: '#/components/schemas/AlternativePaymentToken'
          Tele2: '#/components/schemas/AlternativePaymentToken'
          Terminaly-RF: '#/components/schemas/AlternativePaymentToken'
          ToditoCash-card: '#/components/schemas/AlternativePaymentToken'
          Trustly: '#/components/schemas/AlternativePaymentToken'
          UPayCard: '#/components/schemas/AlternativePaymentToken'
          UPI: '#/components/schemas/AlternativePaymentToken'
          USD-coin: '#/components/schemas/AlternativePaymentToken'
          VCreditos: '#/components/schemas/AlternativePaymentToken'
          VenusPoint: '#/components/schemas/AlternativePaymentToken'
          voucher: '#/components/schemas/AlternativePaymentToken'
          voucher-2: '#/components/schemas/AlternativePaymentToken'
          voucher-3: '#/components/schemas/AlternativePaymentToken'
          voucher-4: '#/components/schemas/AlternativePaymentToken'
          Webmoney: '#/components/schemas/AlternativePaymentToken'
          Webpay: '#/components/schemas/AlternativePaymentToken'
          Webpay-2: '#/components/schemas/AlternativePaymentToken'
          Webpay Card: '#/components/schemas/AlternativePaymentToken'
          WeChat Pay: '#/components/schemas/AlternativePaymentToken'
          XPay-P2P: '#/components/schemas/AlternativePaymentToken'
          XPay-QR: '#/components/schemas/AlternativePaymentToken'
          Yandex-money: '#/components/schemas/AlternativePaymentToken'
          Zotapay: '#/components/schemas/AlternativePaymentToken'
          Zimpler: '#/components/schemas/AlternativePaymentToken'
      anyOf:
        - $ref: '#/components/schemas/PaymentCardToken'
        - $ref: '#/components/schemas/PayPalToken'
        - $ref: '#/components/schemas/BankAccountToken'
        - $ref: '#/components/schemas/DigitalWalletToken'
        - $ref: '#/components/schemas/PlaidAccountToken'
        - $ref: '#/components/schemas/KhelocardCardToken'
        - $ref: '#/components/schemas/KlarnaToken'
        - $ref: '#/components/schemas/AlternativePaymentToken'
    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.

                    The domain name must be registered in the Apple Pay console.

                    For 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.

            Only payment methods with at least one active gateway account are
            allowed.


            If not specified all available payment methods are displayed.


            Customer can choose any of those as well as the payment instrument
            for them.

            Additional steps occur via a redirect to `approvalUrl`.
          items:
            $ref: '#/components/schemas/PaymentMethod'
        receivedBy:
          description: Cash receiver's name. Available only for `cash` payment method.
          type: string
        reference:
          description: Check reference data. Available only for `check` payment method.
          type: string
    PaymentInstruction:
      oneOf:
        - $ref: '#/components/schemas/PaymentInstructionToken'
        - $ref: '#/components/schemas/PaymentInstructionInstrument'
        - $ref: '#/components/schemas/PaymentInstructionMethods'
        - $ref: '#/components/schemas/PaymentCardCreatePlain'
        - $ref: '#/components/schemas/BankAccountCreatePlain'
    TransactionQuery:
      type: object
      properties:
        transactionId:
          $ref: '#/components/schemas/TransactionId'
        result:
          description: Result of the transaction.
          type: string
          readOnly: true
          enum:
            - abandoned
            - approved
            - canceled
            - declined
            - unknown
        status:
          description: Status of the transaction.
          type: string
          readOnly: true
          enum:
            - completed
            - conn-error
            - disputed
            - never-sent
            - offsite
            - partially-refunded
            - pending
            - refunded
            - sending
            - suspended
            - timeout
            - voided
            - waiting-approval
            - waiting-capture
            - waiting-gateway
            - waiting-refund
        amount:
          description: Amount of the transaction.
          type: number
          format: double
          readOnly: true
        currency:
          readOnly: true
          $ref: '#/components/schemas/CurrencyCode'
    TransactionUpdate:
      type: object
      description: >-
        Updates the status of a transaction to `completed` with a specified
        `result` and optional currency and amount values.
      required:
        - result
      properties:
        result:
          description: Result of the transaction.
          type: string
          enum:
            - abandoned
            - approved
            - canceled
            - declined
        amount:
          description: Amount of the transaction.
          type: number
          format: double
        currency:
          description: Currency of the transaction.
          $ref: '#/components/schemas/CurrencyCode'
    TransactionRefund:
      type: object
      required:
        - amount
      properties:
        amount:
          description: Amount of the refund.
          type: number
          format: double
        description:
          description: Description of the refund.
          type: string
          maxLength: 255
        isProcessedOutside:
          description: Specifies if the refund is processed outside of Rebilly.
          type: boolean
          default: false
    TransactionTimeline:
      type: object
      properties:
        id:
          type: string
          description: ID of the timeline message.
          readOnly: true
          maxLength: 50
          example: tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC
        type:
          description: Type of timeline message.
          type: string
          readOnly: true
          enum:
            - amount-adjusted
            - blocklist-matched
            - bump-offer-accepted
            - bump-offer-presented
            - bump-offer-rejected
            - customer-redirected-offsite
            - customer-returned
            - dcc-offer-accepted
            - dcc-offer-forced
            - dcc-offer-presented
            - dcc-offer-rejected
            - dispute-changed
            - dispute-created
            - dispute-forfeited
            - dispute-lost
            - dispute-responded
            - dispute-won
            - gateway-connection-failed
            - gateway-connection-timed-out
            - gateway-response-received
            - offsite-transaction-completed
            - quickbooks-payment-created
            - quickbooks-refund-receipt-created
            - quickbooks-transaction-task-failed
            - risk-score-changed
            - timeline-comment-created
            - transaction-abandoned
            - transaction-amount-discrepancy-found
            - transaction-approved
            - transaction-canceled
            - transaction-capture-delayed
            - transaction-captured
            - transaction-declined
            - transaction-discrepancy-found
            - transaction-disputed
            - transaction-initiated
            - transaction-payment-method-changed
            - transaction-process-requested
            - transaction-processed
            - transaction-queried
            - transaction-reconciled
            - transaction-refunded
            - transaction-retried
            - transaction-rules-processed
            - transaction-scheduled-time-changed
            - transaction-timeout-resolved
            - transaction-updated
            - transaction-voided
            - transaction-waiting-gateway
            - transaction-waiting-gateway-completed
        triggeredBy:
          description: Specifies who, or what, triggered the timeline message.
          type: string
          readOnly: true
          enum:
            - rebilly
            - app
            - direct-api
        message:
          description: Contents of the timeline message.
          type: string
        extraData:
          $ref: '#/components/schemas/TimelineExtraData'
        occurredTime:
          description: Date and time when the timeline message occurred.
          readOnly: true
          $ref: '#/components/schemas/ServerTimestamp'
        _links:
          $ref: '#/components/schemas/SelfLink'
    FixedFeeFormula:
      type: object
      required:
        - type
        - currency
        - amount
      properties:
        type:
          description: Type of fee.
          type: string
          enum:
            - fixed-fee
        currency:
          $ref: '#/components/schemas/CurrencyCode'
        amount:
          description: Amount of the fee.
          type: number
          format: double
          example: 10
          x-type: Money
    Bips:
      type: number
      description: 'Basis points. Example: 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.

            This 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'
      anyOf:
        - $ref: '#/components/schemas/FixedFeeFormula'
        - $ref: '#/components/schemas/PercentageFeeFormula'
    SettlementPeriod:
      type: object
      description: |-
        Instruction for calculating the settlement time.
        The settlement time and settlement period anchor are used
        in conjunction with the transaction processed time,
        to calculate the time in which the amount settles.
      discriminator:
        propertyName: method
        mapping:
          date-interval: '#/components/schemas/SchedulingMethodDateInterval'
          immediately: '#/components/schemas/SchedulingMethodImmediately'
      anyOf:
        - $ref: '#/components/schemas/SchedulingMethodDateInterval'
        - $ref: '#/components/schemas/SchedulingMethodImmediately'
    SettlementSettings:
      type: object
      description: |-
        Settlement settings.
        Use 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.
            Use these settings to override either default settlement currency,
            period, 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.

            This 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.

            This value overrides the gateway account financial settings of the
            transaction.
          oneOf:
            - $ref: '#/components/schemas/SettlementSettings'
            - type: 'null'
    DepositRequest:
      type: object
      required:
        - websiteId
        - customerId
        - currency
      properties:
        id:
          type: string
          description: ID of the deposit request.
          readOnly: true
          maxLength: 50
          example: dep_req_0YVJ65BSGYC3EAT58SEX8KY6J7
        websiteId:
          description: >-
            Website ID of the deposit. This value specifies the website with
            which the deposit is associated.
          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.

            This list includes transactions that are created from the deposit
            request.

            There is a maximum of one `approved` transaction in the list.
          items:
            type: string
            maxLength: 50
        status:
          description: Status of the request.
          type: string
          readOnly: true
          enum:
            - created
            - pending
            - initiated
            - attempted
            - completed
            - expired
          x-enumDescriptions:
            created: >-
              Request is created, but it has not been visited by a customer.
              This is a temporary state.
            pending: >-
              Request has been visited by a customer, but no funds have been
              deposited yet. This is a temporary state.
            initiated: >-
              A funds deposit transaction has been initiated. This is a
              temporary state.
            attempted: >-
              A funds deposit transaction was attempted and declined. This is a
              temporary state.
            completed: >-
              A funds deposit transaction has been approved and completed. This
              is a permanent state.
            expired: >-
              Request expired without an approved deposit transaction. This is a
              permanent state.
        currency:
          $ref: '#/components/schemas/CurrencyCode'
        amounts:
          type: array
          description: >-
            List of available deposit amounts.


            If `amounts` is not specified when a deposit is created, amounts are
            determined from the chosen strategy.

            For 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
        customAmount:
          type:
            - object
            - 'null'
          description: >-
            Custom amount restrictions.

            If this value is `null`,  custom amounts are prohibited.

            If `customAmount` is not specified when a deposit request is
            created, amount restrictions are determined from the chosen
            strategy.

            For 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.


                For 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.


                A 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. This 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. The
            default value is the website URL.
          type: string
          format: uri
        expirationTime:
          description: >-
            Date and time at which the deposit request expires. The 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.

            This 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.

            Use 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.

            This notification is sent when the transaction result is finalized
            after a timeout or an offsite interaction.


            Do not interpret this notification as a confirmation,

            complete a `GET` request to confirm the result of the transaction.

            To ensure the request is not reattempted,

            when the result is confirmed, respond with a `2xx` HTTP status code.


            The following placeholders are available to use in this URI: `{id}`
            and `{result}`.

            These placeholders are replaced the with the transaction ID and
            result accordingly.
          type:
            - string
            - 'null'
          format: uri
        cashierToken:
          description: >-
            JSON Web Token (JWT) used to complete the deposit request.

            This 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.

            Custom 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: >-
            Website ID of the deposit. This value specifies the website with
            which the deposit is associated.
          type: string
          maxLength: 50
          example: web_0YV7DE4Z26DQSA1AC92FBJ7SEG
        customerId:
          $ref: '#/components/schemas/CustomerId'
        strategyId:
          description: >-
            ID of a strategy to be applied for this request for `amounts` and
            `customAmount`.

            If this field is not specified, a randomly selected strategy with a
            matching `filter` value is applied for empty `amounts` and
            `customAmount`.

            If there is no matching strategy, the default strategy with the
            following parameters is applied for empty `amounts` and
            `customAmount`:

            ```yaml
              amounts:
                calculator: absolute
                baseAmount: 10
                increments: [10, 20]
                adjustBaseToLastDeposit: true
              customAmount:
                minimum: 1
                multipleOf: 1
                maximum: 10000
            ```

            For more information, see [Create a deposit
            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.


            If `amounts` is not specified when a deposit request is created,
            amounts are determined from the chosen strategy.

            For 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.

            If 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.

            If this value is `null`,  custom amounts are prohibited.

            If `customAmount` is not specified when a deposit request is
            created, amount restrictions are determined from the chosen
            strategy.

            For 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.


                For 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.


                A 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. This 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. The
            default value is the website URL.
          type:
            - string
            - 'null'
          format: uri
        expirationTime:
          description: >-
            Date and time at which the deposit request expires. The 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.

            This notification is sent when the transaction result is finalized
            after a timeout or an offsite interaction.


            Do not interpret this notification as a confirmation,

            complete a `GET` request to confirm the result of the transaction.

            To ensure the request is not reattempted,

            when the result is confirmed, respond with a `2xx` HTTP status code.


            The following placeholders are available to use in this URI: `{id}`
            and `{result}`.

            These placeholders are replaced the with the transaction ID and
            result accordingly.
          type:
            - string
            - 'null'
          format: uri
    DepositStrategy:
      type: object
      required:
        - name
        - amounts
        - customAmount
      properties:
        id:
          type: string
          description: ID of the deposit strategy.
          readOnly: true
          maxLength: 50
          example: dep_str_0YVJ64MAHTDPA97H8S7R5MYR1M
        name:
          type: string
          description: Name of the strategy.
        filter:
          type: string
          description: >-
            Filter that uses deposit request properties to determine if a
            deposit strategy is applicable for the request.

            If this field is empty, the strategy is applicable for any request.
          default: ''
          example: depositRequest.currency:USD
        amounts:
          type: object
          description: Deposit strategy amounts configuration.
          required:
            - calculator
            - baseAmount
            - increments
          properties:
            calculator:
              type: string
              description: >-
                Deposit amounts calculator.

                This field specifies if amounts are calculated using an absolute
                or percentage calculation.


                Amounts are specified in `baseAmount`, and increments are
                specified in `increments`.


                Example: `baseAmount: 10` and `increments: [20, 50, 100]`.


                - If the calculator is set to `absolute`: the amounts displayed
                to the customer are `[10, 30, 60, 110]`.

                - 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.


                For 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
            adjustBaseToLastDeposit:
              type: boolean
              default: false
              description: >-
                Specifies if the base amount must be adjusted based on the last
                deposit.

                If 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).


                If the customer has no successful deposits, `baseAmount` is not
                adjusted.
        customAmount:
          type:
            - object
            - 'null'
          description: >-
            Custom amount restrictions.

            If this value is `null`,  custom amounts are prohibited.

            If `customAmount` is not specified when a deposit request is
            created, amount restrictions are determined from the chosen
            strategy.

            For 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.


                For 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.


                A 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. This value must be equal to `minimum` + X
                * `multipleOf`, where X is any positive integer.
              type: number
              format: double
              minimum: 0.01
        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.

            This field accepts [JSON-schema](https://json-schema.org/) drafts 4,
            6, and 7.

            Accepted properties types are: `string`, `number`, `integer`,
            `array`, and `enum`.

            For 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'
    PayoutRequestCancellation:
      description: Reason the payout request is canceled.
      type:
        - object
        - 'null'
      readOnly: true
      properties:
        canceledBy:
          description: Specifies who initiated the cancellation.
          type: string
          default: customer
          enum:
            - merchant
            - customer
        description:
          description: Description of the cancellation reason in free form.
          type: string
          maxLength: 255
    PayoutRequest:
      type: object
      required:
        - websiteId
        - customerId
        - currency
        - amount
      properties:
        id:
          type: string
          readOnly: true
          description: Unique resource ID.
          maxLength: 50
          example: pout_req_0YVDMDE2BMC6KBB5MX76RF6T80
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          description: ID of the customer who is requesting a payout.
          $ref: '#/components/schemas/CustomerId'
        paymentInstrumentId:
          type:
            - string
            - 'null'
          description: ID of the requested payment instrument to offer for the payout.
          maxLength: 50
          example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
        currency:
          description: Currency of the payout.
          $ref: '#/components/schemas/CurrencyCode'
        amount:
          description: Amount of the payout.
          type: number
          format: double
          x-type: Money
        availableAmount:
          description: Available payout request amount that has not been allocated.
          readOnly: true
          type: number
          format: double
          x-type: Money
        description:
          description: Description of payout request.
          type:
            - string
            - 'null'
        status:
          description: Status of the request.
          type: string
          readOnly: true
          enum:
            - pending
            - instrument-selected
            - partially-fulfilled
            - fulfilled
            - canceled
          x-enumDescriptions:
            pending: >-
              Request is awaiting customer's selection of the payment instrument
              or fulfillment.
            instrument-selected: >-
              Request has a selected payment instrument and is awaiting
              fulfillment.
            partially-fulfilled: >-
              Request is partially paid out when `availableAmount` is less than
              `amount`.
            fulfilled: Request is fully paid out when `availableAmount` reaches zero.
            canceled: Request is canceled by merchant or customer.
        selectPaymentInstrumentUrl:
          readOnly: true
          type: string
          format: uri
          description: URL for the customer to select a preferred payment instrument.
        allocations:
          type: array
          description: >-
            List of credit transactions that are allocated to reduce the
            available amount of a payout request.
          readOnly: true
          items:
            type: object
            properties:
              transactionId:
                description: >-
                  ID of the transaction to which the payout request is
                  allocated.
                $ref: '#/components/schemas/TransactionId'
              transactionResult:
                description: Result of a transaction.
                type: string
                x-basic: true
                readOnly: true
                enum:
                  - abandoned
                  - approved
                  - canceled
                  - declined
                  - unknown
              method:
                $ref: '#/components/schemas/PaymentMethod'
              gatewayName:
                description: >-
                  Name of the payment gateway that processed, or is selected to
                  process, the transaction.
                x-label: Gateway account
                x-basic: true
                $ref: '#/components/schemas/GatewayName'
              paymentInstrumentId:
                type: string
                description: ID of the selected payment instrument for the transaction.
                maxLength: 50
                example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
              amount:
                description: >-
                  Payout amount that is allocated from the payout request to the
                  credit transaction.
                type: number
                format: double
              currency:
                $ref: '#/components/schemas/CurrencyCode'
              createdTime:
                description: Date and time when a payout request is allocated.
                $ref: '#/components/schemas/ServerTimestamp'
              updatedTime:
                $ref: '#/components/schemas/UpdatedTime'
        selectedPaymentInstrumentRedirectUrl:
          description: >-
            URL where the customer is redirected when a payment instrument is
            selected. The default value is the website URL.

            Use `{{id}}` as a placeholder for the payout request ID.
          type: string
          format: uri
          example: https://example.com/payout-request-success?id={{id}}
        cancellationReason:
          $ref: '#/components/schemas/PayoutRequestCancellation'
        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
    OrderPreview:
      type: object
      required:
        - websiteId
        - items
      properties:
        websiteId:
          writeOnly: true
          allOf:
            - $ref: '#/components/schemas/WebsiteId'
        items:
          description: Items details.
          type: array
          writeOnly: true
          minItems: 1
          items:
            type: object
            required:
              - planId
            properties:
              planId:
                type: string
                description: ID of the plan.
                maxLength: 50
                example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
              quantity:
                description: Number of product units in the specified plan.
                type: integer
        billingAddress:
          description: Billing address details.
          writeOnly: true
          oneOf:
            - $ref: '#/components/schemas/ContactObject'
            - type: 'null'
        deliveryAddress:
          description: Delivery address details.
          writeOnly: true
          oneOf:
            - $ref: '#/components/schemas/ContactObject'
            - type: 'null'
        couponIds:
          type: array
          writeOnly: true
          description: List of coupons that are applied to the order.
          items:
            type: string
        currency:
          readOnly: true
          $ref: '#/components/schemas/CurrencyCode'
        lineItems:
          type: array
          description: List of purchase items.
          readOnly: true
          items:
            type: object
            properties:
              type:
                description: Type of transaction.
                type: string
                enum:
                  - debit
                  - credit
              description:
                description: Description of the purchase item.
                type: string
              unitPrice:
                description: Unit price of the purchase item.
                type: number
                format: double
                example: 49.95
              quantity:
                description: Total quantity of the purchase item.
                type: number
                format: integer
              price:
                description: Total cost of the purchase item.
                type: number
                format: double
              planId:
                type: string
                description: ID of the related plan.
                maxLength: 50
                example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
              productId:
                type: string
                description: ID of the related product.
                maxLength: 50
                example: prod_0YV7DES3WPC5J8JD8QTVNZBZNZ
        shippingRates:
          type: array
          description: Available shipping rates.
          readOnly: true
          items:
            $ref: '#/components/schemas/ShippingOption'
        taxes:
          type: array
          description: Taxes applied to the purchase.
          readOnly: true
          items:
            type: object
            properties:
              amount:
                description: Amount of tax that is due.
                type: number
                format: double
              description:
                type: string
                description: Description of the tax.
        discounts:
          type: array
          description: Discounts applied to the purchase.
          readOnly: true
          items:
            type: object
            properties:
              couponId:
                type: string
                description: ID of a coupon that is associated with the purchase.
                maxLength: 50
                example: cpn_0YVCNKF81GD778N4YNVGDJK558
              amount:
                description: Total amount of discount from the coupon.
                type: number
                format: double
              description:
                description: Description of the discount.
                type: string
        subtotalAmount:
          description: Subtotal amount of the purchase.
          type: number
          format: double
          readOnly: true
        taxAmount:
          description: Tax amount of the purchase.
          type: number
          format: double
          readOnly: true
        shippingAmount:
          description: Shipping amount of the purchase.
          type: number
          format: double
          readOnly: true
        discountsAmount:
          description: Total discount amount of the purchase.
          type: number
          format: double
          readOnly: true
        total:
          description: Total amount of the purchase.
          type: number
          format: double
          readOnly: true
        shipping:
          writeOnly: true
          $ref: '#/components/schemas/Shipping'
    EventType:
      type: string
      description: Type of Rebilly event.
      readOnly: true
      enum:
        - account-password-reset-requested
        - account-verification-requested
        - aml-list-possibly-matched
        - application-instance-disabled
        - application-instance-enabled
        - balance-transaction-settled
        - coupon-application-removed
        - coupon-applied
        - coupon-expiration-modified
        - coupon-expired
        - coupon-issued
        - coupon-modified
        - coupon-redeemed
        - coupon-redemption-canceled
        - customer-created
        - customer-one-time-password-requested
        - customer-updated
        - dispute-created
        - dispute-modified
        - experian-check-performed
        - gateway-account-downtime-ended
        - gateway-account-downtime-started
        - gateway-account-limit-reached
        - gateway-account-onboarding-completed
        - gateway-account-onboarding-failed
        - gateway-account-requested
        - hard-usage-limit-reached
        - invoice-abandoned
        - invoice-issued
        - invoice-modified
        - invoice-paid
        - invoice-partially-paid
        - invoice-partially-refunded
        - invoice-past-due
        - invoice-past-due-reminder
        - invoice-refunded
        - invoice-revenue-recognized
        - invoice-tax-calculation-failed
        - invoice-voided
        - kyc-document-accepted
        - kyc-document-modified
        - kyc-document-rejected
        - kyc-request-fulfilled
        - order-abandon-reminder
        - order-abandoned
        - order-completed
        - payment-card-created
        - payment-card-expiration-reminder
        - payment-card-expired
        - payment-instrument-modified
        - payout-request-created
        - payout-request-modified
        - quote-accepted
        - quote-canceled
        - quote-created
        - quote-expired
        - quote-issued
        - quote-recalled
        - quote-rejected
        - quote-updated
        - ready-to-pay-requested
        - ready-to-payout-requested
        - renewal-invoice-issued
        - renewal-invoice-payment-canceled
        - renewal-invoice-payment-declined
        - risk-score-changed
        - soft-usage-limit-reached
        - subscription-activated
        - subscription-canceled
        - subscription-churned
        - subscription-created
        - subscription-downgraded
        - subscription-items-changed
        - subscription-modified
        - subscription-pause-created
        - subscription-pause-modified
        - subscription-pause-revoked
        - subscription-paused
        - subscription-quantity-filled-limit-reached
        - subscription-reactivated
        - subscription-renewal-reminder
        - subscription-renewed
        - subscription-resumed
        - subscription-trial-converted
        - subscription-trial-end-changed
        - subscription-trial-end-reminder
        - subscription-trial-ended
        - subscription-upgraded
        - transaction-amount-discrepancy-found
        - transaction-declined
        - transaction-discrepancy-found
        - transaction-process-requested
        - transaction-processed
        - order-delinquency-reached
        - autodeposit-lookup-performed
    EddScore:
      type: string
      enum:
        - not-found
        - unlikely
        - unclear
        - probable
        - confirmed
    EddScoreDetails:
      type: object
      properties:
        url:
          type: string
          format: uri
          description: URL from which the score is obtained.
        details:
          type: string
          description: Text from which the score is obtained.
    Edd:
      type: object
      properties:
        parsedScore:
          type: object
          properties:
            occupation:
              $ref: '#/components/schemas/EddScore'
            arrest:
              $ref: '#/components/schemas/EddScore'
            bankruptcy:
              $ref: '#/components/schemas/EddScore'
            fraud:
              $ref: '#/components/schemas/EddScore'
            occupationDetails:
              $ref: '#/components/schemas/EddScoreDetails'
            arrestDetails:
              $ref: '#/components/schemas/EddScoreDetails'
            bankruptcyDetails:
              $ref: '#/components/schemas/EddScoreDetails'
            fraudDetails:
              $ref: '#/components/schemas/EddScoreDetails'
        score:
          type: object
          properties:
            occupation:
              $ref: '#/components/schemas/EddScore'
            arrest:
              $ref: '#/components/schemas/EddScore'
            bankruptcy:
              $ref: '#/components/schemas/EddScore'
            fraud:
              $ref: '#/components/schemas/EddScore'
        nextUpdateTime:
          description: Date and time in ISO 8601 format when the EDD score is updated.
          type:
            - string
            - 'null'
          format: date-time
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
    EddTimeline:
      type: object
      properties:
        id:
          type: string
          description: ID of the timeline message.
          readOnly: true
          maxLength: 50
          example: tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC
        type:
          description: Type of timeline message.
          type: string
          readOnly: true
          enum:
            - edd-search-performed
            - edd-score-manually-updated
            - timeline-comment-created
        triggeredBy:
          description: Specifies who, or what, triggered the timeline event.
          type: string
          readOnly: true
          enum:
            - rebilly
            - app
            - direct-api
        message:
          description: Detailed message description.
          type: string
        extraData:
          $ref: '#/components/schemas/TimelineExtraData'
        occurredTime:
          description: Date and time when the customer timeline custom event occurs.
          readOnly: true
          $ref: '#/components/schemas/ServerTimestamp'
        _links:
          $ref: '#/components/schemas/SelfLink'
    EddSearchResult:
      type: object
      properties:
        id:
          type: string
          readOnly: true
          description: ID of the EDD search result.
          maxLength: 50
          example: cus_edd_01H057XGZ62JZED3P8DWAXPAE6
        type:
          type: string
          readOnly: true
          enum:
            - occupation
            - arrest
            - fraud
            - bankruptcy
        searchResultData:
          type: array
          readOnly: true
          items:
            $ref: '#/components/schemas/EddScoreDetails'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
    RiskScoreBoolean:
      type:
        - object
        - 'null'
      required:
        - value
      properties:
        value:
          type: integer
          description: Value added to the risk score of the transaction.
    RiskScoreBracket:
      type:
        - object
        - 'null'
      required:
        - brackets
      properties:
        brackets:
          description: >-
            Risk factor values range with corresponding risk score increment
            value. First matched bracket is applied.
          type: array
          minItems: 1
          items:
            type: object
            required:
              - start
              - end
              - value
            properties:
              start:
                description: Minimal risk factor value when condition is applied.
                type: integer
                minimum: 0
              end:
                description: Maximal risk factor value when condition is applied.
                type: integer
                minimum: 1
              value:
                type: integer
                description: Value added to the risk score of the transaction.
    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
      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'
    RiskScoreBlocklistType:
      type:
        - object
        - 'null'
      required:
        - riskScoreThreshold
        - ttl
      properties:
        riskScoreThreshold:
          type: integer
          description: Pass and fail threshold for the blocklist.
        ttl:
          type: integer
          description: |-
            Amount of seconds a blocklist exists before it expires.
            If value for this field is `0` then blocklist record never expires.
    RiskScoreBlocklist:
      type: object
      description: Risk score blocklist configuration.
      properties:
        address:
          description: House number and ZIP code of the customer's address.
          $ref: '#/components/schemas/RiskScoreBlocklistType'
        bank-account:
          description: Bank account being charged.
          $ref: '#/components/schemas/RiskScoreBlocklistType'
        bin:
          description: Bank Identification Number (BIN) of the payment card being charged.
          $ref: '#/components/schemas/RiskScoreBlocklistType'
        country:
          description: >-
            Country where the customer is making the purchase, and of the
            payment card billing address.
          $ref: '#/components/schemas/RiskScoreBlocklistType'
        customer-id:
          description: Rebilly `customerId` of the customer making the purchase.
          $ref: '#/components/schemas/RiskScoreBlocklistType'
        email:
          description: Email address of the customer making the purchase.
          $ref: '#/components/schemas/RiskScoreBlocklistType'
        email-domain:
          description: Email address domain of the customer making the purchase.
          $ref: '#/components/schemas/RiskScoreBlocklistType'
        fingerprint:
          description: >-
            Fingerprint of the user's device.

            A device fingerprint is a unique token that is used to identify the
            user.

            The device fingerprint is generated based on device attributes,

            such as: hardware, software, IP address, language, browser, and
            more.
          $ref: '#/components/schemas/RiskScoreBlocklistType'
        ip-address:
          description: IP address of the customer making the purchase.
          $ref: '#/components/schemas/RiskScoreBlocklistType'
        payment-card:
          description: Payment card number being charged.
          $ref: '#/components/schemas/RiskScoreBlocklistType'
    RiskScoreSimulationJob:
      type: object
      description: >-
        Resource to simulate a risk score calculation given a set of risk score
        settings.
      required:
        - rules
        - period
      properties:
        id:
          type: string
          description: ID of the job.
          maxLength: 50
          example: risk_sjob_0YVCNQ2C1AD1RA3HXKP492GNZB
          readOnly: true
        status:
          type: string
          description: Status of the job.
          enum:
            - pending
            - processing
            - completed
            - failed
            - stopped
          example: completed
          readOnly: true
        summary:
          description: Summary of the simulation.
          readOnly: true
          type: array
          items:
            type: object
            properties:
              metric:
                type: string
                enum:
                  - processedTransactions
                  - affectedTransactions
                  - declinedToCanceledTransactions
                  - canceledToApprovedTransactions
                  - approvedToCanceledTransactions
              count:
                type: integer
              amount:
                $ref: '#/components/schemas/Money'
        rules:
          description: Risk score rules.
          $ref: '#/components/schemas/RiskScoreRules'
        period:
          type: object
          description: Full period of the simulation.
          properties:
            startDate:
              type: string
              format: date-time
              example: '2020-01-01T00:00:00'
            endDate:
              type: string
              format: date-time
              example: '2020-01-01T00:00:00'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        startedTime:
          description: Date and time when the simulation job started.
          $ref: '#/components/schemas/ServerTimestamp'
        finishedTime:
          description: Date and time when the simulation job finished.
          $ref: '#/components/schemas/ServerTimestamp'
        _links:
          $ref: '#/components/schemas/SelfLink'
        _embedded:
          type: object
          properties:
            transactions:
              type: array
              description: Transactions of the simulation.
    RiskScoreSimulationTransaction:
      type: object
      description: Transaction affected in risk score simulation.
      properties:
        transactionId:
          description: ID of the transaction.
          type: string
          readOnly: true
          maxLength: 50
          example: txn_0YVCNQ2C1AD1RA3HXKP492GNZB
        customerId:
          description: ID of the customer.
          type: string
          readOnly: true
          maxLength: 50
          example: cus_0YVCNQ2C1AD1RA3HXKP492GNZB
        simulationJobId:
          description: ID of the simulation job.
          type: string
          readOnly: true
          maxLength: 50
          example: risk_sjob_0YVCNQ2C1AD1RA3HXKP492GNZB
        amount:
          description: Amount of the transaction.
          readOnly: true
          $ref: '#/components/schemas/Money'
        preResult:
          description: Pre-simulation state of the transaction.
          type: string
          readOnly: true
          enum:
            - canceled
            - declined
            - approved
        result:
          description: Result of the simulation.
          type: string
          readOnly: true
          enum:
            - blocked
            - approved
        date:
          description: Date of the transaction.
          type: string
          format: date-time
          readOnly: true
          example: '2020-01-01T00:00:00Z'
        _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
                  - transaction
    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.

            Data types that are added to this field are excluded from risk score
            checks and are not added to blocklists.
          enum:
            - address
            - bank-account
            - bin
            - country
            - customer-id
            - email
            - email-domain
            - fingerprint
            - ip-address
            - payment-card
        value:
          type: string
          description: Value of the allowlist record.
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    GlobalEventType:
      type: string
      description: Type of event.
      enum:
        - aml-list-possibly-matched
        - application-instance-disabled
        - application-instance-enabled
        - 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-updated
        - data-export-completed
        - dispute-created
        - dispute-modified
        - experian-check-performed
        - gateway-account-downtime-ended
        - gateway-account-downtime-started
        - gateway-account-limit-reached
        - gateway-account-onboarding-completed
        - gateway-account-onboarding-failed
        - gateway-account-requested
        - hard-usage-limit-reached
        - invoice-abandoned
        - invoice-created
        - invoice-issued
        - invoice-modified
        - invoice-paid
        - invoice-partially-paid
        - invoice-partially-refunded
        - invoice-past-due
        - invoice-past-due-reminder
        - invoice-refunded
        - invoice-reissued
        - invoice-tax-calculation-failed
        - invoice-voided
        - kyc-document-accepted
        - kyc-document-archived
        - kyc-document-created
        - kyc-document-modified
        - kyc-document-rejected
        - kyc-document-reviewed
        - kyc-request-attempted
        - kyc-request-failed
        - kyc-request-fulfilled
        - kyc-request-partially-fulfilled
        - lead-source-changed
        - offsite-payment-completed
        - order-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
        - 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-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
        - transaction-reconciled
        - transaction-timeout-resolved
        - waiting-gateway-transaction-completed
        - order-delinquency-reached
        - autodeposit-lookup-performed
    TagUntagRule:
      type: object
      description: Tag or untag rule.
      required:
        - name
        - eventType
        - addTags
        - removeTags
      properties:
        id:
          type: string
          description: ID of the rule.
          readOnly: true
          maxLength: 50
          example: tag_rule_0YVCEE5APAD7V84MK3P9CCJVYY
        name:
          description: Name of the rule.
          type: string
        eventType:
          allOf:
            - $ref: '#/components/schemas/GlobalEventType'
            - not:
                enum:
                  - application-instance-disabled
                  - application-instance-enabled
                  - balance-transaction-settled
                  - credit-memo-applied
                  - credit-memo-created
                  - credit-memo-modified
                  - credit-memo-partially-applied
                  - credit-memo-voided
                  - customer-redirected-offsite
                  - customer-returned
                  - dispute-created
                  - dispute-modified
                  - gateway-account-downtime-ended
                  - gateway-account-downtime-started
                  - gateway-account-limit-reached
                  - gateway-account-onboarding-completed
                  - gateway-account-onboarding-failed
                  - gateway-account-requested
                  - invoice-created
                  - invoice-modified
                  - invoice-past-due-reminder
                  - invoice-tax-calculation-failed
                  - offsite-payment-completed
                  - order-abandon-reminder
                  - organization-tax-number-validated
                  - payment-card-created
                  - payment-card-expiration-reminder
                  - payment-instrument-modified
                  - renewal-invoice-payment-canceled
                  - risk-score-changed
                  - subscription-items-changed
                  - subscription-modified
                  - subscription-pause-created
                  - subscription-pause-modified
                  - subscription-pause-revoked
                  - subscription-renewal-reminder
                  - subscription-trial-converted
                  - subscription-trial-end-changed
                  - subscription-trial-end-reminder
                  - subscription-trial-ended
                  - transaction-process-requested
                  - transaction-reconciled
                  - transaction-timeout-resolved
                  - waiting-gateway-transaction-completed
                  - data-export-completed
                  - hard-usage-limit-reached
                  - soft-usage-limit-reached
                  - subscription-quantity-filled-limit-reached
        filter:
          description: >-
            Filter that determines whether to tag or untag.

            This field requires a special format.

            Use `,` for multiple allowed values.

            Use `;` for multiple fields.


            For more information,

            see [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
  responses:
    Unauthorized:
      description: Unauthorized access. Invalid credentials used.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Unauthorized'
    Forbidden:
      description: Access forbidden.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Forbidden'
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/NotFound'
    ValidationError:
      description: Invalid data sent.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ValidationError'
    TooManyRequests:
      description: Request rate limit exceeded.
      headers:
        X-RateLimit-Retry-After:
          $ref: '#/components/headers/X-RateLimit-Retry-After'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/TooManyRequests'
    Conflict:
      description: Conflict.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Conflict'
    Customer:
      description: Customer.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Customer'
    Found:
      description: Resource moved.
      headers:
        Location:
          schema:
            type: string
            format: uri
          example: https://api.rebilly.com/example
  requestBodies:
    Attachment:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Attachment'
      description: Attachment resource.
      required: true
    Blocklist:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Blocklist'
      description: Blocklist resource.
      required: true
    Coupon:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Coupon'
      description: Coupon resource.
      required: true
    Customer:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Customer'
      description: Customer resource.
      required: true
    Dispute:
      content:
        application/json:
          schema:
            type: object
            required:
              - currency
              - amount
              - transactionId
              - postedTime
              - type
              - status
              - reasonCode
            properties:
              transactionId:
                description: ID of the disputed transaction.
                $ref: '#/components/schemas/TransactionId'
              currency:
                $ref: '#/components/schemas/CurrencyCode'
              amount:
                description: Dispute amount.
                type: number
                format: double
              acquirerReferenceNumber:
                description: Acquirer reference number for the dispute.
                type:
                  - string
                  - 'null'
                maxLength: 255
              caseId:
                description: Case ID of the dispute.
                type:
                  - string
                  - 'null'
                maxLength: 100
              reasonCode:
                description: >-
                  Code used in the chargeback that describes the reason for the
                  dispute.
                type: string
                maxLength: 255
                enum:
                  - '0'
                  - '00'
                  - '1'
                  - '2'
                  - '3'
                  - '4'
                  - '5'
                  - '6'
                  - '7'
                  - '8'
                  - '9'
                  - '10.1'
                  - '10.2'
                  - '10.3'
                  - '10.4'
                  - '10.5'
                  - '11.1'
                  - '11.2'
                  - '11.3'
                  - '12'
                  - '12.1'
                  - '12.2'
                  - '12.3'
                  - '12.4'
                  - '12.5'
                  - '12.6'
                  - '12.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'
                  - '57'
                  - '59'
                  - '60'
                  - '62'
                  - '63'
                  - '70'
                  - '71'
                  - '72'
                  - '73'
                  - '74'
                  - '75'
                  - '76'
                  - '77'
                  - '78'
                  - '79'
                  - '80'
                  - '81'
                  - '82'
                  - '83'
                  - '85'
                  - '86'
                  - '93'
                  - '98'
                  - '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'
                  - A
                  - A01
                  - A02
                  - A08
                  - AL
                  - AP
                  - AW
                  - B
                  - C02
                  - C04
                  - C05
                  - C08
                  - C14
                  - C18
                  - C28
                  - C31
                  - C32
                  - CA
                  - CD
                  - CR
                  - DA
                  - DP
                  - DP1
                  - EX
                  - F10
                  - F14
                  - F22
                  - F24
                  - F29
                  - FR1
                  - 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
              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
              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.

                  If 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:
            anyOf:
              - $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.
                  Tag 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.

                  If this value is `true`, the operation creates or updates
                  (upserts) a customer.

                  If this value is `false`, the `customerId` already exists, and
                  the related customer is not updated.
              type:
                description: >-
                  Type of transaction.


                  This field supports a limited subset of transaction types.

                  To refund or void, see [Refund a
                  transaction](https://www.rebilly.com/catalog/all/transactions/posttransactionrefund).


                  To `capture`, use the `sale` type.

                  If any existing `authorize` transactions are eligible,

                  they are captured and the `sale` converts to a `capture` type.


                  The `setup` type sets up the payment instrument by following
                  the `setupInstruction` in the selected gateway account.

                  If 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.
                  If this value is not supplied,
                  the customer's default payment instrument is used.
                $ref: '#/components/schemas/PaymentInstruction'
              billingAddress:
                description: >-
                  Billing address.

                  If this value is not supplied,

                  the billing address associated with the payment instrument is
                  used.

                  If no billing address is associated with the payment
                  instrument,

                  the 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.

                  If a duplicate request is sent with the same `requestId`,

                  it is ignored to prevent double-billing.

                  This value must be unique within a 24-hour period.


                  > **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.

                  Rebilly selects the payment gateway account for the
                  transaction based on transaction properties and the rules
                  configuration of the `gateway-account-requested` event.

                  To prevent Rebilly from making the gateway account selection,

                  supply a gateway account ID in this field.

                  Only 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.

                  This notification is sent when the transaction result is
                  finalized after a timeout or an offsite interaction.


                  Do not interpret this notification as a confirmation,

                  complete a `GET` request to confirm the result of the
                  transaction.

                  To ensure the request is not reattempted,

                  when the result is confirmed, respond with a `2xx` HTTP status
                  code.


                  The following placeholders are available to use in this URI:
                  `{id}` and `{result}`.

                  These placeholders are replaced the with the transaction ID
                  and result accordingly.
                type:
                  - string
                  - 'null'
                format: uri
              redirectUrl:
                type:
                  - string
                  - 'null'
                description: >-
                  URL to redirect the end-user when an offsite transaction is
                  completed.

                  Defaults to the configured URL of the website.

                  You may use `{id}` or `{result}` as placeholders in the URL,

                  these are replaced the with the transaction ID and result
                  accordingly.
                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.

                  This 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.
                  If this value is not supplied,
                  the customer's default payment instrument is used.
                $ref: '#/components/schemas/PaymentInstruction'
              billingAddress:
                description: >-
                  Billing address.

                  If this value is not supplied,

                  the billing address associated with the payment instrument is
                  used.

                  If no billing address is associated with the payment
                  instrument,

                  the 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.

                  If a duplicate request is sent with the same `requestId`,

                  it is ignored to prevent double-billing.

                  This value must be unique within a 24-hour period.


                  > **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.

                  Rebilly selects the payment gateway account for the
                  transaction based on transaction properties and the rules
                  configuration of the `gateway-account-requested` event.

                  To prevent Rebilly from making the gateway account selection,

                  supply a gateway account ID in this field.

                  Only 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.

                  This notification is sent when the transaction result is
                  finalized after a timeout or an offsite interaction.


                  Do not interpret this notification as a confirmation,

                  complete a `GET` request to confirm the result of the
                  transaction.

                  To ensure the request is not reattempted,

                  when the result is confirmed, respond with a `2xx` HTTP status
                  code.


                  The following placeholders are available to use in this URI:
                  `{id}` and `{result}`.

                  These placeholders are replaced the with the transaction ID
                  and result accordingly.
                type:
                  - string
                  - 'null'
                format: uri
              redirectUrl:
                type:
                  - string
                  - 'null'
                description: >-
                  URL to redirect the end-user when an offsite transaction is
                  completed.

                  Defaults to the configured URL of the website.

                  You may use `{id}` or `{result}` as placeholders in the URL,

                  these are replaced the with the transaction ID and result
                  accordingly.
                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.

                  This field is only specified if the transaction is processed
                  outside Rebilly.
                format: date-time
              payoutRequestId:
                description: >-
                  ID of the payout request for which the transaction is fully
                  allocated.
                writeOnly: true
                type: string
                maxLength: 50
      description: Transaction resource.
      required: true
    CustomerWebhook:
      content:
        application/json:
          schema:
            properties:
              customerId:
                $ref: '#/components/schemas/CustomerId'
              eventType:
                type: string
                description: Type of webhook event.
                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.
                properties:
                  customer:
                    $ref: '#/components/schemas/Customer'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - customer
      description: Customer webhook request body resource.
    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 webhook event.
                enum:
                  - coupon-application-removed
                  - coupon-applied
                  - coupon-redeemed
                  - coupon-redemption-canceled
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  coupon:
                    $ref: '#/components/schemas/Coupon'
                  redemption:
                    $ref: '#/components/schemas/CouponRedemption'
                  customer:
                    $ref: '#/components/schemas/Customer'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - coupon
                        - redemption
                        - customer
      description: Coupon redemption webhook request body resource.
    CouponWebhook:
      content:
        application/json:
          schema:
            properties:
              couponId:
                description: ID of the coupon.
                type: string
              eventType:
                type: string
                description: Type of webhook event.
                enum:
                  - coupon-expiration-modified
                  - coupon-expired
                  - coupon-issued
                  - coupon-modified
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  coupon:
                    $ref: '#/components/schemas/Coupon'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - coupon
      description: Coupon webhook request body resource.
    CreditMemoWebhook:
      content:
        application/json:
          schema:
            properties:
              creditMemoId:
                type: string
                description: ID of the credit memo.
                maxLength: 50
                example: crmm_0YVCNN22TWC3G8H82QNPNVZCHG
              eventType:
                type: string
                description: Rebilly webhooks event type.
                enum:
                  - credit-memo-applied
                  - credit-memo-created
                  - credit-memo-modified
                  - credit-memo-partially-applied
                  - credit-memo-voided
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  creditMemo:
                    $ref: '#/components/schemas/CreditMemo'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - creditMemo
      description: Credit memo webhook request body resource.
    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 webhook event.
                enum:
                  - customer-merged
              duplicatedCustomer:
                $ref: '#/components/schemas/Customer'
              _embedded:
                type: object
                description: Customer object.
                properties:
                  targetCustomer:
                    $ref: '#/components/schemas/Customer'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - customer
      description: Merged customer webhook request body resource.
    CustomerRedirect:
      content:
        application/json:
          schema:
            properties:
              transactionId:
                $ref: '#/components/schemas/TransactionId'
              redirectUrl:
                description: URL customer redirected to.
                type: string
                format: url
              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: Rebilly webhooks event type.
                type: string
                enum:
                  - customer-redirected-offsite
                  - customer-returned
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  transaction:
                    $ref: '#/components/schemas/Transaction'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - transaction
      description: Customer redirect webhook request body resource.
    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 webhook event.
                enum:
                  - dispute-created
                  - dispute-modified
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  dispute:
                    $ref: '#/components/schemas/Dispute'
                  transaction:
                    oneOf:
                      - $ref: '#/components/schemas/Transaction'
                      - type: 'null'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - dispute
                        - transaction
      description: Dispute webhook request body resource.
    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 webhook event.
                enum:
                  - experian-check-performed
              _embedded:
                type: object
                description: Embedded object.
                properties:
                  customer:
                    $ref: '#/components/schemas/Customer'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - customer
      description: Experian check performed webhook request body resource.
    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 webhook event.
                enum:
                  - soft-usage-limit-reached
                  - hard-usage-limit-reached
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  subscription:
                    $ref: '#/components/schemas/SubscriptionOrOneTimeSale'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - subscription
      description: Request body resource of the usage limit webhook.
    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 webhook event.
                enum:
                  - invoice-tax-calculation-failed
              _embedded:
                type: object
                description: Invoice object.
                properties:
                  invoice:
                    $ref: '#/components/schemas/Invoice'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - invoice
      description: Invoice tax validation failed webhook request body resource.
    TransactionWebhook:
      content:
        application/json:
          schema:
            properties:
              transactionId:
                $ref: '#/components/schemas/TransactionId'
              eventType:
                type: string
                description: Type of webhook event.
                enum:
                  - gateway-account-requested
                  - offsite-payment-completed
                  - risk-score-changed
                  - transaction-amount-discrepancy-found
                  - transaction-declined
                  - transaction-discrepancy-found
                  - transaction-process-requested
                  - transaction-processed
                  - transaction-timeout-resolved
                  - waiting-gateway-transaction-completed
                  - autodeposit-lookup-performed
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  transaction:
                    $ref: '#/components/schemas/Transaction'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - transaction
      description: Transaction webhook request body resource.
    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 webhook event.
                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: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - invoice
      description: Invoice webhook request body resource.
    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 webhook event.
                enum:
                  - kyc-document-accepted
                  - kyc-document-created
                  - kyc-document-modified
                  - kyc-document-rejected
                  - kyc-document-reviewed
                  - kyc-document-archived
              _embedded:
                type: object
                description: Customer and KYC document data.
                properties:
                  customer:
                    $ref: '#/components/schemas/Customer'
                  kycDocument:
                    $ref: '#/components/schemas/KycDocument'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - customer
                        - file
                        - kycDocument
      description: KYC document webhook request body resource.
    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: Rebilly webhooks event type.
                enum:
                  - kyc-request-attempted
                  - kyc-request-failed
                  - kyc-request-fulfilled
                  - kyc-request-partially-fulfilled
              _embedded:
                type: object
                description: Customer and KYC request data.
                properties:
                  customer:
                    $ref: '#/components/schemas/Customer'
                  kycRequest:
                    $ref: '#/components/schemas/KycRequest'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - customer
                        - kycRequest
      description: KYC request webhook body resource.
    SubscriptionWebhook:
      content:
        application/json:
          schema:
            properties:
              subscriptionId:
                type: string
                description: ID of the order.
                example: sub_01HRF27SATGE4Z6PBJE6PD8328
              eventType:
                type: string
                description: Type of webhook event.
                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.
                properties:
                  subscription:
                    $ref: '#/components/schemas/SubscriptionOrOneTimeSale'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - subscription
      description: Order webhook request body resource.
    PaymentCardWebhook:
      content:
        application/json:
          schema:
            properties:
              paymentCardId:
                description: ID of the payment instrument.
                type: string
              eventType:
                type: string
                description: Type of webhook event.
                enum:
                  - payment-card-created
                  - payment-card-expiration-reminder
                  - payment-card-expired
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  paymentCard:
                    $ref: '#/components/schemas/PaymentCard'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - paymentCard
      description: Payment card webhook request body resource.
    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 webhook event.
                enum:
                  - payment-instrument-modified
              _embedded:
                type: object
                properties:
                  paymentInstrument:
                    $ref: '#/components/schemas/PaymentInstrument'
              _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:
                        - paymentInstrument
      description: Payment instrument webhook request body resource.
    PayoutRequestWebhook:
      content:
        application/json:
          schema:
            properties:
              payoutRequestId:
                description: ID of the payout request.
                type: string
              eventType:
                type: string
                description: Type of webhook event.
                enum:
                  - payout-request-created
                  - payout-request-modified
                  - payout-request-canceled
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  payoutRequest:
                    $ref: '#/components/schemas/PayoutRequest'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - payoutRequest
      description: Payout request webhook request body resource.
    QuoteWebhook:
      content:
        application/json:
          schema:
            properties:
              quoteId:
                type: string
                description: ID of the quote.
                example: qt_01HXBZMEGPETPHJZH6V4RHBMA8
              eventType:
                type: string
                description: Type of webhook event.
                enum:
                  - quote-accepted
                  - quote-canceled
                  - quote-created
                  - quote-expired
                  - quote-issued
                  - quote-recalled
                  - quote-rejected
                  - quote-updated
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  quote:
                    $ref: '#/components/schemas/Quote'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - quote
      description: Quote webhook request body resource.
    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 webhook event.
                enum:
                  - renewal-invoice-issued
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  subscription:
                    $ref: '#/components/schemas/SubscriptionOrOneTimeSale'
                  invoice:
                    $ref: '#/components/schemas/Invoice'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - subscription
                        - invoice
      description: Renewal invoice issued webhook request body resource.
    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 webhook event.
                enum:
                  - renewal-invoice-payment-canceled
                  - renewal-invoice-payment-declined
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  transaction:
                    $ref: '#/components/schemas/Transaction'
                  invoice:
                    $ref: '#/components/schemas/Invoice'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - transaction
                        - invoice
      description: Invoice and Transaction webhook request body resource.
    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: integer
                description: Reported quantity.
              previousQuantityFilled:
                type: integer
                description: Reported quantity before the subscription item updates.
              eventType:
                type: string
                description: Type of webhook event.
                enum:
                  - subscription-quantity-filled-limit-reached
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  subscription:
                    $ref: '#/components/schemas/SubscriptionOrOneTimeSale'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - subscription
      description: Request body resource of the usage limit webhook.
    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 webhook event.
                enum:
                  - subscription-pause-created
                  - subscription-pause-modified
                  - subscription-pause-revoked
                  - subscription-paused
                  - subscription-resumed
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  subscription:
                    $ref: '#/components/schemas/SubscriptionOrOneTimeSale'
                  pause:
                    $ref: '#/components/schemas/SubscriptionPause'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - subscription
                        - pause
      description: Subscription pause and order webhook request body resource.
    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 webhook event.
                enum:
                  - autodeposit-lookup-performed
              _embedded:
                type: object
                description: Embedded object.
                properties:
                  customer:
                    $ref: '#/components/schemas/Customer'
                  transaction:
                    $ref: '#/components/schemas/Transaction'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - customer
                        - transaction
      description: Autodeposit lookup performed webhook resource.
  examples:
    stripe-trx-request:
      summary: Stripe transaction fees
      description: Transaction fees for Stripe. Discount 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. Fees 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. Discount 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. Fees for outside of the US are a
        different fee record.
      value:
        id: fee_01GQT145JX3XBRJ8K812Y3GRE9
        type: buy
        name: Stripe US fees
        filter: >-
          type:sale,capture;result:approved;billingAddress.country:US;gatewayAccountId:stripe
        formula:
          type: percentage
          currency: USD
          bips: 290
        createdTime: '2021-12-15T14:15:22Z'
        updatedTime: '2021-12-15T14:15:22Z'
        _links:
          - rel: self
            href: >-
              https://api-sandbox.rebilly.com/fees/fee_01GQT145JX3XBRJ8K812Y3GRE9
    stripe-intl-response:
      summary: Stripe international fees
      description: Stripe transaction fees for outside of the US.
      value:
        id: fee_01GQT145JX3XBRJ8K812Y3GRE9
        type: buy
        name: Stripe international fees
        filter: >-
          type:sale,capture;result:approved;billingAddress.country:!US;gatewayAccountId:stripe
        formula:
          type: percentage
          currency: USD
          bips: 390
        createdTime: '2021-12-15T14:15:22Z'
        updatedTime: '2021-12-15T14:15:22Z'
        _links:
          - rel: self
            href: >-
              https://api-sandbox.rebilly.com/fees/fee_01GQT145JX3XBRJ8K812Y3GRE9
tags:
  - name: Allowlists
    description: >-
      Use allowlists to exclude specific customer attribute data from risk score
      checks.


      Allowlists 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.


      Use AML operations during customer creation, and some transaction
      processing,

      to help determine if a potential customer (lead), or customer, has
      political or economic sanctions against them.


      AML operations search the following for screening purposes:

      Politically Exposed Persons (PEPs) lists, sanction lists,

      and adverse media lists.
  - name: API keys
    description: >-
      Use API keys to identify and authenticate applications and users.

      Always keep your API keys private.

      When creating API keys, you can restrict them to a given set of
      permissions.

      For 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 these operations to register applications to the Rebilly Apps Store
      and manage application instances.

      An application owner is a person or organization that has submitted an app
      to the Rebilly App Store.

      For more information, see [Submit an
      app](https://www.rebilly.com/docs/dev-docs/submit-a-rebilly-app/).
  - name: Application users
    description: >-
      Use these operations to install or uninstall apps from the Rebilly App
      Store to your Rebilly account, and to manage application instances.

      An application user is a person or organization that uses an app that is
      installed from the Rebilly App Store.

      For 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.

      > **Important:** These operations are experimental and may change.
  - name: Billing portals
    description: >-
      Use these operations to create and manage billing portals.

      Rebilly hosted billing portals provide secure, Rebilly hosted pages, where
      customers can:

      view invoices, cancel subscriptions, update payment instruments, and
      update their address.
  - name: Blocklists
    description: >-
      Use blocklists to prevent fraud and criminal activity.


      Blocklists are lists of customer attribute values that are blocked from
      buying from you.

      For 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.


      Before a new transaction is processed in Rebilly, blocklists are examined
      to check for attributes related to the entity.

      If a match is detected, the operation is aborted.

      A 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.

      Broadcast messages are emails that are sent to a specific group of
      customers, or all customers.

      For more information, see [Create a broadcast
      message](https://www.rebilly.com/docs/automations/email-notifications/#create-broadcast-messages).
  - name: Checkout forms
    description: >-
      Use these operations to create and manage checkout forms.

      Rebilly hosted checkout forms provide secure and compliant checkouts.

      Checkout forms are customizable, and use fully responsive design,

      built-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.

      Coupons enable you to apply different types of discounts to invoices,
      subscriptions, and pricing plans.


      Redeemed coupons are attached to a customer's account.

      Depending on the coupon restrictions, the redeemed coupons are then
      applied from the customer's account to subsequent invoices or
      subscriptions.

      Redeemed coupons can only be applied to invoices of the same currency.


      Once a coupon is redeemed it cannot be modified.

      You may deactivate a coupon or create a new coupon, but you cannot reuse
      the same coupon code.

      If you have a use case where you must reuse the same code, [contact
      Rebilly](https://www.rebilly.com/contact/).


      ### Coupon restriction types


      The following coupon description types are available:


      - `restrict-to-countries`: Restricts a coupon for use in specific
      countries.

      - `discounts-per-redemption`: Restricts the number of times that the
      coupon can be applied by one redemption.
        For example, use this restriction to configure a coupon that can only be applied to the first subscription renewal of a particular product.
      - `minimum-order-amount`: Sets a minimum order amount for a coupon
      application.
        For example, if the restriction amount is $20, the coupon is only applied to invoices with a total amount of $20 or more.
      - `restrict-to-invoices`: Restricts a coupon to specific invoices.

      - `restrict-to-plans`: Restricts a coupon to specific pricing plans.

      - `restrict-to-subscriptions`: Restricts a coupon to specific order
      subscriptions.

      - `restrict-to-customer-tags`: Restricts a coupon to customers with
      specific tags.

      - `restrict-to-customers`: Restricts a coupon to specific customers.

      - `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.

      - `restrict-to-products`: Restricts a coupon to specific products.

      - `paid-by-time`: Specifies a date and time at which a coupon redemption
      expires if not paid.

      - `redemptions-per-customer`: Restricts the number of times that a coupon
      can be redeemed by one customer.
        For example, use this restriction to limit the number of redemptions to one per customer.
      - `total-redemptions`: Restricts the number of times a coupon can be
      redeemed by different customers.

      - `restrict-to-bxgy`: Provides "buy X get Y" promotions.
        These promotions incentivize new customers to buy and also reward existing customers.
        This restriction type enables you to add discounted plans to an invoice when a certain quantity of other plans are purchased.
        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.

      A common use case for using a credit memo is to provide a customer with
      store credit,

      rather than a refund, if the customer pays more than they owe or returns a
      product.

      For 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.

      Credit 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,

      instead of the default Rebilly domain: `portal.secure-payments.app`.

      For 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.

      Depending on the resource on which the custom field is added, it may be
      available in the Rebilly UI.


      Example: A custom field called `preferredCommunicationChannel` is added to
      the customer resource.

      It has two allowed values, which are 'email' and 'phone'.


      ```js

      {
        "customFields": {
            "preferredCommunicationChannel": "email"
        }
      }

      ```


      For 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.

      A customer is an entity that purchases goods or services from you (a
      merchant),

      and is the payee in any transaction that is credited to you.

      Customers are associated with payment instruments,

      subscriptions, invoices, and other related resources.


      In other systems, customers may be referred to as accounts,

      clients, members, patrons, or players.

      For information on the customer resource, see
      [Resources](https://www.rebilly.com/docs/dev-docs/concepts/#resources).
  - name: Customers timeline
    description: >-
      Use customer timelines to maintain an audit trail of changes and activity
      for each customer.
  - name: Data exports
    description: >-
      Use data export operations to manage the export of resource data, such as:

      transactions, customers, subscriptions, invoices, invoice item data, or
      revenue audit.

      Common data export use cases are:

      accounting, data analysis, reporting, or importing into other databases.


      For detailed information on Rebilly resources,

      see
      [Resources](https://www.rebilly.com/docs/dev-docs/concepts/#resources).


      For 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.

      Rebilly hosted deposit form provides a secure and compliant way to deposit
      funds.

      Deposit forms are customizable, and use fully responsive design, built-in
      error messaging and validation.


      > **Important:** These operations are experimental and may change.
  - name: Disputes
    description: >-
      Use these operations to manage disputes.

      A dispute occurs when a customer contests a charge to their account.

      The dispute and related information is made available to the merchant by
      the bank or credit card company.

      The merchant then has the option to represent the charge and win the case.

      This process is called dispute resolution.

      If the merchant is unable to represent the charge, the card issuer
      typically reverses the sale and adds fees on top of the charge.

      This 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.

      In Rebilly, this email address is referred to as a "From address".

      Supported email service providers are:

      SMTP, 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,

      and to inform them of events that may require action on their end.

      Email notifications are targeted email messages that can be plain text or
      HTML.


      Email notifications can also be used to notify teammates about new
      customers, blocklist matches, risk score changes, and more.

      For 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,

      invoices, transactions, journal accounts, journal entries,

      and more with external services.


      To use external identifiers, you must use an active service credential.
  - name: Fees
    description: >-
      Use fees to reconcile transactions with applicable fees and discount
      rates.

      Fees are not applied directly to transaction amounts, they do not modify
      the transaction amount.

      Fees help to describe each part of the transaction amount.


      > **Important:** These operations are experimental and may change.
  - name: Files
    description: >-
      Use the file entity to store files and related metadata.

      Files can be sorted by size, MIME-type, user-defined tags, and
      description.


      The following methods are available to upload files:

      multipart/form-data encoded form, RAW POST &mdash;

      by sending the file contents as the POST body, and fetching from URL
      &mdash;

      by providing the file URL using the 'url' parameter.


      Use the attachments entity to link a file to one or multiple objects, such
      as:

      customer, dispute, transaction, order, plan, product, invoice, or timeline
      comment.

      Attachments enable you to quickly find and use files related to specific
      entities.
  - name: Gateway accounts
    description: >-
      Use these operations to manage payment gateway accounts.

      A payment gateway is a service which enables merchants to receive payments
      from their customers to their merchant account.

      A merchant account is a bank account that enables businesses to receive
      payments.

      Use 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 histograms operations to generate transaction histogram reports with
      cohorts and periods. For 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.

      For more information on third-party apps, and how to integrate them,

      see [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.

      If 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.

      The KYC document operations generate a signed link to the Rebilly [KYC
      document
      gatherer](https://www.rebilly.com/docs/kyc-and-aml/kyc-document-gatherer/).


      Document types:
        - `identity-proof`: Validates a customer's identity.
        - `address-proof`: Validates a customer's address.
        - `purchase-proof`: Validates a customer's purchase.
        - `funds-proof`: Validates that a customer has funds.
        - `credit-file-proof`: Verifies that there is an existing credit file with two sources that match the customer's name, DOB, and address.

      Rebilly parses and analyzes the documents and accepts or rejects them
      according to a configurable scoring algorithm.

      When 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.


      ### Credit file proof


      The `credit-file-proof` KYC document request type is only available in the
      API,

      this option is not available in the [KYC document
      gatherer](https://www.rebilly.com/docs/kyc-and-aml/kyc-document-gatherer/).

      This request verifies that there is an existing credit file with two
      sources that match the person's name, date of birth, and address.


      In 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.


      If `credit-file-proof` is requested in combination with `identity-proof`
      and `address-proof`,

      `credit-file-proof` is attempted first.

      If `credit-file-proof` validates the identity and address,

      the KYC request is considered fulfilled.

      If the request is not fulfilled,

      redirect 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.

      Commonly used lists contain values related to conditions that target
      specific properties such as: customers, transactions, or BINs.


      You may grant list edit permissions to members of your team without
      enabling them to edit rules.

      This may be useful if your workflow involves frequent updates to value
      sets that are used in rule or bind conditions.

      List order may not be maintained and duplicates may be removed.


      For 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.
      Membership describes the relationship between organizations and users.
      For example, one user could be a member of more than one organization.
  - name: Metadata
    description: |-
      Use these operations to retrieve and manage metadata.
      Metadata is structured information on other data.
  - name: Orders
    description: >-
      Use these operations to manage customer orders.

      An order is a customer's request to purchase items.

      It can contain subscription and one-time sale items.

      When an order contains one or more subscription items, it is a
      subscription order.


      An order generates an invoice.

      A subscription order generates an invoice for each service period.

      For more information, see
      [Orders](https://www.rebilly.com/docs/dev-docs/concepts/#orders).
  - 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.

      These 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.

      An organization is an entity that represents you, or your company, as a
      merchant.

      You can have multiple organizations.

      For more information, see [My organizations and
      websites](https://www.rebilly.com/docs/settings/organizations-and-websites/).


      Note: No data, including organizations, is shared between the live and
      sandbox environments.
  - name: Payment instruments
    description: >-
      Use these operations to manage payment instruments.

      Payment instrument is a term which describes any means of making a digital
      payment, such as:

      credit cards, debit cards, direct debits, payment service providers, and
      digital wallets.


      For 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/).


      A 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.

      This bypasses the need to send sensitive cardholder info to your servers.

      We 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/).


      Rebilly provides the following plan types:


      - Trial only: Use this plan to create and offer a free or discounted trial
      period for your product.
        For example, a free 2 week trial of an internet service.
        After the trial, the customer can choose to sign up for a paid subscription, or stop using the service.
      - Recurring: Use this plan to create and offer a subscription for your
      product.
        For example, a monthly subscription to an internet service that is charged at 20 USD per month.
      - One time sale: Use this plan to create and offer a one-off sale for your
      products.
        For example, a one time purchase of two bags of coffee.

      For information on the plans resource, see
      [Plans](https://www.rebilly.com/docs/dev-docs/concepts/#plans).


      For 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.

      A product also describes sales items on invoices and receipts.

      Product pricing is defined in
      [plans](https://www.rebilly.com/docs/dev-docs/api/plans/).

      A product may have one or many plans.


      For 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.
      A profile represents the person that is signed in to Rebilly.
  - name: Quotes
    description: >-
      Use quote operations to create and manage quotations.

      Quotations describe the cost of goods or services to potential customers
      before they commit to a purchase.

      A quote contains an initial invoice preview that can be accepted to become
      an order.


      A quote can contain subscription and one-time sale items.

      When 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.

      When a password reset is requested, an email with a token is sent.

      In 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.

      Roles are an implementation of the general hierarchical (Role Based Access
      Control) RBAC.

      A senior role inherits all of its juniors' Access Control Lists (ACLs) and
      its own ACL.

      Junior roles are not influenced by the senior role.
  - name: Rules
    description: >-
      Use rules to automate.

      In the Rebilly rules engine, an action is an operation that executes when
      an event occurs.

      Action and event conditions are defined in rules.

      Rulesets are collections of rules that are associated with an event.

      The order in which the rules are placed within a ruleset specifies the
      execution order.


      For 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.

      A segment is a filtered view of a data set that can be shared with other
      users.

      For example, you may create a transactions segment that displays specific
      columns that are filtered and sorted based on certain criteria,

      and 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.

      A 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.
      No authentication is required.
  - name: Storefront account
    description: >-
      Use these operations to manage Storefront accounts.

      A Storefront account is an account that the customer is subscribed to in
      order to use the Rebilly product.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).


      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront billing portals
    description: >-
      Use these operations to access Storefront billing portals.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront checkout forms
    description: >-
      Use these operations to access Storefront checkout forms.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront custom fields
    description: >-
      Use these operations to access Storefront custom fields.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront deposits
    description: >-
      Use these operations to access Storefront deposits.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront invoices
    description: >-
      Use these operations to access Storefront invoices.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront KYC documents
    description: >-
      Use these operations to access Storefront KYC documents.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront orders
    description: >-
      Use these operations to access Storefront orders.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront payment instruments
    description: >-
      Use these operations to access Storefront payment instruments.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront plans
    description: >-
      Use these operations to access Storefront plans.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront products
    description: >-
      Use these operations to access Storefront products.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront purchases
    description: >-
      Use these operations to manage Storefront purchases.

      Purchases are transactions that have been executed related to the purchase
      of goods or services.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront quotes
    description: >-
      Use these operations to access Storefront quotes.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront transactions
    description: >-
      Use these operations to access Storefront transactions.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront operations are intended to be used directly from an untrusted
      browser.
  - name: Storefront websites
    description: >-
      Use these operations to access Storefront websites.


      Storefront operations interact directly with the customer,

      and provide the customer with access to their own data.


      To 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).

      Storefront 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.
      Tracking is a layer for accessing all activity such as:
      API requests, subscriptions, webhooks, events, and more.
  - name: Transactions
    description: |-
      Use these operations to:
        - set up payment instruments for payments
        - authorize and hold funds
        - capture funds
        - make payments
        - make payouts
        - 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.


      Use metered billing when product quantity is unknown to the customer at
      the moment of creating a subscription.

      Metered billing is based on reported usage records.

      Every reported usage updates the quantity of an upcoming invoice item for
      a specified subscription and a plan.

      To create a metered billing plan, see [Plans](../Plans).
  - name: Users
    description: >-
      Use these operations to manage users.

      A 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.

      Webhooks notify your systems in real-time when certain events occur.

      For example, when a new transaction occurs or a new subscription is
      created.

      Webhooks enable you to collect information about events.

      Rebilly can send this information by HTTP POST request to a defined URL of
      your choice.
  - name: Websites
    description: >-
      Use these operations to manage websites.

      A website is where your organization obtains a customer.

      It is also the processor account and billing descriptor used for payment
      transactions.

      You can create multiple websites.


      Websites are related to each invoice and each payment gateway account.

      This enables you to associate gateway accounts with multiple websites,

      or make them exclusive to particular websites.

      For more information, see [My organizations and
      websites](https://www.rebilly.com/docs/settings/organizations-and-websites/).
x-tagGroups:
  - name: Customers
    tags:
      - Customers
      - Customer authentication
      - Tags
      - Customers timeline
  - name: Payment Instruments
    tags:
      - Payment instruments
      - Payment tokens
  - name: Payments
    tags:
      - Transactions
      - Disputes
      - Fees
      - Transactions timeline
  - name: Orders & Invoices
    tags:
      - Orders
      - Invoices
      - Usage
      - Credit memos
      - Plans
      - Products
      - Coupons
      - Quotes
      - Quotes timeline
      - Shipping rates
      - Orders timeline
      - Invoices timeline
      - Credit memos timeline
  - name: Risk
    tags:
      - Blocklists
      - Allowlists
      - KYC documents
      - AML
      - Risk score
  - name: Misc
    tags:
      - Custom fields
      - Files
      - Search
paths:
  /aml-checks:
    get:
      x-products:
        - Core
      tags:
        - AML
      summary: Retrieve AML checks
      operationId: GetAmlCheckCollection
      x-sdk-operation-name: getAll
      description: >-
        Retrieves a list of AML checks.

        These 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.
        Customer 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.


        This operation also sets the AML check `reviewStartTime` to the current
        date-time,

        and 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.


        This operation also sets the AML check `reviewStartTime` and the
        reviewer information to null.

        Use this operation when the reviewer must stop the review.

        For 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.

        The AML check can be either confirmed or marked as a false positive with
        a customer tag.
      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`,
        `name`, `relatedId`, `relatedType`, `fileId`, `createdTime`,
        and `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([
                'filter' => 'relatedType:customer',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.files.getAllAttachments();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.files.getAllAttachments(params);


            // access the collection items, each item is an Attachment

            secondCollection.items.forEach(attachment =>
            console.log(attachment.fields.relatedType));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $attachmentsPaginator =
            $service->files()->getAllAttachmentsPaginator(limit: 5, filter:
            'relatedType:customer');

            foreach ($attachmentsPaginator as $attachmentPage) {
                printf("Attachments page %d/%d\n", $attachmentsPaginator->key() + 1, $attachmentsPaginator->count());
                foreach ($attachmentPage as $attachment) {
                    printf("Attachment #%s (%s): %s\n", $attachment->getId(), $attachment->getRelatedType(), $attachment->getName());
                }
            }


            // OR


            $attachments = $service->files()->getAllAttachments(filter:
            'relatedType:customer');

            foreach ($attachments as $attachment) {
                printf("Attachment #%s (%s): %s\n", $attachment->getId(), $attachment->getRelatedType(), $attachment->getName());
            }
    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,
        dispute, transaction, order, plan, product, invoice, or timeline
        comment. Attachments enable you to quickly find and use files
        related 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();
            $attachmentForm->setFileId('fileId');
            $attachmentForm->setRelatedType($attachmentForm::TYPE_CUSTOMER);
            $attachmentForm->setRelatedId('customerId');

            try {
                $attachment = $client->attachments()->create($attachmentForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: |
            // Define the attachment
            const data = {
                // Previously uploaded file ID
                fileId: 'my-file-id',
                relatedType: 'customer',
                relatedId: 'my-customer-id',
                name: 'an attachment',
                description: `the customer's file`
            };

            const attachment = await api.files.attach({data});
            console.log(attachment.fields.id);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $attachmentForm = new \Rebilly\Sdk\Model\Attachment();

            $attachmentForm->setFileId('fileId');

            $attachmentForm->setRelatedType($attachmentForm::RELATED_TYPE_CUSTOMER);

            $attachmentForm->setRelatedId('customerId');


            try {
                $attachment = $service->files()->attach($attachmentForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: >-
            const attachment = await api.files.getAttachment({id:
            'foobar-001'});

            console.log(attachment.fields.relatedType);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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();
            $attachmentForm->setFileId('fileId');
            $attachmentForm->setRelatedType($attachmentForm::TYPE_CUSTOMER);
            $attachmentForm->setRelatedId('customerId');

            try {
                $attachment = $client->attachments()->update('attachmentId', $attachmentForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // define the values to update

            const data = {
                relatedType: 'customer',
                relatedId: 'my-customer-id',
                name: 'an attachment',
                description: `the customer's file`
            };


            const attachment = await api.files.updateAttachment({id:
            'foobar-001', data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $attachmentForm = new \Rebilly\Sdk\Model\Attachment();

            $attachmentForm->setFileId('fileId');

            $attachmentForm->setRelatedType($attachmentForm::RELATED_TYPE_CUSTOMER);

            $attachmentForm->setRelatedId('customerId');


            try {
                $attachment = $service->files()->updateAttachment('attachmentId', $attachmentForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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');
        - lang: JavaScript
          source: |-
            const request = await api.files.detach({id: 'my-attachment-id'});

            // the request does not return any fields but
            // you can confirm the success using the status code
            console.log(request.response.status); // 204
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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();
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $authenticationOptions =
            $service->customerAuthentication()->getAuthOptions();
        - lang: JavaScript
          source: |-
            const options = await api.customerAuthentication.getAuthOptions();
            console.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();

            // Regular expression below matches any password with 6+ length that
            contains alphabet symbols and/or numbers.

            $authenticationOptionsForm->setPasswordPattern('/^[a-zA-Z0-9]{6,}$/');


            try {
                $authenticationOptions = $client->authenticationOptions()->update($authenticationOptionsForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the properties for the authentication options

            const data = {
                passwordPattern: null,
                credentialTtl: 10,
                authTokenTtl: 20,
                resetTokenTtl: 30
            };


            const options = await
            api.customerAuthentication.updateAuthOptions({data});

            console.log(options.fields.credentialTtl);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $authenticationOptionsForm = new
            \Rebilly\Sdk\Model\AuthenticationOptions();

            // Regular expression below matches any password with 6+ length that
            contains alphabet symbols and/or numbers.

            $authenticationOptionsForm->setPasswordPattern('/^[a-zA-Z0-9]{6,}$/');


            try {
                $authenticationOptions = $service->customerAuthentication()->updateAuthOptions($authenticationOptionsForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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([
                'filter' => 'customerId:testCustomer',
            ]);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $listOfTokens =
            $service->customerAuthentication()->getAllAuthTokens();


            // alternatively you can specify one or more of them

            $listOfTokens =
            $coreService->customerAuthentication()->getAllAuthTokens(limit: 5,
            offset: 2);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await
            api.customerAuthentication.getAllAuthTokens();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100};

            const secondCollection = await
            api.customerAuthentication.getAllAuthTokens(params);


            // access the collection items, each item is an AuthenticationToken

            secondCollection.items.forEach(token =>
            console.log(token.fields.username));
    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();
            $authenticationForm->setUsername('username');
            $authenticationForm->setPassword('test123');

            try {
                $authenticationToken = $client->authenticationTokens()->login($authenticationForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: |-
            const data = {
                username: 'foobar',
                password: 'fuubar'

                // optionally you can define an `expiredTime` to 
                // limit the duration of the session token

                //expiredTime: '2017-09-18T19:17:39Z'
            };
            const session = await api.customerAuthentication.login({data});
            console.log(session.fields.token);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $authenticationForm =
            \Rebilly\Sdk\Model\AuthenticationTokenPasswordMode::from();

            $authenticationForm->setUsername('username');

            $authenticationForm->setPassword('test123');


            try {
                $authenticationToken = $service->customerAuthentication()->login($authenticationForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: >
            const token = 'dcf6e32f2daee457a1db8ce5fdfbe200';

            const verification = await
            api.customerAuthentication.verify({token});

            // if the token is valid then no error will be thrown

            console.log(verification.reponse.status) // 200
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $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');
        - lang: JavaScript
          source: |-
            const token = 'dcf6e32f2daee457a1db8ce5fdfbe200';
            const request = await api.customerAuthentication.logout({token});

            // the request does not return any fields but
            // you can confirm the success using the status code
            console.log(request.response.status); // 204
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $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.



        By 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([
                'filter' => 'value:testValue',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.blocklists.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.blocklists.getAll(params);


            // access the collection items, each item is a Blocklist

            secondCollection.items.forEach(blocklistItem =>
            console.log(blocklistItem.fields.status));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $blocklistsPaginator =
            $service->blocklists()->getAllPaginator(limit: 5, filter:
            'value:testValue');

            foreach ($blocklistsPaginator as $blocklistPage) {
                printf("Blocklists page %d/%d\n", $blocklistsPaginator->key() + 1, $blocklistsPaginator->count());
                foreach ($blocklistPage as $blocklist) {
                    printf("Blocklist #%s (%s): %s\n", $blocklist->getId(), $blocklist->getType(), $blocklist->getValue());
                }
            }


            // OR


            $blocklists = $service->blocklists()->getAll(filter:
            'value:testValue');

            foreach ($blocklists as $blocklist) {
                printf("Blocklist #%s (%s): %s\n", $blocklist->getId(), $blocklist->getType(), $blocklist->getValue());
            }
    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();
            $blocklistForm->setType($blocklistForm::TYPE_EMAIL);
            $blocklistForm->setValue('test@test.com');
            $blocklistForm->setExpiredTime('2025-01-01 05:00:00');

            try {
                $blocklist = $client->blocklists()->create($blocklistForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // first set the required properties for the new blocklist item

            const data = {
                type: 'ip-address',
                value: '63.118.98.100'

                // optionally provide an `expirationTime` to make
                // the item expire and function like a `greylist`

                // expirationTime: '2017-09-18T21:50:44Z'
            };


            // the ID is optional

            const firstKey = await api.blocklists.create({data});


            // or you can provide one

            const secondKey = await api.blocklists.create({id: 'my-second-id',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $blocklistForm = new \Rebilly\Sdk\Model\Blocklist();
            $blocklistForm->setType($blocklistForm::TYPE_EMAIL);
            $blocklistForm->setValue('test@test.com');
            $blocklistForm->setExpirationTime('2025-01-01 05:00:00');

            try {
                $blocklist = $service->blocklists()->create($blocklistForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: |
            const blocklistItem = await api.blocklists.get({id: 'foobar-001'});
            console.log(blocklistItem.fields.status);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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();
            $blocklistForm->setType($blocklistForm::TYPE_EMAIL);
            $blocklistForm->setValue('test@test.com');
            $blocklistForm->setExpiredTime('2025-01-01 05:00:00');

            try {
                $blocklist = $client->blocklists()->create($blocklistForm, 'blocklistId');
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // first set the required properties for the new blocklist item

            const data = {
                type: 'ip-address',
                value: '63.118.98.100'

                // optionally provide an `expirationTime` to make
                // the item expire and function like a `greylist`

                // expirationTime: '2017-09-18T21:50:44Z'
            };


            // the ID is optional

            const firstKey = await api.blocklists.create({data});


            // or you can provide one

            const secondKey = await api.blocklists.create({id: 'my-second-id',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $blocklistForm = new \Rebilly\Sdk\Model\Blocklist();
            $blocklistForm->setType($blocklistForm::TYPE_EMAIL);
            $blocklistForm->setValue('test@test.com');
            $blocklistForm->setExpirationTime('2025-01-01 05:00:00');

            try {
                $blocklist = $service->blocklists()->update('blocklistId', $blocklistForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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');
        - lang: JavaScript
          source: |
            const request = await api.blocklists.delete({id: 'my-second-key'});

            // the request does not return any fields but
            // you can confirm the success using the status code
            console.log(request.response.status); // 204
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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([
                'filter' => 'customerId:testCustomer',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.coupons.getAllRedemptions();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await
            api.coupons.getAllRedemptions(params);


            // access the collection items, each item is a CouponRedemption

            secondCollection.items.forEach(redemption =>
            console.log(redemption.fields.status));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $couponRedemptionsPaginator =
            $service->coupons()->getAllRedemptionsPaginator(limit: 5, filter:
            'customerId:testCustomer');

            foreach ($couponRedemptionsPaginator as $couponRedemptionsPage) {
                printf("Coupon redemptions page %d/%d\n", $couponRedemptionsPaginator->key() + 1, $couponRedemptionsPaginator->count());
                foreach ($couponRedemptionsPage as $couponRedemption) {
                    printf("Coupon redemption #%s\n", $couponRedemption->getId());
                }
            }


            // OR


            $couponRedemptions = $service->coupons()->getAllRedemptions(filter:
            'customerId:testCustomer');

            foreach ($couponRedemptions as $couponRedemption) {
                printf("Coupon redemption #%s\n", $couponRedemption->getId());
            }
    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();

            $redemptionForm->setCustomerId('customerId');

            $redemptionForm->setCouponId('couponId');


            $restrictionData = [
                'type' => Rebilly\Entities\Coupons\Restriction::TYPE_DISCOUNTS_PER_REDEMPTION,
                'quantity' => 2,
            ];


            $restrictionForm =
            Rebilly\Entities\Coupons\Restriction::createFromData($restrictionData);


            $redemptionForm->setAdditionalRestrictions([$restrictionForm]);


            try {
                $couponRedemption = $client->couponsRedemptions()->redeem($redemptionForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: |
            // build the redemption data
            const data = {
              couponId: 'my-best-coupon',
              customerId: 'foobar-001'
            };

            const redemption = await api.coupons.redeem({data});
            console.log(redemption.fields.id);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $redemptionForm = new \Rebilly\Sdk\Model\CouponRedemption();

            $redemptionForm->setCustomerId('customerId');

            $redemptionForm->setCouponId('couponId');


            $restrictionForm = new
            \Rebilly\Sdk\Model\CouponRestrictionDiscountPerRedemption();

            $restrictionForm->setQuantity(2);


            $redemptionForm->setAdditionalRestrictions([$restrictionForm]);


            try {
                $couponRedemption = $service->coupons()->redeem($redemptionForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: >-
            const redemption = await api.coupons.getRedemption({id:
            'foobar-001'});

            console.log(redemption.fields.id);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $couponRedemption =
            $service->coupons()->getRedemption('redemptionId');
  /coupons-redemptions/{id}/cancel:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Core
      tags:
        - Coupons
      summary: Cancel a coupon redemption
      operationId: PostCouponRedemptionCancellation
      x-sdk-operation-name: cancelRedemption
      x-sdk-resource: Coupons
      description: Cancels a coupon redemption with a specified ID.
      responses:
        '201':
          description: Coupon redemption cancelled.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $client->couponsRedemptions()->cancel('id');
        - lang: JavaScript
          source: >-
            const cancellation = await api.coupons.cancelRedemption({id:
            'foobar-001'});


            // the request does not return any fields but

            // you can confirm the success using the status code

            console.log(cancellation.response.status); // 201
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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([
                'filter' => 'status:issued',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.coupons.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.coupons.getAll(params);


            // access the collection items, each item is a Coupon

            secondCollection.items.forEach(coupon =>
            console.log(coupon.fields.status));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $couponsPaginator = $service->coupons()->getAllPaginator(limit: 5,
            filter: 'status:issued');

            foreach ($couponsPaginator as $couponsPage) {
                printf("Coupons page %d/%d\n", $couponsPaginator->key() + 1, $couponsPaginator->count());
                foreach ($couponsPage as $coupon) {
                    printf("Coupon #%s (%s): %s\n", $coupon->getId(), $coupon->getStatus(), $coupon->getDescription());
                }
            }


            // OR


            $coupons = $service->coupons()->getAll(filter: 'status:issued');

            foreach ($coupons as $coupon) {
                printf("Coupon #%s (%s): %s\n", $coupon->getId(), $coupon->getStatus(), $coupon->getDescription());
            }
    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();


            $discountArray = [
                'currency' => 'USD',
                'amount' => 1.99,
            ];


            $discountForm = new
            \Rebilly\Entities\Coupons\Discounts\Fixed($discountArray);

            $couponForm->setDiscount($discountForm);

            // Coupon can be used right now

            $couponForm->setIssuedTime(date('c'));


            $restrictionArray = [
                'quantity' => 2,
            ];


            $restrictionForm = new
            Rebilly\Entities\Coupons\Restrictions\DiscountsPerRedemption($restrictionArray);


            $couponForm->setRestrictions([$restrictionForm]);


            try {
                $coupon = $client->coupons()->create($couponForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // first set the required properties for the new coupon

            const data = {
                description: 'a new coupon',
                issuedTime: '2017-09-19T20:46:44Z',
                discount: {
                    type: 'percent',
                    value: 12
                },
                restrictions: [{
                    type: 'discounts-per-redemption',
                    quantity: 12
                }]
            };


            // the ID is optional

            const firstKey = await api.coupons.create({data});


            // or you can provide one

            const secondKey = await api.coupons.create({id: 'my-second-id',
            data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $couponForm = new \Rebilly\Sdk\Model\Coupon();


            $discountForm = new \Rebilly\Sdk\Model\DiscountFixed();

            $discountForm->setCurrency('USD');

            $discountForm->setAmount(1.99);


            $couponForm->setDiscount($discountForm);

            // Coupon can be used right now

            $couponForm->setIssuedTime(date('c'));


            $restrictionArray = [
                'quantity' => 2,
            ];


            $restrictionForm = new
            \Rebilly\Sdk\Model\CouponRestrictionDiscountPerRedemption($restrictionArray);


            $couponForm->setRestrictions([$restrictionForm]);


            try {
                $coupon = $service->coupons()->create($couponForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: |
            const coupon = await api.coupons.get({couponId: 'foobar-001'});
            console.log(coupon.fields.status);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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([
                'issuedTime' => '2022-01-01T00:00:00-04:00',
            ]);


            $discountArray = [
                'type' => Rebilly\Entities\Coupons\Discount::TYPE_FIXED,
                'currency' => 'USD',
                'amount' => 1.99,
            ];


            $discountForm =
            Rebilly\Entities\Coupons\Discount::createFromData($discountArray);

            $couponForm->setDiscount($discountForm);


            $restrictionArray = [
                'type' => Rebilly\Entities\Coupons\Restriction::TYPE_DISCOUNTS_PER_REDEMPTION,
                'quantity' => 2,
            ];


            $restrictionForm =
            Rebilly\Entities\Coupons\Restriction::createFromData($restrictionArray);


            $couponForm->setRestrictions([$restrictionForm]);


            try {
                $coupon = $client->coupons()->create($couponForm, 'couponId');
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // creating a coupon

            const data = {
                description: 'a new coupon',
                issuedTime: '2017-09-19T20:46:44Z',
                discount: {
                    type: 'percent',
                    value: 12
                },
                restrictions: [{
                    type: 'discounts-per-redemption',
                    quantity: 12
                }]
            };


            // the ID is optional

            const firstKey = await api.coupons.create({data});


            // or you can provide one

            const secondKey = await api.coupons.create({id: 'my-second-id',
            data});



            // updating a coupon

            const data = {
                description: 'a small update'
            };


            const coupon = await api.coupons.update({id: 'my-second-id', data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $couponForm = new \Rebilly\Sdk\Model\Coupon();

            $couponForm->setIssuedTime('2022-01-01T00:00:00-04:00');


            $discountForm = new \Rebilly\Sdk\Model\DiscountFixed();

            $discountForm->setCurrency('USD');

            $discountForm->setAmount(1.99);


            $couponForm->setDiscount($discountForm);


            $restrictionForm = new
            \Rebilly\Sdk\Model\CouponRestrictionDiscountPerRedemption();

            $restrictionForm->setQuantity(2);


            $couponForm->setRestrictions([$restrictionForm]);


            try {
                $coupon = $service->coupons()->update('couponId', $couponForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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.
        The `expiredTime` of a coupon must be greater than its `issuedTime`.

        > **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 has expired and been redeemed. Unable to reschedule
            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 = {
                expiredTime: "2020-05-25T18:51:14Z"
            }


            const coupon = await api.coupons.setExpiration({id: 'my-second-id',
            data});
  /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([
                'filter' => 'customerId:testCustomer',
            ]);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $customerCredentials =
            $service->customerAuthentication()->getAllCredentials(limit: 10);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await
            api.customerAuthentication.getAllCredentials();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100};

            const secondCollection = await
            api.customerAuthentication.getAllCredentials(params);


            // access the collection items, each item is a CustomerCredential

            secondCollection.items.forEach(credential =>
            console.log(credential.fields.customerId));
    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();
            $customerCredentialForm->setCustomerId('customerId');
            $customerCredentialForm->setUsername('test');
            $customerCredentialForm->setPassword('1234');

            try {
                $customerCredential = $client->customerCredentials()->create($customerCredentialForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the required properties for the new credential

            const data = {
                username: 'foobar',
                password: 'fuubar',
                customerId: 'foobar-0001'

                // optionally you can define an `expiredTime` to 
                // limit the duration of the credential

                //expiredTime: '2017-09-18T19:17:39Z'
            };


            // the ID is optional

            const firstCredential = await
            api.customerAuthentication.createCredential({data});


            // or you can provide one

            const secondCredential = await
            api.customerAuthentication.createCredential({id: 'my-second-id',
            data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $customerCredentialForm =
            \Rebilly\Sdk\Model\CustomerCredential::from([])
                ->setCustomerId('customerId')
                ->setUsername('test')
                ->setPassword('1234');

            try {
                $customerCredential = $service->customerAuthentication()->createCredential($customerCredentialForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: >-
            const credential = await
            api.customerAuthentication.getCredential({id: 'my-first-id'});

            console.log(credential.fields.customerId);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $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();
            $customerCredentialForm->setCustomerId('customerId');
            $customerCredentialForm->setUsername('test');
            $customerCredentialForm->setPassword('1234');

            try {
                $customerCredential = $client->customerCredentials()->update('credentialId', $customerCredentialForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // creating a new credential

            const data = {
                username: 'foobar',
                password: 'fuubar',
                customerId: 'foobar-0001'

                // optionally you can define an `expiredTime` to 
                // limit the duration of the credential

                //expiredTime: '2017-09-18T19:17:39Z'
            };


            // the ID is optional

            const firstCredential = await
            api.customerAuthentication.createCredential({data});


            // or you can provide one

            const secondCredential = await
            api.customerAuthentication.createCredential({id: 'my-second-id',
            data});





            // updating a credential

            const data = {
                username: 'foobar',
                password: 'hell0'
            };


            const secondCredential = await
            api.customerAuthentication.updateCredential({id: 'my-second-id',
            data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $customerCredentialForm =
            \Rebilly\Sdk\Model\CustomerCredential::from([])
                ->setCustomerId('customerId')
                ->setUsername('test')
                ->setPassword('1234');

            try {
                $customerCredential = $service->customerAuthentication()->updateCredential('credentialId', $customerCredentialForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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');
        - lang: JavaScript
          source: >-
            const request = await
            api.customerAuthentication.deleteCredential({id: 'my-second-key'});


            // the request does not return any fields but

            // you can confirm the success using the status code

            console.log(request.response.status); // 204
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $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', [
                'filter' => 'type:boolean',
            ]);
        - lang: JavaScript
          source: >
            // all parameters except `resource` are optional

            const firstCollection = await api.customFields.getAll({resource:
            'customers'});


            // alternatively you can specify one or more of them

            const params = {resource: 'customers', limit: 20, offset: 100};

            const secondCollection = await api.customFields.getAll(params);


            // access the collection items, each item is a CustomField

            secondCollection.items.forEach(customField =>
            console.log(customField.fields.description));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $customFieldsPaginator =
            $service->customFields()->getAllPaginator(resource: 'customers',
            limit: 5);

            foreach ($customFieldsPaginator as $customFieldPage) {
                printf("Custom fields page %d/%d\n", $customFieldsPaginator->key() + 1, $customFieldsPaginator->count());
                foreach ($customFieldPage as $customField) {
                    printf("Custom field #%s: %s\n", $customField->getName(), $customField->getDescription());
                }
            }


            // OR


            $customFields = $service->customFields()->getAll('customers');

            foreach ($customFields as $customField) {
                printf("Custom field #%s: %s\n", $customField->getName(), $customField->getDescription());
            }
  /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');
        - lang: JavaScript
          source: >-
            const customField = await api.customFields.get({resource:
            'customers', name: 'dob'});

            console.log(customField.fields.description);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $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
            associated 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();
            $customFieldForm->setType($customFieldForm::TYPE_BOOLEAN);

            try {
                $customField = $client->customFields()->update('customers', 'testFieldName', $customFieldForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: |
            // creating a custom field
            const data = {
                name: 'Date of Birth',
                type: 'date',
                description: `The customer's date of birth`
            };

            // define the entire payload
            const params = {resource: 'customers', name: 'dob', data};

            // create the custom field
            const customField = await api.customFields.create(params);

            // or update the custom field
            const customField = await api.customFields.update(params);

            // you can verify if the custom field is used
            console.log(customField.fields.isUsed);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $customFieldForm = new \Rebilly\Sdk\Model\BooleanCustomField();
            $customFieldForm->setDescription('testFieldDescription');

            try {
                $customField = $service->customFields()->create('customers', 'testFieldName', $customFieldForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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([
                'filter' => 'firstName:John',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.customers.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.customers.getAll(params);


            // access the collection items, each item is a Customer

            secondCollection.items.forEach(customer =>
            console.log(customer.fields.primaryAddress.firstName));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $customersPaginator = $service->customers()->getAllPaginator(limit:
            5);

            foreach ($customersPaginator as $customerPage) {
                printf("Customers page %d/%d\n", $customersPaginator->key() + 1, $customersPaginator->count());
                foreach ($customerPage as $customer) {
                    printf("Customer #%s: %s\n", $customer->getId(), $customer->getFirstName());
                }
            }


            // OR


            $customers = $service->customers()->getAll(filter:
            'firstName:John');

            foreach ($customers as $customer) {
                printf("Customer #%s: %s\n", $customer->getId(), $customer->getFirstName());
            }
    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.


        The customer's primary address is used as the default address for

        payment instruments, subscriptions, and invoices if none are provided.


        If the customer already has an identifier within your system,

        and you want to create customer with a predefined ID &mdash; to

        prevent duplicate customers, use the _Upsert a customer

        with predefined ID_ operation. For more information, see

        [Prevent duplicate
        customers](https://www.rebilly.com/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();
            $customerForm->setPrimaryAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
            ]);

            try {
                $customer = $client->customers()->create($customerForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the properties for the new customer

            const data = {
                primaryAddress: {
                    firstName: 'John',
                    lastName: 'Doe',
                    emails: [{
                        label: 'main',
                        value: 'john.doe+test@grr.la',
                        primary: true
                    }],
                }
            };


            // the ID is optional

            const firstCustomer = await api.customers.create({data});


            // or you can provide one

            const secondCustomer = await api.customers.create({id:
            'my-second-id', data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $customerForm = \Rebilly\Sdk\Model\Customer::from([])
                ->setWebsiteId('websiteId')
                ->setPrimaryAddress(
                    \Rebilly\Sdk\Model\ContactObject::from([])
                        ->setFirstName('John')
                        ->setLastName('Doe')
                        ->setAddress('Test street 5')
                        ->setEmails([
                            \Rebilly\Sdk\Model\ContactEmails::from([])
                                ->setLabel('main')
                                ->setValue('johndoe@email.com')
                                ->setPrimary(true),
                        ]),
                );

            try {
                $customer = $service->customers()->create($customerForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: |-
            const customer = await api.customers.get({id: 'foobar-001'});
            console.log(customer.fields.primaryAddress.firstName);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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.


        If the customer already has an identifier within your system,

        and you want to create a customer with a specified ID &mdash; use this
        operation to prevent duplicate customers.

        For 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();
            $customerForm->setPrimaryAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
            ]);

            try {
                $customer = $client->customers()->update('myCustomerId', $customerForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // creating a customer

            const data = {
                primaryAddress: {
                    firstName: 'John',
                    lastName: 'Doe',
                    emails: [{
                        label: 'main',
                        value: 'john.doe+test@grr.la',
                        primary: true
                    }],
                }
            };


            // the ID is optional

            const firstCustomer = await api.customers.create({data});


            // or you can provide one

            const secondCustomer = await api.customers.create({id:
            'my-second-id', data});




            // updating a customer

            const data = {
                primaryAddress: {
                    firstName: 'Johnny',
                    lastName: 'Doe',
                    emails: [{
                        label: 'main',
                        value: 'johnny.doe+test@grr.la',
                        primary: true
                    }],
                }
            };


            const customer = await api.customers.update({id: 'my-second-id',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $customerForm = \Rebilly\Sdk\Model\Customer::from([])
                ->setWebsiteId('websiteId')
                ->setPrimaryAddress(
                    \Rebilly\Sdk\Model\ContactObject::from([])
                        ->setFirstName('John')
                        ->setLastName('Doe')
                        ->setAddress('Test street 5')
                        ->setEmails([
                            \Rebilly\Sdk\Model\ContactEmails::from([])
                                ->setLabel('main')
                                ->setValue('johndoe@email.com')
                                ->setPrimary(true),
                        ]),
                );

            try {
                $customer = $service->customers()->update('myCustomerId', $customerForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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
            to 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);
            $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.


        A lead source is the marketing campaign that generates customer
        interaction, a sale, or a trial.

        For more information, see [Lead source
        attribution](https://www.rebilly.com/docs/dev-docs/concepts/#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');
            $leadSource = $customer->getLeadSource();
        - lang: JavaScript
          source: >-
            const lead = await api.customers.getLeadSource({id:
            'my-second-id'});

            console.log(lead.fields.affiliate);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $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.


        A lead source is the marketing campaign that

        generates customer interaction, a sale, or a trial. For more

        information, see

        [Lead source
        attribution](https://www.rebilly.com/docs/dev-docs/concepts/#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();
            $leadSourceForm->setSource('TestSource');
            $leadSourceForm->setCampaign('TestCampaign');

            try {
                $customer = $client->customers()->updateLeadSource('myCustomerId', $leadSourceForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the properties for the new lead source

            const data = {
                medium: 'foobar',
                source: 'www.google.com',
                campaign: 'my-first-campaign',
                term: 'subscriptions',
                content: 'subscription business',
                affiliate: 'Acme',
                subAffiliate: null,
                salesAgent: null,
                clickId: null,
                path: null,
                ipAddress: '12.34.56.78',
                currency: 'USD',
                amount: 0
            };


            const lead = await api.customers.createLeadSource({id:
            'my-second-id', data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $leadSourceForm = \Rebilly\Sdk\Model\LeadSource::from([])
                ->setSource('TestSource')
                ->setCampaign('TestCampaign');

            try {
                $customer = $service->customers()->createLeadSource('myCustomerId', $leadSourceForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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');
        - lang: JavaScript
          source: >-
            const request = await api.customers.deleteLeadSource({id:
            'my-second-id'});


            // the request does not return any fields but

            // you can confirm the success using the status code

            console.log(request.response.status); // 204
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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`

            const firstCollection = await api.customers
                .getAllTimelineMessages({id: 'my-customer'});

            // alternatively you can specify one or more of them

            const params = {id: 'my-customer', limit: 20, offset: 100};

            const secondCollection = await
            api.customers.getAllTimelineMessages(params);


            // access the collection items, each item is a CustomerTimeline

            secondCollection.items
                .forEach(message => console.log(message.fields.eventType));
    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

            const firstComment = await api
                .customers.createTimelineComment({id: 'my-customer-id', data: {message: 'Your comment here'}});

            // Using params object, mentions and references

            const message = `Example of mentions @user@mydomain.com and
            references #customers-customer-id`;

            const params = {
                id: 'my-customer-id',
                data: {
                    message,
                },
            };

            const 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
                .getTimelineMessage({id: 'foobar-001', messageId: 'message-202'});
            console.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
                .deleteTimelineMessage({id: 'foobar-001', messageId: 'message-202'});

            // the request does not return any fields but
            // you can confirm the success using the status code
            console.log(request.response.status); // 204
  /disputes:
    get:
      x-products:
        - Core
      tags:
        - Disputes
      summary: Retrieve disputes
      operationId: GetDisputeCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of all disputes.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: List of disputes successfully retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Dispute'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $disputes = $client->disputes()->search([
                'filter' => 'transactionId:testId',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.disputes.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.disputes.getAll(params);


            // access the collection items, each item is a Dispute

            secondCollection.items.forEach(dispute =>
            console.log(dispute.fields.transactionId));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $disputesPaginator = $service->disputes()->getAllPaginator(filter:
            'transactionId:testId', limit: 5);

            foreach ($disputesPaginator as $disputesPage) {
                printf("Disputes page %d/%d\n", $disputesPaginator->key() + 1, $disputesPaginator->count());
                foreach ($disputesPage as $dispute) {
                    printf("Dispute #%s (%s)\n", $dispute->getId(), $dispute->getStatus());
                }
            }


            // OR


            $disputes = $service->disputes()->getAll(filter:
            'transactionId:testId');

            foreach ($disputes as $dispute) {
                printf("Dispute #%s (%s)\n", $dispute->getId(), $dispute->getStatus());
            }
    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();
            $disputeForm->setTransactionId('transactionId');
            $disputeForm->setCurrency('USD');
            $disputeForm->setAmount(10);
            $disputeForm->setReasonCode(1000);
            $disputeForm->setType($disputeForm::TYPE_1CB);
            $disputeForm->setStatus($disputeForm::STATUS_RESPONSE_NEEDED);
            $disputeForm->setPostedTime('2025-01-01 05:00:00');

            try {
                $dispute = $client->disputes()->create($disputeForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the properties for the new dispute

            const data = {
                transactionId: 'my-transaction-id',
                currency: 'USD',
                amount: 5,
                reasonCode: '1000',
                type: 'first-chargeback',
                status: 'response-needed',
                acquirerReferenceNumber: '143543',
                postedTime: '2017-09-19T20:46:48Z',
                deadlineTime: '2017-09-19T20:46:48Z'
            };


            // the ID is optional

            const firstdispute = await api.disputes.create({data});


            // or you can provide one

            const secondDispute = await api.disputes.create({id: 'my-second-id',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $disputeForm = new \Rebilly\Sdk\Model\PostDisputeRequest();
            $disputeForm->setTransactionId('transactionId');
            $disputeForm->setCurrency('USD');
            $disputeForm->setAmount(10);
            $disputeForm->setReasonCode('1000');
            $disputeForm->setType($disputeForm::TYPE_INFORMATION_REQUEST);
            $disputeForm->setStatus($disputeForm::STATUS_RESPONSE_NEEDED);
            $disputeForm->setPostedTime('2025-01-01 05:00:00');

            try {
                $dispute = $service->disputes()->create($disputeForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: |-
            const dispute = await api.disputes.get({id: 'foobar-001'});
            console.log(dispute.fields.firstName);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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();
            $disputeForm->setTransactionId('transactionId');
            $disputeForm->setCurrency('USD');
            $disputeForm->setAmount(10);
            $disputeForm->setReasonCode(1000);
            $disputeForm->setType($disputeForm::TYPE_1CB);
            $disputeForm->setStatus($disputeForm::STATUS_RESPONSE_NEEDED);
            $disputeForm->setPostedTime('2025-01-01 05:00:00');

            try {
                $dispute = $client->disputes()->update('disputeId', $dispute);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // creating a dispute

            const data = {
                transactionId: 'my-transaction-id',
                currency: 'USD',
                amount: 5,
                reasonCode: '1000',
                type: 'first-chargeback',
                status: 'response-needed',
                acquirerReferenceNumber: '143543',
                postedTime: '2017-09-19T20:46:48Z',
                deadlineTime: '2017-09-19T20:46:48Z'
            };


            // the ID is optional

            const firstdispute = await api.disputes.create({data});


            // or you can provide one

            const secondDispute = await api.disputes.create({id: 'my-second-id',
            data});




            // updating a dispute

            const data = {
                transactionId: 'my-other-transaction-id',
                currency: 'USD',
                amount: 5,
                reasonCode: '1000',
                type: 'first-chargeback',
                status: 'response-needed',
                acquirerReferenceNumber: '143543',
                postedTime: '2017-09-19T20:46:48Z',
                deadlineTime: '2017-09-19T20:46:48Z'
            };


            const dispute = await api.disputes.update({id: 'my-second-id',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $disputeForm = new \Rebilly\Sdk\Model\PostDisputeRequest();
            $disputeForm->setTransactionId('transactionId');
            $disputeForm->setCurrency('USD');
            $disputeForm->setAmount(10);
            $disputeForm->setReasonCode('1000');
            $disputeForm->setType($disputeForm::TYPE_INFORMATION_REQUEST);
            $disputeForm->setStatus($disputeForm::STATUS_RESPONSE_NEEDED);
            $disputeForm->setPostedTime('2025-01-01 05:00:00');

            try {
                $dispute = $service->disputes()->update('disputeId', $disputeForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /{resource}/{resourceId}/external-identifiers/{service}:
    parameters:
      - $ref: '#/components/parameters/externalIdentifierResource'
      - $ref: '#/components/parameters/externalIdentifierResourceId'
      - $ref: '#/components/parameters/externalIdentifierService'
  /files:
    get:
      x-products:
        - Core
      tags:
        - Files
      summary: Retrieve files
      operationId: GetFileCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of files.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionFields'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of files retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/File'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $files = $client->files()->search([
                'filter' => 'name:TestFile',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.files.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.files.getAll(params);


            // access the collection items, each item is a File

            secondCollection.items.forEach(file =>
            console.log(file.fields.name));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $filesPaginator = $service->files()->getAllPaginator(limit: 5,
            filter: 'name:TestFile');

            foreach ($filesPaginator as $filesPage) {
                printf("Files page %d/%d\n", $filesPaginator->key() + 1, $filesPaginator->count());
                foreach ($filesPage as $file) {
                    printf("File #%s: %s\n", $file->getId(), $file->getName());
                }
            }


            // OR


            $files = $service->files()->getAll(filter: 'name:TestFile');

            foreach ($files as $file) {
                printf("File #%s: %s\n", $file->getId(), $file->getName());
            }
    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.

        Additionally, a file can be sent by:

         - Multipart/form-data POST request: In this request, the file is
         uploaded and all property names are the same as the JSON names.
         - File body request: In this request, the file body is sent as
         the request body, with the appropriate `Content-Type`. No
         additional properties can be set with the request data.

        Permitted file types: `.jpg`, `.png`, `.gif`, and `.pdf`.

        When using a publishable API key, only private files can be created.
        The files can be modified at a later point or time, or 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();
            $fileForm->setUrl('http://test.com/somefile.jpg');

            try {
                $file = $client->files()->create($fileForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // using a FileList to fetch a file

            const fileObject = fileList[0];


            const addedFile = await api.files.upload({fileObject});





            // or, upload and update a file at the same time


            // using a FileList to fetch a file

            const fileObject = fileList[0];


            // define file data

            const data = {
                description: 'my new file',
                tags: ['original']
            };


            const addedFile = await api.files.uploadAndUpdate({fileObject,
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $fileForm = new \Rebilly\Sdk\Model\FileCreateFromUrl();
            $fileForm->setUrl('http://test.com/somefile.jpg');

            try {
                $file = $service->files()->upload($fileForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: |-
            const file = await api.files.get({id: 'foobar-001'});
            console.log(file.fields.name);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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.

        > **Note:** Files can only be uploaded by POST request.
        For 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();
            $fileForm->setDescription('This is a test file');

            try {
                $file = $client->files()->update('fileId', $fileForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // define the values to update

            const data = {
                name: 'new file name',
                description: 'a fitting description',
                tags: ['original']
            };


            const file = await api.files.update({id: 'my-file-id', data});





            // or, upload and update a file at the same time


            // using a FileList to fetch a file

            const fileObject = fileList[0];


            // define file data

            const data = {
                description: 'my new file',
                tags: ['original']
            };


            const addedFile = await api.files.uploadAndUpdate({fileObject,
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $fileForm = new \Rebilly\Sdk\Model\File();
            $fileForm->setDescription('This is a test file');

            try {
                $file = $service->files()->update('fileId', $fileForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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');
        - lang: JavaScript
          source: >-
            // simply delete a file

            const request = await api.files.delete({id: 'my-file-id'});


            // the request does not return any fields but

            // you can confirm the success using the status code

            console.log(request.response.status); // 204





            // or, delete a file and its related resource attachments

            // use this method to remove the file completely from all resources
            at once.


            const request = await api.files.detachAndDelete({id: 'my-file-id'});


            // the request does not return any fields but

            // you can confirm the success using the status code

            console.log(request.response.status); // 204
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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'});

            // access the file ArrayBuffer to view the content 
            console.log(file.data);
  /application-instances/{applicationId}:
    parameters:
      - $ref: '#/components/parameters/applicationId'
  /application-instances/{applicationId}/configuration:
    parameters:
      - $ref: '#/components/parameters/applicationId'
  /applications/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /applications/{id}/instances:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /applications/{id}/instances/{organizationId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/organizationId'
  /invoices:
    get:
      x-products:
        - Core
      tags:
        - Invoices
      summary: Retrieve invoices
      operationId: GetInvoiceCollection
      x-sdk-operation-name: getAll
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Retrieves a list of invoices.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: List of invoices retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Invoice'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $invoices = $client->invoices()->search([
                'filter' => 'customerId:testCustomerId',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.invoices.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.invoices.getAll(params);


            // access the collection items, each item is an Invoice

            secondCollection.items.forEach(invoice =>
            console.log(invoice.fields.firstName));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $invoicesPaginator = $service->invoices()->getAllPaginator(filter:
            'customerId:testCustomerId', limit: 5);

            foreach ($invoicesPaginator as $invoicePage) {
                printf("Invoices page %d/%d\n", $invoicesPaginator->key() + 1, $invoicesPaginator->count());
                foreach ($invoicePage as $invoice) {
                    printf("Invoice #%s (%s): %.2f\n", $invoice->getId(), $invoice->getStatus(), $invoice->getAmount());
                }
            }


            // OR


            $invoices = $service->invoices()->getAll(filter:
            'customerId:testCustomerId', limit: 100);

            foreach ($invoices as $invoice) {
                printf("Invoice #%s (%s): %.2f\n", $invoice->getId(), $invoice->getStatus(), $invoice->getAmount());
            }
    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();
            $invoiceForm->setCustomerId('customerId');
            $invoiceForm->setWebsiteId('websiteId');
            $invoiceForm->setCurrency('USD');
            $invoiceForm->setBillingAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
            ]);

            try {
                $invoice = $client->invoices()->create($invoiceForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the properties for the new invoice

            const data = {
                customerId: 'foobar-0001',
                websiteId: 'my-main-website',
                currency: 'USD',
                billingAddress: {
                    firstName: 'Johnny',
                    lastName: 'Brown',
                    emails: [{
                        label: 'main',
                        value: 'johnny+test@grr.la',
                        primary: true
                    }],
                },
                deliveryAddress: {
                    firstName: 'Johnny',
                    lastName: 'Brown',
                    emails: [{
                        label: 'main',
                        value: 'johnny+test@grr.la',
                        primary: true
                    }],
                },
                notes: `customer's first invoice`,
            };


            // the ID is optional

            const firstInvoice = await api.invoices.create({data});


            // or you can provide one

            const secondInvoice = await api.invoices.create({id: 'my-second-id',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $invoice = \Rebilly\Sdk\Model\Invoice::from()
                ->setCustomerId('customerId')
                ->setWebsiteId('websiteId')
                ->setCurrency('USD')
                ->setBillingAddress([
                    'firstName' => 'John',
                    'lastName' => 'Doe',
                    'organization' => 'Test LTD',
                    'address' => 'Test street 5',
                    'address2' => 'Test house 5',
                    'city' => 'New York',
                    'region' => 'Long Island',
                    'country' => 'US',
                    'postalCode' => '123456',
                    'emails' => [
                        [
                            'label' => 'main',
                            'value' => 'johndoe@testemail.com',
                            'primary' => true,
                        ],
                        [
                            'label' => 'secondary',
                            'value' => 'otheremail@testemail.com',
                        ],
                    ],
                    'phoneNumbers' => [
                        [
                            'label' => 'work',
                            'value' => '+123456789',
                            'primary' => true,
                        ],
                        [
                            'label' => 'home',
                            'value' => '+9874654321',
                        ],
                    ],
                ]);

            try {
                $invoice = $service->invoices()->create($invoice);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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:
                $ref: '#/components/schemas/Invoice'
        '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');
        - lang: JavaScript
          source: |-
            const invoice = await api.invoices.get({id: 'foobar-001'});
            console.log(invoice.fields.primaryAddress.firstName);


            // alternatively, download as a PDF file
            const pdf = await api.invoices.downloadPDF({id: 'foobar-001'});
            // the invoice's data in arraybuffer format
            console.log(pdf.data);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $invoice = $service->invoices()->get('invoiceId');
    put:
      x-products:
        - Core
      tags:
        - Invoices
      summary: Upsert an invoice
      operationId: PutInvoice
      x-sdk-operation-name: update
      description: Creates or updates (upserts) an invoice with a specified ID.
      requestBody:
        $ref: '#/components/requestBodies/Invoice'
      responses:
        '200':
          description: Invoice updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
        '201':
          description: Invoice created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Invoice'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $invoiceForm = new Rebilly\Entities\Invoice();
            $invoiceForm->setCustomerId('customerId');
            $invoiceForm->setWebsiteId('websiteId');
            $invoiceForm->setCurrency('USD');
            $invoiceForm->setBillingAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
            ]);

            try {
                $invoice = $client->invoices()->update('invoiceId', $invoiceForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // creating an invoice

            const data = {
                customerId: 'foobar-0001',
                websiteId: 'my-main-website',
                currency: 'USD',
                billingAddress: {
                    firstName: 'Johnny',
                    lastName: 'Brown',
                    emails: [{
                        label: 'main',
                        value: 'johnny+test@grr.la',
                        primary: true
                    }],
                },
                deliveryAddress: {
                    firstName: 'Johnny',
                    lastName: 'Brown',
                    emails: [{
                        label: 'main',
                        value: 'johnny+test@grr.la',
                        primary: true
                    }],
                },
                notes: `customer's first invoice`,
            };


            // the ID is optional

            const firstInvoice = await api.invoices.create({data});


            // or you can provide one

            const secondInvoice = await api.invoices.create({id: 'my-second-id',
            data});




            // updating an invoice

            const data = {
                customerId: 'foobar-0001',
                websiteId: 'my-main-website',
                currency: 'USD',
                billingAddress: {
                    firstName: 'Johnny',
                    lastName: 'Brown',
                    emails: [{
                        label: 'main',
                        value: 'johnny+test@grr.la',
                        primary: true
                    }],
                },
                deliveryAddress: {
                    firstName: 'Johnny',
                    lastName: 'Brown',
                    emails: [{
                        label: 'main',
                        value: 'johnny+test@grr.la',
                        primary: true
                    }],
                },
                notes: `customer's first invoice`,
            };


            const invoice = await api.invoices.update({id: 'my-second-id',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $invoice = \Rebilly\Sdk\Model\Invoice::from()
                ->setCustomerId('customerId')
                ->setWebsiteId('websiteId')
                ->setCurrency('USD')
                ->setBillingAddress([
                    'firstName' => 'John',
                    'lastName' => 'Doe',
                    'organization' => 'Test LTD',
                    'address' => 'Test street 5',
                    'address2' => 'Test house 5',
                    'city' => 'New York',
                    'region' => 'Long Island',
                    'country' => 'US',
                    'postalCode' => '123456',
                    'emails' => [
                        [
                            'label' => 'main',
                            'value' => 'johndoe@testemail.com',
                            'primary' => true,
                        ],
                        [
                            'label' => 'secondary',
                            'value' => 'otheremail@testemail.com',
                        ],
                    ],
                    'phoneNumbers' => [
                        [
                            'label' => 'work',
                            'value' => '+123456789',
                            'primary' => true,
                        ],
                        [
                            'label' => 'home',
                            'value' => '+9874654321',
                        ],
                    ],
                ]);

            try {
                $invoice = $service->invoices()->update('invoiceId', $invoice);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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', [
                'filter' => 'quantity:5',
            ]);
        - lang: JavaScript
          source: >-
            // get the top 20 invoice items for this ID

            const invoiceItems = await api.invoices.getAllInvoiceItems({id:
            'my-invoice-id', limit: 20});

            invoiceItems.items.forEach(item =>
            console.log(item.fields.description));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $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();
            $invoiceItemForm->setType($invoiceItemForm::TYPE_DEBIT);
            $invoiceItemForm->setUnitPrice(0.99);
            $invoiceItemForm->setQuantity(5);

            try {
                $invoiceItem = $client->invoiceItems()->create($invoiceItemForm, 'invoiceId');
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the properties for the new invoice item

            const data = {
                type: 'debit', 
                unitPrice: 5
            };


            const invoiceItem = await api.invoices.createInvoiceItem({id:
            'my-second-id', data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $invoiceItem = new \Rebilly\Sdk\Model\InvoiceItem();

            $invoiceItemForm->setType(\Rebilly\Sdk\Model\InvoiceItem::TYPE_DEBIT);

            $invoiceItemForm->setUnitPrice(0.99);

            $invoiceItemForm->setQuantity(5);


            try {
                $invoiceItem = $service->invoices()->createInvoiceItem('invoiceId', $invoiceItem);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: >
            const invoiceItem = await api.invoices.getInvoiceItem({id:
            'foobar-001'});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $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();
            $invoiceItemForm->setType($invoiceItemForm::TYPE_DEBIT);
            $invoiceItemForm->setUnitPrice(0.99);
            $invoiceItemForm->setQuantity(5);

            try {
                $invoiceItem = $client->invoiceItems()->update($invoiceItemForm, 'invoiceId', 'invoiceItemId');
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // first set the properties for the new invoice item

            const data = {
                type: 'debit',
                unitPrice: 5
            };


            const invoiceItem = await api.invoices.updateInvoiceItem({id: 'id',
            itemId: 'itemId', data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $invoiceItem = \Rebilly\Sdk\Model\InvoiceItem::from([
                'type' => \Rebilly\Sdk\Model\InvoiceItem::TYPE_DEBIT,
                'unitPrice' => 0.99,
                'quantity' => 5,
            ]);

            try {
                $invoiceItem = $service->invoices()->updateInvoiceItem('invoiceId', 'invoiceItemId', $invoiceItem);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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');
        - lang: JavaScript
          source: >
            const invoiceItem = await api.invoices.deleteInvoiceItem({id: 'id',
            itemId: 'itemId'});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $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.
        The 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');
        - lang: JavaScript
          source: >-
            // define the issued time

            const data = {
                issuedTime: "2017-09-19T20:46:51Z"
            };


            // issue the invoice without an issued time

            const firstInvoice = await api.invoices.issue({id: 'my-first-id'});


            // or include it

            const secondInvoice = await api.invoices.issue({id: 'my-second-id',
            data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $invoice = $service->invoices()->issue('invoiceId', new
            \Rebilly\Sdk\Model\InvoiceIssue([
                'issuedTime' => '2025-01-01 05:00:00',
            ]));
  /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');
        - lang: JavaScript
          source: >-
            const abandonedInvoice = await api.invoices.abandon({id:
            'my-invoice-id'});

            console.log(abandonedInvoice.fields.status);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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');
        - lang: JavaScript
          source: >-
            const voidedInvoice = await api.invoices.void({id:
            'my-invoice-id'});

            console.log(voidedInvoice.fields.status);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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.


        One use case for this operation to apply a revoked coupon,

        or 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);
            $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.
        The status of the invoice must be `unpaid` or `past-due`.
      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);

            $invoiceReissue = new \Rebilly\Sdk\Model\InvoiceReissue([
                'dueTime' => '2025-01-01 05:00:00',
            ]);

            try {
                $invoiceReissue = $service->invoices()->reissue('invoiceId', $invoiceReissue);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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);

            $transactionAllocations =
            $service->invoices()->getAllTransactionAllocations('invoiceId');
  /invoices/{id}/transaction:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Core
      tags:
        - Invoices
      summary: Apply a transaction to an invoice
      operationId: PostInvoiceTransaction
      x-sdk-operation-name: applyTransaction
      description: >-
        Applies a transaction to an invoice.

        The 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 = {
                id: 'my-invoice-id', 
                transactionId: 'my-transaction-id',
                amount: 12,99 
            };

            const invoice = await api.invoices.applyTransaction(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $invoiceTransaction = new \Rebilly\Sdk\Model\InvoiceTransaction([
                'transactionId' => 'transactionId',
                'amount' => 149.99,
            ]);

            try {
                $invoiceTransaction = $service->invoices()->applyTransaction('invoiceId', $invoiceTransaction);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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`

            const firstCollection = await api.invoices
                .getAllTimelineMessages({id: 'my-invoice'});

            // alternatively you can specify one or more of them

            const params = {id: 'my-invoice', limit: 20, offset: 100};

            const secondCollection = await
            api.invoices.getAllTimelineMessages(params);


            // access the collection items, each item is an InvoiceTimeline

            secondCollection.items
                .forEach(message => console.log(message.fields.eventType));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $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

            const firstComment = await api
                .invoices.createTimelineComment({id: 'my-invoice-id', data: {message: 'Your comment here'}});

            // Using params object, mentions and references

            const message = `Example of mentions @user@mydomain.com and
            references #invoice-subscription-id`;

            const params = {
                id: 'my-invoice-id',
                data: {
                    message,
                },
            };

            const secondComment = await
            api.invoices.createTimelineComment(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $timelineMessage = new \Rebilly\Sdk\Model\InvoiceTimeline([
                'message' => 'Automatic message',
            ]);

            try {
                $timelineMessage = $service->invoices()->createTimelineComment('invoiceId', $timelineMessage);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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
                .getTimelineMessage({id: 'foobar-001', messageId: 'message-202'});
            console.log(message.fields.eventType);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $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
                .deleteTimelineMessage({id: 'foobar-001', messageId: 'message-202'});

            // the request does not return any fields but
            // you can confirm the success using the status code
            console.log(request.response.status); // 204
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $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'
      responses:
        '200':
          description: List of credit memos retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CreditMemo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Core
      tags:
        - Credit memos
      summary: Create a credit memo
      operationId: PostCreditMemo
      x-sdk-operation-name: create
      description: Creates a credit memo.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreditMemo'
      responses:
        '201':
          description: Credit memo created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditMemo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /credit-memos/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      tags:
        - Credit memos
      summary: Retrieve a credit memo
      operationId: GetCreditMemo
      x-sdk-operation-name: get
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Retrieves a credit memo with a specified ID.
      responses:
        '200':
          description: Credit memo retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditMemo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-products:
        - Core
      tags:
        - Credit memos
      summary: Upsert a credit memo
      operationId: PutCreditMemo
      x-sdk-operation-name: update
      description: Creates or updates (upserts) a credit memo with a specified ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreditMemo'
      responses:
        '200':
          description: Credit memo updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditMemo'
        '201':
          description: Credit memo created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditMemo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    patch:
      x-products:
        - Core
      tags:
        - Credit memos
      summary: Partially update a credit memo
      operationId: PatchCreditMemo
      x-sdk-operation-name: patch
      description: Partially updates a credit memo with a specified ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PatchCreditMemo'
      responses:
        '200':
          description: Credit memo updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditMemo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /credit-memos/{id}/void:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Core
      tags:
        - Credit memos
      summary: Void a credit memo
      operationId: PostCreditMemoVoid
      x-sdk-operation-name: void
      description: Voids a credit memo with a specified ID.
      responses:
        '201':
          description: Credit memo voided.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditMemo'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /credit-memos/{id}/timeline:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      tags:
        - Credit memos timeline
      summary: Retrieve credit memo timeline messages
      operationId: GetCreditMemoTimelineCollection
      x-sdk-operation-name: getAllTimelineMessages
      description: Retrieves a list of credit memo timeline messages.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of credit memo timeline messages retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CreditMemoTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Core
      tags:
        - Credit memos timeline
      summary: Create a credit memo timeline message
      operationId: PostCreditMemoTimeline
      x-sdk-operation-name: createTimelineComment
      description: Creates a credit memo timeline message.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreditMemoTimeline'
        description: Credit memo timeline resource.
        required: true
      responses:
        '201':
          description: Credit memo timeline message created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditMemoTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /credit-memos/{id}/timeline/{messageId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: messageId
        in: path
        description: ID of the credit memo timeline message.
        required: true
        schema:
          type: string
    get:
      x-products:
        - Core
      tags:
        - Credit memos timeline
      summary: Retrieve a credit memo timeline message
      operationId: GetCreditMemoTimeline
      x-sdk-operation-name: getTimelineMessage
      description: Retrieves a credit memo timeline message with a specified ID.
      responses:
        '200':
          description: Credit memo timeline message retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreditMemoTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      x-products:
        - Core
      tags:
        - Credit memos timeline
      summary: Delete a credit memo timeline message
      operationId: DeleteCreditMemoTimeline
      x-sdk-operation-name: deleteTimelineMessage
      description: Deletes a credit memo timeline message with a specified ID.
      responses:
        '204':
          description: Credit memo timeline message deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /journal-accounts:
    get:
      x-products:
        - Core
      tags:
        - Journal
      summary: Retrieve journal accounts
      operationId: GetJournalAccountCollection
      x-sdk-operation-name: getAllAccounts
      description: Retrieves a list of journal accounts.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of journal accounts retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/JournalAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Core
      tags:
        - Journal
      summary: Create a journal account
      operationId: PostJournalAccount
      x-sdk-operation-name: createAccount
      description: Creates a journal account.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JournalAccount'
        description: Journal account resource.
        required: true
      responses:
        '201':
          description: Journal account created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JournalAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /journal-accounts/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      tags:
        - Journal
      summary: Retrieve journal account
      operationId: GetJournalAccount
      x-sdk-operation-name: getAccount
      description: Retrieves a journal account with a specified ID.
      responses:
        '200':
          description: Journal account retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JournalAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-products:
        - Core
      tags:
        - Journal
      summary: Upsert a journal account
      operationId: PutJournalAccount
      x-sdk-operation-name: updateAccount
      description: Creates or updates (upsert) a journal account.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JournalAccount'
        description: Journal account resource.
        required: true
      responses:
        '200':
          description: Journal account updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JournalAccount'
        '201':
          description: Journal account created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JournalAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /journal-entries:
    get:
      x-products:
        - Core
      tags:
        - Journal
      summary: Retrieve journal entries
      operationId: GetJournalEntryCollection
      x-sdk-operation-name: getAllEntries
      description: Retrieves a list of journal entries.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of journal entries retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/JournalEntry'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Core
      tags:
        - Journal
      summary: Create a journal entry
      operationId: PostJournalEntry
      x-sdk-operation-name: createEntry
      description: Creates a journal entry.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JournalEntry'
        description: Journal entry resource.
        required: true
      responses:
        '201':
          description: Journal entry created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JournalEntry'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /journal-entries/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      tags:
        - Journal
      summary: Retrieve journal entry
      operationId: GetJournalEntry
      x-sdk-operation-name: getEntry
      description: Retrieves a journal entry with a specified ID.
      responses:
        '200':
          description: Journal entry retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JournalEntry'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-products:
        - Core
      tags:
        - Journal
      summary: Upsert a journal entry
      operationId: PutJournalEntry
      x-sdk-operation-name: updateEntry
      description: Creates or updates (upsert) a journal entry.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JournalEntry'
        description: Journal entry resource.
        required: true
      responses:
        '200':
          description: Journal entry updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JournalEntry'
        '201':
          description: Journal entry created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JournalEntry'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /journal-entries/{id}/records:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      tags:
        - Journal
      summary: Retrieve journal records
      operationId: GetJournalRecordCollection
      x-sdk-operation-name: getAllRecords
      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: createRecord
      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-entries/{id}/records/{journalRecordId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/journalRecordId'
    get:
      x-products:
        - Core
      tags:
        - Journal
      summary: Retrieve journal record
      operationId: GetJournalRecord
      x-sdk-operation-name: getRecord
      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: updateRecord
      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: deleteRecord
      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.


        The customer is redirected to the `kycGatherer` link.

        After the customer completes the KYC process,

        they are redirected back to the `redirectUrl` link.


        Corresponding webhooks, such as: KYC document accepted and KYC document
        rejected,

        are sent to the subscribers.


        When the complete list of documents is received and accepted,

        the KYC request fulfilled webhook is sent to subscribers.


        If a `credit-file-proof` request is successful,

        it returns a `decision` value of `single-source` or `dual-source`.

        The 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`,

                  pass the customer's first name to the `accept` field.

                  If 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

            const firstCollection = await api.kycDocuments.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.kycDocuments.getAll(params);


            // access the collection items, each item is a KycDocument

            secondCollection.items.forEach(document =>
            console.log(document.fields.documentType));
    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
            const data = {
                fieldId: '4f6cf35x-2c4y-483z-a0a9-158621f77a21',
                customerId: '4f6cf35x-2c4y-483z-a0a9-158621f77a21',
                documentType: 'identity-proof'
            };

            const 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'});
            console.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

            const data = {
                status: 'accepted'
            };


            const 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`.
        The review time and reviewer information is also updated.

        > **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'});

            console.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.

        > **Note:** Use this operation for manual overrides.
      requestBody:
        content:
          application/json:
            schema:
              anyOf:
                - $ref: '#/components/schemas/KycIdentityMatches'
                - $ref: '#/components/schemas/KycAddressMatches'
        description: Kyc document resource.
        required: true
      responses:
        '204':
          description: Document matches updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /kyc-documents/{id}/rejection:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Core
      tags:
        - KYC documents
      summary: Reject a KYC document
      operationId: PostKycDocumentRejection
      x-sdk-operation-name: reject
      description: |-
        Rejects a KYC document and changes the `status` to `rejected`.
        The review time and reviewer information is also updated.

        > **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 = {
                type: 'document-expired',
                message: 'Document is expired'
            }

            const rejectedDocument = await api.kycDocuments.reject({id:
            'my-second-id', data});

            console.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'});

            console.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.


        This operation also sets the KYC document `reviewStartTime` to the
        current date-time,

        and 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.


        This operation also sets the KYC document `reviewStartTime` and the
        reviewer information to null.

        Use this operation when the reviewer must stop the review.

        For 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

            const firstCollection = await
            api.customerAuthentication.getAllResetPasswordTokens();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100};

            const secondCollection = await
            api.customerAuthentication.getAllResetPasswordTokens(params);


            // access the collection items, each item is a ResetPasswordToken

            secondCollection.items.forEach(token =>
            console.log(token.fields.token));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $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

            const data = {
                username: 'foobar',
                password: 'fuubar',
                // the `credential` expects 
                // the customer credential's ID
                credential: 'foobar-0001'

                // optionally you can define an `expiredTime` to 
                // limit the duration of the reset token

                //expiredTime: '2017-09-18T19:17:39Z'
            };


            const resetToken = await
            api.customerAuthentication.createResetPasswordToken({data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $resetPasswordTokenForm = new
            \Rebilly\Sdk\Model\ResetPasswordToken();

            $resetPasswordTokenForm->setUsername('username');


            try {
                $tokens = $coreService->customerAuthentication()->createResetPasswordToken($resetPasswordTokenForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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'});

            console.log(token.fields.credential);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $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'});


            // the request does not return any fields but

            // you can confirm the success using the status code

            console.log(request.response.status); // 204
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $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([
                'filter' => 'status:active;method:payment-card',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.paymentInstruments.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await
            api.paymentInstruments.getAll(params);


            // access the collection items, each item is a PaymentInstrument

            secondCollection.items.forEach(paymentInstrument =>
            console.log(paymentInstrument.fields.customerId));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $paymentInstrumentsPaginator =
            $service->paymentInstruments()->getAllPaginator(
                filter: 'status:active;method:payment-card',
                limit: 5
            );

            foreach ($paymentInstrumentsPaginator as $paymentInstrumentsPage) {
                printf("Payment instruments page %d/%d\n", $paymentInstrumentsPaginator->key() + 1, $paymentInstrumentsPaginator->count());
                foreach ($paymentInstrumentsPage as $paymentInstrument) {
                    printf("Payment instrument #%s\n", $paymentInstrument->getId());
                }
            }


            // OR


            $paymentInstruments = $service->paymentInstruments()->getAll(filter:
            'status:active;method:payment-card');

            foreach ($paymentInstruments as $paymentInstrument) {
                printf("Payment instrument #%s\n", $paymentInstrument->getId());
            }
    post:
      x-products:
        - Core
      tags:
        - Payment instruments
      summary: Create a payment instrument
      operationId: PostPaymentInstrument
      x-sdk-operation-name: create
      description: >-
        Creates a payment instrument.

        If 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();

            $paymentInstrumentForm->setCustomerId('customerId');

            $paymentInstrumentForm->setPan('4111111111111111');

            $paymentInstrumentForm->setExpYear(2025);

            $paymentInstrumentForm->setExpMonth(8);

            $paymentInstrumentForm->setBillingAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
            ]);


            try {
                $paymentInstrument = $client->paymentInstruments()->create($paymentInstrumentForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }


            // Alternatively you can specify a payment token

            $paymentInstrumentForm = new
            Rebilly\Entities\CommonPaymentInstrument();

            $paymentInstrumentForm->setCustomerId('customerId');

            $paymentInstrumentForm->setToken('payment-token');


            try {
                $paymentInstrument = $client->paymentInstruments()->create($paymentInstrumentForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // first set the properties for the new payment card instrument

            const data = {
                method: 'payment-card',
                pan: '4111111111111111',
                expYear: 2025,
                expMonth: 11,
                cvv: '123',
                billingAddress: {
                  firstName: 'Johnny',
                  lastName: 'Brown',
                  emails: [{
                      label: 'main',
                      value: 'johnny+test@grr.la',
                      primary: true
                  }]
                },
                // the customer ID for which
                // we are adding a payment card instrument
                customerId: 'foobar-0001'
            };


            const firstPaymentInstrument = await
            api.paymentInstruments.create({data});


            // alternatively you can specify a payment token

            const tokenData = {
                token: 'payment-token',
                // the customer ID for which
                // we are adding a payment card instrument
                customerId: 'foobar-0001'
            };


            const secondPaymentInstrument = await
            api.paymentInstruments.create({tokenData});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $paymentInstrumentForm = new
            \Rebilly\Sdk\Model\PaymentCardCreatePlain();

            $paymentInstrumentForm->setCustomerId('customerId');

            $paymentInstrumentForm->setPan('4111111111111111');

            $paymentInstrumentForm->setExpYear(2025);

            $paymentInstrumentForm->setExpMonth(8);

            $paymentInstrumentForm->setBillingAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
            ]);


            try {
                $paymentInstrument = $service->paymentInstruments()->create($paymentInstrumentForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }


            // Alternatively you can specify a payment token

            $paymentInstrumentForm = new
            \Rebilly\Sdk\Model\PaymentInstrumentCreateToken();

            $paymentInstrumentForm->setCustomerId('customerId');

            $paymentInstrumentForm->setToken('payment-token');


            try {
                $paymentInstrument = $service->paymentInstruments()->create($paymentInstrumentForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: >
            const paymentInstrument = await api.paymentInstruments.get({id:
            'payment-instrument-id'});


            console.log(paymentInstrument.fields.customerId);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $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();

            $paymentInstrumentForm->setCvv('123');

            $paymentInstrumentForm->setExpYear(2025);

            $paymentInstrumentForm->setExpMonth(12);

            $paymentInstrumentForm->setBillingAddress([
                'firstName' => 'John',
            ]);


            try {
                $paymentInstrument = $client->paymentInstruments()->update('paymentInstrumentId', $paymentInstrumentForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }


            // Alternatively you can specify a partial token

            $paymentInstrumentForm = new
            Rebilly\Entities\CommonPaymentInstrument();

            $paymentInstrumentForm->setToken('partial-token');

            $paymentInstrumentForm->setBillingAddress([
                'firstName' => 'John',
            ]);


            try {
                $paymentInstrument = $client->paymentInstruments()->update('paymentInstrumentId', $paymentInstrumentForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: |
            // payment instrument properties to be updated
            const data = {
                cvv: '123',
                expMonth: 12,
                expYear: 2025,
                billingAddress: {
                    firstName: 'John'
                }
            };

            api.paymentInstruments.patch({id: 'id-to-update', data});

            // alternatively you can specify a partial token
            const tokenData = {
                token: 'partial-token',
                billingAddress: {
                    firstName: 'John'
                },
                customFields: {
                    foo: 'bar'
                }
            };

            api.paymentInstruments.patch({id: 'id-to-update', tokenData});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $paymentInstrumentForm = new
            \Rebilly\Sdk\Model\PaymentCardUpdatePlain();

            $paymentInstrumentForm->setCvv('123');

            $paymentInstrumentForm->setExpYear(2025);

            $paymentInstrumentForm->setExpMonth(12);

            $paymentInstrumentForm->setBillingAddress([
                'firstName' => 'John',
            ]);


            try {
                $paymentInstrument = $service->paymentInstruments()->update('paymentInstrumentId', $paymentInstrumentForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }


            // Alternatively you can specify a partial token

            $paymentInstrumentForm = new
            \Rebilly\Sdk\Model\PaymentInstrumentUpdateToken();

            $paymentInstrumentForm->setToken('partial-token');

            $paymentInstrumentForm->setBillingAddress([
                'firstName' => 'John',
            ]);


            try {
                $paymentInstrument = $service->paymentInstruments()->update('paymentInstrumentId', $paymentInstrumentForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: >
            const paymentInstrument = await
            api.paymentInstruments.deactivate({id: 'id-to-deactivate'});


            console.log(paymentInstrument.fields.status);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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.

        Use this operation to confirm the name that is associated with a payment
        instrument.

        This 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([
                'filter' => 'name:TestPlan',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.plans.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.plans.getAll(params);


            // access the collection items, each item is a Plan

            secondCollection.items.forEach(plan =>
            console.log(plan.fields.name));
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $plansPaginator = $service->plans()->getAllPaginator(limit: 5);

            foreach ($plansPaginator as $planPage) {
                printf("Plans page %d/%d\n", $plansPaginator->key() + 1, $plansPaginator->count());
                foreach ($planPage as $plan) {
                    printf("Plan #%s: %s\n", $plan->getId(), $plan->getProductId());
                }
            }

            // OR

            $plans = $service->plans()->getAll(limit: 100);
            foreach ($plans as $plan) {
                printf("Plan #%s: %s\n", $plan->getId(), $plan->getProductId());
            }
    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();
            $planForm->setName('TestPlan');
            $planForm->setCurrency('USD');
            $planForm->setTrialAmount(1);
            $planForm->setTrialPeriodUnit('day');
            $planForm->setTrialPeriodLength(1);
            $planForm->setProductId('test-product');

            try {
                $plan = $client->plans()->create($planForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the properties for the new plan

            const data = {
                name: 'My strongest plan',
                currency: 'USD',
                setupAmount: 12.99,
                // you could also include a trial if needed
                recurringPeriodUnit: 'month',
                recurringPeriodLength: 1,
                recurringAmount: 25.99
            };


            // the ID is optional

            const firstPlan = await api.plans.create({data});


            // or you can provide one

            const secondPlan = await api.plans.create({id: 'my-second-key',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $plan = \Rebilly\Sdk\Model\SubscriptionPlan::from([])
                ->setProductId('productId')
                ->setName('Test plan')
                ->setCurrency('USD')
                ->setPricing(new \Rebilly\Sdk\Model\PlanFormulaFlatRate(['price' => 9.99]))
                ->setRecurringInterval(
                    \Rebilly\Sdk\Model\SubscriptionPlanRecurringInterval::from()
                        ->setUnit(\Rebilly\Sdk\Model\SubscriptionPlanRecurringInterval::UNIT_MONTH)
                        ->setLength(1),
                );

            try {
                $plan = $service->plans()->create($plan);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: |-
            const plan = await api.plans.get({id: 'foobar-001'});
            console.log(plan.fields.name);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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();
            $planForm->setName('TestPlan');
            $planForm->setCurrency('USD');
            $planForm->setTrialAmount(1);
            $planForm->setTrialPeriodUnit('day');
            $planForm->setTrialPeriodLength(1);

            try {
                $plan = $client->plans()->update('planId', $planForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the properties for the new plan

            const data = {
                name: 'My strongest plan',
                currency: 'USD',
                setupAmount: 12.99,
                // you could also include a trial if needed
                recurringPeriodUnit: 'month',
                recurringPeriodLength: 1,
                recurringAmount: 25.99
            };


            // the ID is optional

            const firstPlan = await api.plans.create({data});


            // or you can provide one

            const secondPlan = await api.plans.create({id: 'my-second-key',
            data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $plan = new \Rebilly\Sdk\Model\SubscriptionPlan([
                'recurringInterval' => [
                    'unit' => \Rebilly\Sdk\Model\SubscriptionPlanRecurringInterval::UNIT_WEEK,
                    'length' => 2,
                ],
            ]);


            try {
                $plan = $service->plans()->update('planId', $plan);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }


            // OR


            $plan = $service->plans()->get('planId');

            $plan->setRecurringInterval(new
            \Rebilly\Sdk\Model\SubscriptionPlanRecurringInterval([
                'unit' => \Rebilly\Sdk\Model\SubscriptionPlanRecurringInterval::UNIT_WEEK,
                'length' => 2,
            ]));


            try {
                $plan = $service->plans()->update('planId', $plan);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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');
        - lang: JavaScript
          source: |-
            const request = await api.plans.delete({id: 'my-second-key'});

            // the request does not return any fields but
            // you can confirm the success using the status code
            console.log(request.response.status); // 204
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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

            const firstCollection = await api.products.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.products.getAll(params);


            // access the collection items, each item is a Product

            secondCollection.items.forEach(product =>
            console.log(product.fields.name));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $productsPaginator = $service->products()->getAllPaginator(limit:
            5);

            foreach ($productsPaginator as $productPage) {
                printf("Products page %d/%d\n", $productsPaginator->key() + 1, $productsPaginator->count());
                foreach ($productPage as $product) {
                    printf("Product #%s: %s\n", $product->getId(), $product->getName());
                }
            }


            // OR


            $products = $service->products()->getAll(limit: 100);

            foreach ($products as $product) {
                printf("Product #%s: %s\n", $product->getId(), $product->getName());
            }
    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

            const data = {
                name: 'my first product',
                description: 'made to be of the highest quality',
                taxCategoryId: '',
                requiresShipping: true,
                accountingCode: '100',
                customFields: []
            };


            // the ID is optional

            const firstProduct = await api.products.create({data});


            // or you can provide one

            const secondProduct = await api.products.create({id:
            'my-second-key', data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $product = new \Rebilly\Sdk\Model\Product([
                'name' => 'my first product',
                'description' => 'made to be of the highest quality',
                'taxCategoryId' => '',
                'requiresShipping' => true,
                'accountingCode' => '100',
            ]);

            try {
                $product = $service->products()->create($product);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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'});
            console.log(product.fields.name);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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

            const data = {
                name: 'my first product',
                description: 'made to be of the highest quality',
                taxCategoryId: '',
                requiresShipping: true,
                accountingCode: '100',
                customFields: []
            };


            // the ID is optional

            const firstProduct = await api.products.create({data});


            // or you can provide one

            const secondProduct = await api.products.create({id:
            'my-second-key', data});




            // updating a product

            const data = {
                name: 'my first product',
                description: 'made to be of the highest quality',
                taxCategoryId: '20010',
                requiresShipping: false,
                accountingCode: '77',
                customFields: []
            };


            const product = await api.products.update({id: 'my-second-key',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $product = new \Rebilly\Sdk\Model\Product([
                'requiresShipping' => false,
                'accountingCode' => '101',
            ]);

            try {
                $product = $service->products()->update('productId', $product);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }

            // OR

            $product = $service->products()->get('productId');
            $product->setRequiresShipping(false)
                ->setAccountingCode('101');

            try {
                $product = $service->products()->update('productId', $product);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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'});

            // the request does not return any fields but
            // you can confirm the success using the status code
            console.log(request.response.status); // 204
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $service->products()->delete('productId');
  /quotes:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Core
      tags:
        - Quotes
      summary: Retrieve quotes
      operationId: GetQuoteCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of quotes.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: List of quotes retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Quote'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-badges:
        - name: Experimental
      x-products:
        - Core
      tags:
        - Quotes
      summary: Create a quote
      operationId: PostQuote
      x-sdk-operation-name: create
      description: Creates a quote.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Quote'
        required: true
      responses:
        '201':
          description: Quote created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Quote'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /quotes/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Core
      tags:
        - Quotes
      summary: Retrieve a quote
      operationId: GetQuote
      x-sdk-operation-name: get
      description: Retrieves a quote with a specified ID.
      parameters:
        - $ref: '#/components/parameters/mediaTypeJsonPdf'
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: Quote retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Quote'
            application/pdf:
              schema:
                $ref: '#/components/schemas/Quote'
        '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.


        The update operation can only be used for quotes with a `status` of
        `draft`.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Quote'
        required: true
      responses:
        '200':
          description: Quote updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Quote'
        '201':
          description: Quote created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Quote'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    patch:
      x-badges:
        - name: Experimental
      x-products:
        - Core
      tags:
        - Quotes
      summary: Partially update a quote
      operationId: PatchQuote
      x-sdk-operation-name: patch
      description: >-
        Partially updates a quote with a specified ID.


        The 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.
        Recalled 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.


        The order in which the payment methods are displayed to the customer
        should be the same as the order in the response.


        The 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.

        If no rules match for the specific request, all methods supported by the
        gateway accounts are sent.


        To invert this behavior, place an all matching rule at the end of the
        `ready-to-pay-requested` event in the rules engine,

        and include an empty `paymentMethods` property for the
        `adjust-ready-to-pay` action.


        For 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();
            $readyToPayForm->setCurrency('USD');
            $readyToPayForm->setAmount(10);
            $readyToPayForm->setWebsiteId('websiteId');
            $readyToPayForm->setCustomerId('customerId');

            $riskMetadata = new Rebilly\Entities\RiskMetadata();
            $riskMetadata->setFingerprint('fingerprint');
            $readyToPayForm->setRiskMetadata($riskMetadata);

            try {
                $transaction = $client->transactions()->create($readyToPayForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $readyToPayForm = new \Rebilly\Sdk\Model\ReadyToPayAmount();
            $readyToPayForm->setCurrency('USD');
            $readyToPayForm->setAmount(10);
            $readyToPayForm->setWebsiteId('websiteId');
            $readyToPayForm->setCustomerId('customerId');

            $riskMetadata = new \Rebilly\Sdk\Model\RiskMetadata();
            $riskMetadata->setFingerprint('fingerprint');
            $readyToPayForm->setRiskMetadata($riskMetadata);

            try {
                $transactions = $service->purchase()->readyToPay($readyToPayForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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. Searches 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

            const firstCollection = await api.shippingRates.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.shippingRates.getAll(params);


            // access the collection items, each item is a ShippingRate

            secondCollection.items.forEach(shippingRate =>
            console.log(shippingRate.fields.name));
    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

            const data = {
                name: 'free shipping',
                filter: '',
                price: 0,
                currency: 'USD'
            };


            // the ID is optional

            const firstRate = await api.shippingRates.create({data});


            // or you can provide one

            const secondRate = await api.shippingRates.create({id:
            'my-second-key', data});
  /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'});

            console.log(shippingRate.fields.name);
    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

            const data = {
                name: 'free shipping',
                filter: '',
                price: 0,
                currency: 'USD'
            };


            // the ID is optional

            const firstRate = await api.shippingRates.create({data});


            // or you can provide one

            const secondRate = await api.shippingRates.create({id:
            'my-second-key', data});



            // updating a shipping rate

            const data = {
              name: 'regular shipping',
              filter: '',
              price: 9.99,
              currency: 'USD'
            };


            const shippingRate = await api.shippingRates.update({id:
            'my-second-key', data});
    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'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: >
            const request = await api.shippingRates.delete({id:
            'my-second-key'});


            // the request does not return any fields but

            // you can confirm the success using the status code

            console.log(request.response.status); // 204
  /subscriptions:
    get:
      x-products:
        - Core
      tags:
        - Orders
      summary: Retrieve orders
      operationId: GetSubscriptionCollection
      x-sdk-operation-name: getAll
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Retrieves a list of orders.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/subscriptionExpand'
      responses:
        '200':
          description: List of subscriptions retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SubscriptionOrOneTimeSale'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $subscriptions = $client->subscriptions()->search([
                'filter' => 'customerId:testCustomerId',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.subscriptions.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.subscriptions.getAll(params);


            // access the collection items, each item is a Subscription

            secondCollection.items.forEach(subscription =>
            console.log(subscription.fields.customerId));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $ordersPaginator =
            $service->subscriptions()->getAllPaginator(filter:
            'customerId:testCustomerId');

            foreach ($ordersPaginator as $orderPage) {
                printf("Orders page %d/%d\n", $ordersPaginator->key() + 1, $ordersPaginator->count());
                foreach ($orderPage as $order) {
                    printf("Order #%s (%s): %s\n", $order->getId(), $order->getOrderType(), $order->getStatus());
                }
            }


            // OR


            $orders = $service->subscriptions()->getAll(filter:
            'customerId:testCustomerId', limit: 10);

            foreach ($orders as $order) {
                printf("Order #%s (%s): %s\n", $order->getId(), $order->getOrderType(), $order->getStatus());
            }
    post:
      x-products:
        - Core
      tags:
        - Orders
      summary: Create an order
      operationId: PostSubscription
      x-sdk-operation-name: create
      description: >-
        Creates an order.


        To 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();
            $subscriptionForm->setCustomerId('customerId');
            $subscriptionForm->setWebsiteId('websiteId');
            $subscriptionForm->setItems([
                [
                    'planId' => 'my-plan',
                    'quantity' => 1,
                ],
            ]);
            $subscriptionForm->setBillingAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
            ]);

            try {
                $subscription = $client->subscriptions()->create($subscriptionForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the properties for the new subscription

            const data = {
                customerId: 'foobar-0001',
                websiteId: 'my-main-website',
                items: [
                    { plan: { id: 'my-plan-id' }, quantity: 1 },
                ],
                // you can append this subscription to
                // an existing invoice by passing its ID
                initialInvoiceId: 'my-existing-invoice-id',
                billingAddress: {
                    firstName: 'Johnny',
                    lastName: 'Brown',
                    emails: [{
                        label: 'main',
                        value: 'johnny+test@grr.la',
                        primary: true
                    }],
                },
                deliveryAddress: {
                    firstName: 'Johnny',
                    lastName: 'Brown',
                    emails: [{
                        label: 'main',
                        value: 'johnny+test@grr.la',
                        primary: true
                    }],
                },
                customFields: {}
            };


            // the ID is optional

            const firstInvoice = await api.subscriptions.create({data});


            // or you can provide one

            const secondInvoice = await api.subscriptions.create({id:
            'my-second-id', data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $order = \Rebilly\Sdk\Model\Subscription::from()
                ->setWebsiteId('websiteId')
                ->setCustomerId('customerId')
                ->setItems([
                    \Rebilly\Sdk\Model\SubscriptionOrOneTimeSaleItem::from()
                        ->setPlan(
                            \Rebilly\Sdk\Model\OriginalPlan::from()
                                ->setId('planId')
                        )
                        ->setQuantity(1),
                ]);

            try {
                $order = $service->subscriptions()->create($order);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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');
        - lang: JavaScript
          source: >-
            const subscription = await api.subscriptions.get({id:
            'foobar-001'});

            console.log(subscription.fields.billingAddress.firstName);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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();
            $subscriptionForm->setCustomerId('customerId');
            $subscriptionForm->setWebsiteId('websiteId');
            $subscriptionForm->setItems($subscriptionForm->createItems([
                [
                    'planId' => 'my-plan',
                    'quantity' => 1,
                ],
            ]));
            $subscriptionForm->setBillingAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
            ]);

            try {
                $subscription = $client->subscriptions()->update('subscriptionId', $subscriptionForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // creating a subscription

            const data = {
                customerId: 'foobar-0001',
                websiteId: 'my-main-website',
                items: [
                    { plan: { id: 'my-plan-id' }, quantity: 1 },
                ],
                // you can append this subscription to
                // an existing invoice by passing its ID
                initialInvoiceId: 'my-existing-invoice-id',
                billingAddress: {
                    firstName: 'Johnny',
                    lastName: 'Brown',
                    emails: [{
                        label: 'main',
                        value: 'johnny+test@grr.la',
                        primary: true
                    }],
                },
                deliveryAddress: {
                    firstName: 'Johnny',
                    lastName: 'Brown',
                    emails: [{
                        label: 'main',
                        value: 'johnny+test@grr.la',
                        primary: true
                    }],
                },
                customFields: {}
            };


            // the ID is optional

            const firstInvoice = await api.subscriptions.create({data});


            // or you can provide one

            const secondInvoice = await api.subscriptions.create({id:
            'my-second-id', data});




            // updating a subscription

            const data = {
                // determines if a payment attempt will be automatic
                autopay: false,
                // set the next renewal time
                renewalTime: '2018-09-26T15:34:29Z'
            };


            const subscription = await api.subscriptions.update({id:
            'my-second-id', data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $order = new \Rebilly\Sdk\Model\Subscription([
                'shipping' => new \Rebilly\Sdk\Model\ManualShipping([
                    'amount' => 14.99,
                ]),
            ]);


            try {
                $order = $service->subscriptions()->update('orderId', $order);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }


            // OR


            $order = $service->subscriptions()->get('orderId');

            $order->setShipping(new \Rebilly\Sdk\Model\ManualShipping(['amount'
            => 14.99]));


            try {
                $order = $service->subscriptions()->update('orderId', $order);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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);
            $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');
        - lang: JavaScript
          source: >
            const voidedSubscription = await api.subscriptions.void({id:
            'my-subscription-id'});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $order = $service->subscriptions()->void('orderId');
  /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'
  /subscriptions/{id}/items/{itemId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: itemId
        in: path
        description: ID of subscription item.
        required: true
        schema:
          type: string
    patch:
      x-badges:
        - name: Experimental
      x-products:
        - Core
      tags:
        - Orders
      summary: Update a subscription order item
      operationId: PatchSubscriptionItem
      x-sdk-operation-name: updateItem
      description: >-
        Updates a subscription order item. This is an experimental endpoint, can
        be changed or removed in the future.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SubscriptionItemUpdate'
        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 = {
              quantityFilled: 4,
            };

            const subscription = await api.subscription.updateItem({
              id: "subscription-id",
              itemId: "item-id",
              data,
            });
  /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.
        Use this operation for plan changes and pro rata adjustments.

        This process:

          - Creates an invoice.
          - Adds the subscription line items to the invoice.
          - Issues the invoice.
          - 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.
        If the specified pause is `pending`, it is `revoked`.
        If the specified pause is `ongoing`, it is `finished`.
      responses:
        '204':
          description: Subscription order pause revoked or finished.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /subscription-cancellations:
    get:
      x-products:
        - Core
      tags:
        - Orders
      summary: Retrieve subscription order cancellations
      operationId: GetSubscriptionCancellationCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of subscription order cancellations.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of cancelled subscription orders retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SubscriptionCancellation'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $cancellationsPaginator =
            $service->subscriptionCancellations()->getAllPaginator(
                filter: 'reason:' . \Rebilly\Sdk\Model\SubscriptionCancellation::REASON_CONTRACT_EXPIRED,
            );

            foreach ($cancellationsPaginator as $cancellationPage) {
                printf("Cancellations page %d/%d\n", $cancellationsPaginator->key() + 1, $cancellationsPaginator->count());
                foreach ($cancellationPage as $cancellation) {
                    printf(
                        "Cancellation #%s (%s): %s\n",
                        $cancellation->getId(),
                        $cancellation->getStatus(),
                        $cancellation->getSubscriptionId(),
                    );
                }
            }


            // OR


            $cancellations = $service->subscriptionCancellations()->getAll(
                filter: 'reason:' . \Rebilly\Sdk\Model\SubscriptionCancellation::REASON_CONTRACT_EXPIRED,
                limit: 10,
            );

            foreach ($cancellations as $cancellation) {
                printf(
                    "Cancellation #%s (%s): %s\n",
                    $cancellation->getId(),
                    $cancellation->getStatus(),
                    $cancellation->getSubscriptionId(),
                );
            }
    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();

            $subscriptionCancellationForm->setSubscriptionId('subscription-1');

            $subscriptionCancellationForm->setChurnTime(date('c'));


            try {
                $subscription = $client->subscriptionCancellations()->create($subscriptionCancellationForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            const data = {
                subscriptionId: 'sub_01HRF27SATGE4Z6PBJE6PD8328',
                churnTime: '2020-06-10T13:55:51Z',
            }


            // the ID is optional

            const firstSubscriptionCancellation = await
            api.subscriptionCancellations.create({data});


            // or you can provide one

            const secondSubscriptionCancellation = await
            api.subscriptionCancellations.create({id: 'custom-cancellation-id',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $cancellation = new \Rebilly\Sdk\Model\SubscriptionCancellation([
                'subscriptionId' => 'subscriptionId',
                'churnTime' => new \DateTimeImmutable(),
                'canceledBy' => \Rebilly\Sdk\Model\SubscriptionCancellation::CANCELED_BY_MERCHANT,
                'reason' => \Rebilly\Sdk\Model\SubscriptionCancellation::REASON_CONTRACT_EXPIRED,
            ]);

            try {
                $cancellation = $service->subscriptionCancellations()->create($cancellation);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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);

            $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 = {
                subscriptionId: 'sub_01HRF27SATGE4Z6PBJE6PD8328',
                churnTime: '2020-06-10T13:55:51Z',
            }


            // the ID is optional

            const firstSubscriptionCancellation = await
            api.subscriptionCancellations.create({data});


            // or you can provide one

            const secondSubscriptionCancellation = await
            api.subscriptionCancellations.create({id: 'custom-cancellation-id',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $cancellation = new \Rebilly\Sdk\Model\SubscriptionCancellation([
                'subscriptionId' => 'subscriptionId',
                'churnTime' => new \DateTimeImmutable(),
                'canceledBy' => \Rebilly\Sdk\Model\SubscriptionCancellation::CANCELED_BY_MERCHANT,
                'reason' => \Rebilly\Sdk\Model\SubscriptionCancellation::REASON_CONTRACT_EXPIRED,
            ]);

            try {
                $cancellation = $service->subscriptionCancellations()->update('cancellationId', $cancellation);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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.
        Use 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);


            $cancellation = new
            \Rebilly\Sdk\Model\PatchSubscriptionCancellationRequest([
                'reason' => \Rebilly\Sdk\Model\PatchSubscriptionCancellationRequest::REASON_CONTRACT_EXPIRED,
            ]);


            try {
                $cancellation = $service->subscriptionCancellations()->patch('cancellationId', $cancellation);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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.


        > **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);
            $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

            const firstCollection = await
            api.subscriptionReactivations.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await
            api.subscriptionReactivations.getAll(params);


            // access the collection items, each item is a
            SubscriptionReactivation

            secondCollection.items.forEach(subscription =>
            console.log(subscription.fields.customerId));
    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.

            If 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 = {
                subscriptionId: 'sub_01HRF27SATGE4Z6PBJE6PD8328',
                description: 'reactivation-reason',
                effectiveTime: '2020-06-10T13:55:51Z',
                renewalTime: '2020-07-10T13:55:51Z'
            };


            const reactivatedSubscription = await
            api.subscriptionReactivations.reactivate({data});
  /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'});

            console.log(subscription.fields.description);
  /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.


        This endpoint is deprecated.

        Use [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.


        An upcoming invoice is an invoice that has not been issued.

        It functions as a preview of the next invoice for the order.

        For 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'
  /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.


        This endpoint is deprecated.

        Use [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`

            const firstCollection = await api.subscriptions
                .getAllTimelineMessages({id: 'my-transaction'});

            // alternatively you can specify one or more of them

            const params = {id: 'my-transaction', limit: 20, offset: 100};

            const secondCollection = await
            api.subscriptions.getAllTimelineMessages(params);


            // access the collection items, each item is a SubscriptionTimeline

            secondCollection.items
                .forEach(message => console.log(message.fields.eventType));
    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

            const firstComment = await api
                .subscriptions.createTimelineComment({id: 'my-subscription-id', data: {message: 'Your comment here'}});

            // Using params object, mentions and references

            const message = `Example of mentions @user@mydomain.com and
            references #subscriptions-subscription-id`;

            const params = {
                id: 'my-subscription-id',
                data: {
                    message,
                },
            };

            const secondComment = await
            api.subscriptions.createTimelineComment(params);
  /subscriptions/{id}/timeline/{messageId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: messageId
        in: path
        description: ID of the order timeline message.
        required: true
        schema:
          type: string
    get:
      x-products:
        - Core
      tags:
        - Orders timeline
      summary: Retrieve an order timeline message
      operationId: GetSubscriptionTimeline
      x-sdk-operation-name: getTimelineMessage
      description: Retrieves a order message with a specified ID.
      responses:
        '200':
          description: Order timeline message retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const message = await api.subscriptions
                .getTimelineMessage({id: 'foobar-001', messageId: 'message-202'});
            console.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
                .deleteTimelineMessage({id: 'foobar-001', messageId: 'message-202'});

            // the request does not return any fields but
            // you can confirm the success using the status code
            console.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);

            $tagsPaginator = $service->tags()->getAllPaginator(limit: 5);
            foreach ($tagsPaginator as $tagPage) {
                printf("Tags page %d/%d\n", $tagsPaginator->key() + 1, $tagsPaginator->count());
                foreach ($tagPage as $tag) {
                    printf("Tag #%s: %s\n", $tag->getId(), $tag->getName());
                }
            }

            // OR

            $tags = $service->tags()->getAll();
            foreach ($tags as $tag) {
                printf("Tag #%s: %s\n", $tag->getId(), $tag->getName());
            }
    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);

            $tagForm = new \Rebilly\Sdk\Model\Tag();
            $tagForm->setName('tag-name');
            $tagForm->setType(\Rebilly\Sdk\Model\Tag::TYPE_CUSTOMER);

            try {
                $service->tags()->create($tagForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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.
        This 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.


        If a customer in the list already has the specified tag applied, the
        customer is ignored.

        This 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.


        If a customer in the list does not have the specified tag applied, the
        customer is ignored.

        This 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.


        If a KYC document in the list already has the specified tag applied, the
        KYC document is ignored.

        This 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.


        If a KYC document in the list does not have the specified tag applied,
        the KYC document is ignored.

        This 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.


        If an AML check in the list already has the specified tag applied, the
        AML check is ignored.

        This 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.


        If an AML check in the list does not have the specified tag applied, the
        AML check is ignored.

        This 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.


        If 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.


        If 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.

        [FramePay](https://docs.rebilly.com/docs/developer-docs/framepay/) is
        the recommended way to create a payment token because it minimizes PCI
        DSS compliance.

        Once a payment token is created, it can only be used once.


        A 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();

            $paymentCardTokenForm->setBillingAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
            ]);


            $paymentInstrumentForm = new
            Entities\PaymentInstruments\PaymentCardPaymentInstrument();

            $paymentInstrumentForm->setPan('4111111111111111');

            $paymentInstrumentForm->setExpYear(2025);

            $paymentInstrumentForm->setExpMonth(8);

            $paymentInstrumentForm->setCvv(123);


            $paymentCardTokenForm->setPaymentInstrument($paymentInstrumentForm);


            try {
                $paymentCardToken = $client->paymentCardTokens()->create($paymentCardTokenForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: |
            // first set the properties for the new payment token
            const data = {
                method: 'payment-card',
                paymentInstrument: {
                    pan: '4111111111111111',
                    expYear: 2022,
                    expMonth: 12,
                    cvv: '123'
                },
                billingAddress: {
                  firstName: 'Johnny',
                  lastName: 'Brown',
                  emails: [{
                      label: 'main',
                      value: 'johnny+test@grr.la',
                      primary: true
                  }]
                }
            };

            const token = await api.paymentTokens.create({data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $paymentCardTokenForm = new \Rebilly\Sdk\Model\PaymentCardToken();

            $paymentCardTokenForm->setBillingAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
            ]);


            $paymentInstrumentForm = new
            \Rebilly\Sdk\Model\PaymentCardTokenPaymentInstrument();

            $paymentInstrumentForm->setPan('4111111111111111');

            $paymentInstrumentForm->setExpYear(2025);

            $paymentInstrumentForm->setExpMonth(8);

            $paymentInstrumentForm->setCvv('123');


            $paymentCardTokenForm->setPaymentInstrument($paymentInstrumentForm);


            try {
                $paymentCardToken = $service->paymentTokens()->create($paymentCardTokenForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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([
                'filter' => 'token:string',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.paymentTokens.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100};

            const secondCollection = await api.paymentTokens.getAll(params);


            // access the collection items, each item is a Token

            secondCollection.items.forEach(paymentToken =>
            console.log(paymentToken.fields.id));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $paymentCardTokensPaginator =
            $service->paymentTokens()->getAllPaginator(limit: 5);

            foreach ($paymentCardTokensPaginator as $paymentCardTokensPage) {
                printf("Payment card tokens page %d/%d\n", $paymentCardTokensPaginator->key() + 1, $paymentCardTokensPaginator->count());
                foreach ($paymentCardTokensPage as $paymentCardToken) {
                    printf("Payment card token #%s\n", $paymentCardToken->getId());
                }
            }


            // OR


            $paymentCardTokens = $service->paymentTokens()->getAll();

            foreach ($paymentCardTokens as $paymentCardToken) {
                printf("Payment card token #%s\n", $paymentCardToken->getId());
            }
  /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');
        - lang: JavaScript
          source: >-
            const paymentToken = await api.paymentTokens.get({id:
            'foobar-001'});

            console.log(paymentToken.fields.method);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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.


        We 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`.


        Use this operation for the following transactions.


        #### Real-time decision and response


        In this transaction, you send a request and inspect the `result` of the
        response for `approved` or `declined`.


        #### User approval/interaction required


        In this transaction, user approval is required to complete the
        transaction.

        User approval generally requires the user to interact with a third
        party,

        and is common in many transactions for alternative methods.

        For example, PayPal requires user permission to complete a payment or to
        accept a billing agreement.

        Payment cards may also require user approval for 3D secure
        authentication.


        If approval is required, you receive a response with a `result` value of
        `unknown` and a `status` value of `waiting-approval`.

        The `_links` property of the response has a link for the `approvalUrl`.

        Open 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();

            $transactionForm->setType('sale');

            $transactionForm->setCustomerId('customerId');

            $transactionForm->setWebsiteId('websiteId');

            $transactionForm->setCurrency('USD');

            $transactionForm->setAmount(1);


            $paymentInstruction = new
            Rebilly\Entities\Transactions\PaymentInstructions\PaymentTokenInstruction();

            $paymentInstruction->setToken('payment-token');

            $transactionForm->setPaymentInstruction($paymentInstruction);


            $transactionForm->setBillingAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
                'dob' => '2000-06-01',
            ]);


            try {
                $transaction = $client->transactions()->create($transactionForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: |
            // first set the properties for the new transaction
            const data = {
                customerId: 'foobar-0001',
                type: 'sale',
                websiteId: 'my-main-website',
                paymentInstrument: {
                    method: 'payment-card',
                    paymentCardId: 'my-payment-card-id',
                    gatewayAccountId: 'my-gateway-account-id'
                },
                currency: 'USD',
                amount: 12.99,
                description: 'manual transaction',
            };

            const transaction = await api.transactions.create({data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $transactionForm = new \Rebilly\Sdk\Model\PostTransactionRequest([
                'type' => 'sale',
                'amount' => 1,
            ]);

            $transactionForm->setCustomerId('customerId');

            $transactionForm->setWebsiteId('websiteId');

            $transactionForm->setCurrency('USD');


            $paymentInstruction = new
            \Rebilly\Sdk\Model\PaymentInstructionToken();

            $paymentInstruction->setToken('payment-token');

            $transactionForm->setPaymentInstruction($paymentInstruction);


            $transactionForm->setBillingAddress([
                'firstName' => 'John',
                'lastName' => 'Doe',
                'organization' => 'Test LTD',
                'address' => 'Test street 5',
                'address2' => 'Test house 5',
                'city' => 'New York',
                'region' => 'Long Island',
                'country' => 'US',
                'postalCode' => '123456',
                'emails' => [
                    [
                        'label' => 'main',
                        'value' => 'johndoe@testemail.com',
                        'primary' => true,
                    ],
                    [
                        'label' => 'secondary',
                        'value' => 'otheremail@testemail.com',
                    ],
                ],
                'phoneNumbers' => [
                    [
                        'label' => 'work',
                        'value' => '+123456789',
                        'primary' => true,
                    ],
                    [
                        'label' => 'home',
                        'value' => '+9874654321',
                    ],
                ],
                'dob' => '2000-06-01',
            ]);


            try {
                $transaction = $service->transactions()->create($transactionForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    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([
                'filter' => 'result:approved',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.transactions.getAll();


            // alternatively you can specify one or more of them

            const params = {limit: 20, offset: 100, sort: '-createdTime'};

            const secondCollection = await api.transactions.getAll(params);


            // access the collection items, each item is a Transaction

            secondCollection.items.forEach(transaction =>
            console.log(transaction.fields.type));
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $transactionsPaginator =
            $service->transactions()->getAllPaginator(limit: 5, filter:
            'result:approved');

            foreach ($transactionsPaginator as $transactionsPage) {
                printf("Transactions page %d/%d\n", $transactionsPaginator->key() + 1, $transactionsPaginator->count());
                foreach ($transactionsPage as $transaction) {
                    printf("Transaction #%s (%s): %s\n", $transaction->getId(), $transaction->getStatus(), $transaction->getDescription());
                }
            }


            // OR


            $transactions = $service->transactions()->getAll(filter:
            'result:approved');

            foreach ($transactions as $transaction) {
                printf("Transaction #%s (%s): %s\n", $transaction->getId(), $transaction->getStatus(), $transaction->getDescription());
            }
  /transactions/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      tags:
        - Transactions
      summary: Retrieve a transaction
      operationId: GetTransaction
      x-sdk-operation-name: get
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Retrieves a transaction with a specified ID.
      parameters:
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: Transaction retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Transaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $transaction = $client->transactions()->load('transactionId');
        - lang: JavaScript
          source: |-
            const transaction = await api.transactions.get({id: 'foobar-001'});
            console.log(transaction.fields.billingAddress.firstName);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $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 {
                $transaction = $client->transactions()->patch($transactionId, $data);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // first set the custom fields to update for the transaction

            const data = {
                customFields: {
                    'myCustomField': 'myCustomData',
                    'myOtherField': 'myOtherData',        
                }
            };


            const transaction = await api.transactions.patch({id:
            'my-transaction-id', data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $transactionForm = new \Rebilly\Sdk\Model\PatchTransactionRequest();
            $transactionForm->setCustomFields([
                [
                    'name' => 'customField',
                    'value' => 'customValue',
                ],
            ]);

            try {
                $transaction = $service->transactions()->patch('transactionId', $transactionForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /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.


        The query interacts with the related gateway account to obtain the
        result, amount, and currency.

        If 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`,
        with 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.

        The 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);
        - lang: JavaScript
          source: >-
            // define the refund amount

            const data = {
                amount: 12.99
            };


            const refund = await api.transactions.switch({id:
            'my-transaction-id', data});

            console.log(refund.fields.status);
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $transactionRefund = new \Rebilly\Sdk\Model\TransactionRefund();

            $transactionRefund->setAmount(1.99);


            $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`

            const firstCollection = await api.transactions
                .getAllTimelineMessages({id: 'my-transaction'});

            // alternatively you can specify one or more of them

            const params = {id: 'my-transaction', limit: 20, offset: 100};

            const secondCollection = await
            api.transactions.getAllTimelineMessages(params);


            // access the collection items, each item is a TransactionTimeline

            secondCollection.items
                .forEach(message => console.log(message.fields.eventType));
    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

            const firstComment = await api
                .transactions.createTimelineComment({id: 'my-transaction-id', data: {message: 'Your comment here'}});

            // Using params object, mentions and references

            const message = `Example of mentions @user@mydomain.com and
            references #transactions-transaction-id`;

            const params = {
                id: 'my-transaction-id',
                data: {
                    message,
                },
            };

            const 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
                .getTimelineMessage({id: 'foobar-001', messageId: 'message-202'});
            console.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
                .deleteTimelineMessage({id: 'foobar-001', messageId: 'message-202'});

            // the request does not return any fields but
            // you can confirm the success using the status code
            console.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.


        > **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.


        > **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.


        > **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.


        > **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.


        > **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.


        > **Important:** This operation is experimental and may not be backward
        compatible.
      operationId: DeleteFee
      x-sdk-operation-name: delete
      responses:
        '204':
          description: Fee deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api-keys/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /balance-transactions/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /billing-portals/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /broadcast-messages/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /deposit-requests:
    post:
      x-products:
        - Core
      x-badges:
        - name: Experimental
      tags:
        - Deposits
      summary: Create a deposit request
      operationId: PostDepositRequest
      x-sdk-operation-name: create
      description: >-
        Creates a deposit request.

        To complete the deposit, the customer is redirected to the
        [deposit](/catalog/all/deposits/postdepositrequest#deposits/postdepositrequest/t=response&c=201&path=_links/href)
        link.

        After the deposit, the customer is redirected to the `redirectUrl`.

        Corresponding 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'
  /deposit-strategies:
    post:
      x-products:
        - Core
      x-badges:
        - name: Experimental
      tags:
        - Deposits
      summary: Create a deposit strategy
      operationId: PostDepositStrategy
      x-sdk-operation-name: create
      description: >-
        Creates a deposit strategy.

        To complete the deposit, the customer is redirected to the `deposit`
        link.

        After the deposit, the customer is redirected to the `redirectUrl`.

        Corresponding transaction webhooks are sent to webhooks subscribers.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DepositStrategy'
        description: Deposit strategy resource.
        required: true
      responses:
        '201':
          description: Deposit 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 strategies
      operationId: GetDepositStrategyCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of deposit strategies.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of deposit 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 strategy
      operationId: GetDepositStrategy
      x-sdk-operation-name: get
      description: Retrieves a deposit strategy with a specified ID.
      responses:
        '200':
          description: Deposit 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 strategy
      operationId: PutDepositStrategy
      x-sdk-operation-name: update
      description: Creates or updates (upserts) a deposit strategy with a specified ID.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DepositStrategy'
        description: Deposit strategy resource.
        required: true
      responses:
        '200':
          description: Deposit strategy updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepositStrategy'
        '201':
          description: Deposit 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 strategy
      operationId: DeleteDepositStrategy
      x-sdk-operation-name: delete
      description: Deletes a deposit strategy with a specified ID.
      responses:
        '204':
          description: Deposit 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.

        A custom property set is a JSON-schema to extend the request form with
        extra form fields.

        The collected information is stored at the deposit request.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DepositCustomPropertySet'
        description: Custom deposit property set resource.
        required: true
      responses:
        '201':
          description: Custom deposit property set created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepositCustomPropertySet'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    get:
      x-products:
        - Core
      x-badges:
        - name: Experimental
      tags:
        - Deposits
      summary: Retrieve custom deposit properties sets
      operationId: GetDepositCustomPropertySetCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of custom deposit property sets.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of custom deposit property sets retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DepositCustomPropertySet'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /deposit-custom-property-sets/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      x-badges:
        - name: Experimental
      tags:
        - Deposits
      summary: Retrieve a custom deposit property set
      operationId: GetDepositCustomPropertySet
      x-sdk-operation-name: get
      description: Retrieves a custom deposit property set with a specified ID.
      responses:
        '200':
          description: Custom deposit property set retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepositCustomPropertySet'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-products:
        - Core
      x-badges:
        - name: Experimental
      tags:
        - Deposits
      summary: Upsert a custom deposit property set
      operationId: PutDepositCustomPropertySet
      x-sdk-operation-name: update
      description: >-
        Creates or updates (upserts) a custom deposit property set with a
        specified ID.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DepositCustomPropertySet'
        description: Custom deposit property set resource.
        required: true
      responses:
        '200':
          description: Custom deposit property updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepositCustomPropertySet'
        '201':
          description: Custom deposit property set created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepositCustomPropertySet'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      x-products:
        - Core
      x-badges:
        - name: Experimental
      tags:
        - Deposits
      summary: Delete a custom deposit property set
      operationId: DeleteDepositCustomPropertySet
      x-sdk-operation-name: delete
      description: Deletes a custom deposit property set with a specified ID.
      responses:
        '204':
          description: Custom deposit property set deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /checkout-forms/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /service-credentials/{type}:
    parameters:
      - $ref: '#/components/parameters/credentialType'
  /service-credentials/{type}/{id}:
    parameters:
      - $ref: '#/components/parameters/credentialType'
      - $ref: '#/components/parameters/resourceId'
  /service-credentials/{type}/{id}/items:
    parameters:
      - $ref: '#/components/parameters/credentialType'
      - $ref: '#/components/parameters/resourceId'
  /custom-domains/{domain}:
    parameters:
      - name: domain
        in: path
        description: Resource domain.
        required: true
        schema:
          type: string
          maxLength: 255
          pattern: ^[@~\-\.\w]+$
  /email-delivery-setting-verifications/{token}:
    parameters:
      - $ref: '#/components/parameters/token'
  /email-delivery-settings/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /email-delivery-settings/{id}/resend-email-verification:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /email-messages/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /events/{eventType}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
  /events/{eventType}/rules:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
  /events/{eventType}/timeline:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
  /events/{eventType}/timeline/{messageId}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
      - name: messageId
        in: path
        description: ID of the rules engine timeline message.
        required: true
        schema:
          type: string
  /events/{eventType}/rules/history:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
  /events/{eventType}/rules/history/{version}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
      - $ref: '#/components/parameters/rulesVersion'
  /events/{eventType}/rules/versions/{version}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
      - $ref: '#/components/parameters/rulesVersion'
  /events/{eventType}/rules/drafts:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
  /events/{eventType}/rules/drafts/{id}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
      - $ref: '#/components/parameters/resourceId'
  /forgot-password:
    servers:
      - url: https://api-sandbox.rebilly.com
        description: Sandbox server
      - url: https://api.rebilly.com
        description: Live server
  /gateway-accounts/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /gateway-accounts/{id}/close:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /gateway-accounts/{id}/disable:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /gateway-accounts/{id}/downtime-schedules:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /gateway-accounts/{id}/downtime-schedules/{downtimeId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: downtimeId
        in: path
        description: ID of the gateway account downtime.
        required: true
        schema:
          type: string
  /gateway-accounts/{id}/enable:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /gateway-accounts/{id}/limits:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /gateway-accounts/{id}/limits/{limitId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: limitId
        in: path
        description: ID of the gateway account limit.
        required: true
        schema:
          type: string
          enum:
            - daily-money
            - monthly-money
            - daily-count
            - monthly-count
  /gateway-accounts/{id}/timeline:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /gateway-accounts/{id}/timeline/{messageId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: messageId
        in: path
        description: ID of the gateway account timeline message.
        required: true
        schema:
          type: string
  /gateway-accounts/{id}/check-credentials:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /gateway-accounts/{id}/financial-settings:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /grid-segments/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /integrations/{label}:
    parameters:
      - $ref: '#/components/parameters/integrationLabel'
  /lists/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /lists/{id}/{version}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: version
        in: path
        required: true
        description: Version of the list.
        schema:
          type: integer
          minimum: 1
  /memberships/{organizationId}/{userId}:
    parameters:
      - name: organizationId
        in: path
        required: true
        description: >-
          Unique organization identifier.

          An organization is an entity that represents a company.

          For more information, see [Obtain an organization
          ID](https://www.rebilly.com/docs/settings/organizations-and-websites/#obtain-your-organization-id-and-website-id).
        schema:
          $ref: '#/components/schemas/ResourceId'
      - name: userId
        in: path
        required: true
        description: ID of the user.
        schema:
          $ref: '#/components/schemas/ResourceId'
  /organizations/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /payment-methods:
    servers:
      - url: https://api-sandbox.rebilly.com
        description: Sandbox server
      - url: https://api.rebilly.com
        description: Live server
  /payment-methods/{apiName}:
    servers:
      - url: https://api-sandbox.rebilly.com
        description: Sandbox server
      - url: https://api.rebilly.com
        description: Live server
    parameters:
      - name: apiName
        in: path
        description: Name of the payment method API.
        required: true
        schema:
          description: Name of the payment method returned in the API response.
          type: string
          pattern: ^[\w\. -]+$
  /payment-gateways-metadata/{apiName}:
    parameters:
      - name: apiName
        in: path
        description: Payment gateway metadata API name.
        required: true
        schema:
          description: Name of the payment gateway returned in the API response.
          type: string
          pattern: ^[\w\. -]+$
  /payout-requests:
    get:
      x-products:
        - Core
      tags:
        - Transactions
      summary: Retrieve a list of payout requests
      operationId: GetPayoutRequestCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of payout requests.
      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-products:
        - Core
      tags:
        - Transactions
      summary: Create a payout request
      operationId: PostPayoutRequest
      x-sdk-operation-name: create
      description: >-
        Creates a payout request.

        In the response, the `selectPaymentInstrumentUrl` field is used to
        redirect the customer to select a preferred payment instrument.

        After a payment instrument is selected, the customer is redirected to
        the `selectedPaymentInstrumentRedirectUrl` value.


        > **Important:** The selected payment gateway must be configured to
        support payout requests.

        > 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-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-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'
  /payout-requests/{id}/cancel:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      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}/payment-instruments:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      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.

                        This field is empty if the requested payment instrument
                        has not been used yet.
                      x-label: Gateway account
                      x-basic: true
                      type:
                        - string
                        - 'null'
                      allOf:
                        - $ref: '#/components/schemas/GatewayName'
                    exposureAmount:
                      description: >-
                        Total amount of sales minus credit for the specified
                        gateway and instrument.
                      type: number
                      format: double
                    previousAllocatedAmount:
                      description: >-
                        Total amount of allocated credit for the payout request
                        for the specified gateway and instrument.
                      type: number
                      format: double
                    lastPaymentTime:
                      description: >-
                        Date and time when the last payment is created for the
                        gateway and the payment instrument.
                      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'
  /previews/orders:
    post:
      x-products:
        - Core
      tags:
        - Orders
      summary: Preview an order
      operationId: PostPreviewOrder
      x-sdk-operation-name: order
      description: |-
        Previews an order.
        Use this operation to preview a draft order before making an order.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/OrderPreview'
      responses:
        '200':
          description: Order preview retrieved.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrderPreview'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /roles/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /send-through-attribution/{eventType}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
  /status:
    servers:
      - url: https://api-sandbox.rebilly.com
        description: Sandbox server
      - url: https://api.rebilly.com
        description: Live server
  /tracking/api/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /tracking/taxes/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /tracking/webhooks/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /tracking/webhooks/{id}/resend:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /users/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /users/{id}/mfa:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /webhooks/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /websites/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /experimental/customers/{customerId}/summary-metrics:
    parameters:
      - name: customerId
        in: path
        required: true
        description: ID of the customer.
        schema:
          type: string
  /experimental/data-exports/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /organization-exports/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /experimental/reports/events-triggered/{eventType}/rules:
    parameters:
      - name: eventType
        in: path
        required: true
        description: Type of system event.
        schema:
          $ref: '#/components/schemas/EventType'
  /experimental/subscriptions/{subscriptionId}/summary-metrics:
    parameters:
      - name: subscriptionId
        in: path
        required: true
        description: ID of the subscription order.
        schema:
          type: string
  /storefront/account/reset-password/{token}:
    parameters:
      - $ref: '#/components/parameters/token'
  /storefront/account/verification/{token}:
    parameters:
      - $ref: '#/components/parameters/token'
  /storefront/billing-portals/{slug}:
    parameters:
      - name: slug
        in: path
        description: Resource slug.
        required: true
        schema:
          type: string
          maxLength: 100
          pattern: ^[@~\-\.\w]+$
  /storefront/deposit-strategies/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/deposit-requests/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/checkout-forms/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/custom-fields/{resource}:
    parameters:
      - $ref: '#/components/parameters/storefrontCustomFieldResource'
  /storefront/invoices/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/orders/{id}/upcoming-invoice:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/kyc-documents/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/kyc-requests/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/kyc-liveness-sessions/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/kyc-liveness-sessions/{id}/finish:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/orders/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/orders/{id}/cancellation:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/orders/{id}/pause:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/subscriptions/{id}/change-items:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/payment-instruments/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/payment-instruments/{id}/deactivation:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/payment-instruments/{id}/setup:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/payout-requests/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/plans/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/products/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/quotes/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/quotes/{id}/accept:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/quotes/{id}/reject:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/transactions/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /storefront/transactions/{id}/{token}/continue:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/token'
  /storefront/transactions/{id}/{token}/bypass:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/token'
  /storefront/websites/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
  /customers/{id}/edd-score:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      tags:
        - Customers
      summary: Retrieve a customer's EDD score
      operationId: GetCustomerEddScore
      x-sdk-operation-name: getCustomerEddScore
      description: Retrieves an EDD score for a customer with a specified ID.
      responses:
        '200':
          description: EDD score retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Edd'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      x-products:
        - Core
      tags:
        - Customers
      summary: Update a customer's EDD score
      operationId: PatchCustomerEddScore
      x-sdk-operation-name: patchCustomerEddScore
      description: Updates an EDD score for a customer with a specified ID.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: PatchCustomerEddScoreRequest
              required:
                - score
              properties:
                score:
                  type: object
                  description: Customer's EDD score.
                  properties:
                    occupation:
                      $ref: '#/components/schemas/EddScore'
                    arrest:
                      $ref: '#/components/schemas/EddScore'
                    bankruptcy:
                      $ref: '#/components/schemas/EddScore'
                    fraud:
                      $ref: '#/components/schemas/EddScore'
      responses:
        '200':
          description: EDD score 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/Edd'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /customers/{id}/edd-timeline:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      tags:
        - Customers timeline
      summary: Retrieve EDD timeline messages
      operationId: GetCustomerEddTimelineCollection
      x-sdk-operation-name: getEddTimelineCollection
      description: Retrieves a list of EDD timeline messages.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of EDD timeline messages retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EddTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Core
      tags:
        - Customers timeline
      summary: Create an EDD timeline comment
      operationId: PostCustomerEddTimeline
      x-sdk-operation-name: createEddTimelineComment
      description: Creates an EDD timeline comment.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EddTimeline'
        description: EDD timeline resource.
        required: true
      responses:
        '201':
          description: EDD 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/EddTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /customers/{id}/edd-timeline/{messageId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: messageId
        in: path
        description: ID of the EDD timeline message.
        required: true
        schema:
          type: string
    get:
      x-products:
        - Core
      tags:
        - Customers timeline
      summary: Retrieve an EDD timeline message
      operationId: GetCustomerEddTimeline
      x-sdk-operation-name: getEddTimelineMessage
      description: Retrieves an EDD message with a specified ID.
      responses:
        '200':
          description: EDD timeline message retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EddTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      x-products:
        - Core
      tags:
        - Customers timeline
      summary: Delete an EDD timeline message
      operationId: DeleteCustomerEddTimeline
      x-sdk-operation-name: deleteEddTimelineMessage
      description: Deletes an EDD timeline message with a specified ID.
      responses:
        '204':
          description: EDD 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'
  /customers/{id}/edd-search-results:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      tags:
        - Customers
      summary: Retrieve customer EDD search results
      operationId: GetCustomerEddSearchResultCollection
      x-sdk-operation-name: getAllEddSearchResults
      description: Retrieve EDD search results for a customer with a specified ID.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: EDD search results retrieved.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EddSearchResult'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /customers/{id}/edd-search-results/{searchResultId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: searchResultId
        in: path
        description: ID of the EDD search result.
        required: true
        schema:
          type: string
    get:
      x-products:
        - Full
        - Risk Management
        - Core
      tags:
        - Customers
      summary: Retrieve a customer's EDD search result
      operationId: GetCustomerEddSearchResult
      x-sdk-operation-name: getEddSearchResult
      description: Retrieves an EDD search result for a customer with a specified ID.
      responses:
        '200':
          description: EDD search result retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EddSearchResult'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /risk-score-rules:
    get:
      x-products:
        - Core
      tags:
        - Risk score
      summary: Retrieve risk score rules
      operationId: GetRiskScoreRules
      x-sdk-operation-name: getAll
      security:
        - SecretApiKey: []
        - JWT: []
      description: Retrieves risk score rules.
      responses:
        '200':
          description: Risk score rules retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskScoreRules'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    put:
      x-products:
        - Core
      tags:
        - Risk score
      summary: Modify risk score rules
      operationId: PutRiskScoreRules
      x-sdk-operation-name: updateRiskScoreRules
      description: Modifies risk score rules.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RiskScoreRules'
        description: Risk score rules.
        required: true
      responses:
        '200':
          description: Risk score rules set.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskScoreRules'
        '201':
          description: Risk score rules set.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskScoreRules'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /risk-score-rules/blocklists:
    get:
      x-products:
        - Core
      tags:
        - Risk score
      summary: Retrieve risk score blocklist rules
      operationId: GetRiskScoreBlocklistRules
      x-sdk-operation-name: getAllBlocklistRules
      security:
        - SecretApiKey: []
        - JWT: []
      description: Retrieves risk score blocklist rules.
      responses:
        '200':
          description: Risk score blocklist rules retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskScoreBlocklist'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    put:
      x-products:
        - Core
      tags:
        - Risk score
      summary: Modify risk score blocklist rules
      operationId: PutRiskScoreBlocklistRules
      x-sdk-operation-name: updateRiskScoreBlocklistRules
      description: Modifies risk score blocklist rules.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RiskScoreBlocklist'
        description: Risk score blocklist rules.
        required: true
      responses:
        '200':
          description: Risk score blocklist rules set.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskScoreBlocklist'
        '201':
          description: Risk score blocklist rules set.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskScoreBlocklist'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /risk-score-simulation-jobs:
    get:
      x-badge: Experimental
      x-products:
        - Core
      tags:
        - Risk score
      summary: Retrieve risk score simulation jobs
      operationId: GetRiskScoreSimulationJobCollection
      x-sdk-operation-name: getAll
      security:
        - SecretApiKey: []
        - JWT: []
      description: Retrieves a list of simulation jobs.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: List of risk score simulation jobs retrieved.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            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/RiskScoreSimulationJob'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-badge: Experimental
      x-products:
        - Core
      tags:
        - Risk score
      summary: Create new risk score simulation job
      operationId: PostRiskScoreSimulationJob
      x-sdk-operation-name: create
      security:
        - SecretApiKey: []
        - JWT: []
      description: Creates a new risk score simulation job.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RiskScoreSimulationJob'
        required: true
      responses:
        '201':
          description: Risk score simulation job created.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskScoreSimulationJob'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
  /risk-score-simulation-jobs/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-badge: Experimental
      x-products:
        - Core
      tags:
        - Risk score
      summary: Retrieve risk score simulation job
      operationId: GetRiskScoreSimulationJob
      x-sdk-operation-name: get
      security:
        - SecretApiKey: []
        - JWT: []
      description: Retrieves a specified risk score simulation job.
      responses:
        '200':
          description: Risk score simulation job 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/RiskScoreSimulationJob'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /risk-score-simulation-jobs/{id}/stop:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-badge: Experimental
      x-products:
        - Core
      tags:
        - Risk score
      summary: Stop an active risk score simulation job
      operationId: PostRiskScoreSimulationJobStop
      x-sdk-operation-name: stop
      security:
        - SecretApiKey: []
        - JWT: []
      description: Stops an active risk score simulation job.
      responses:
        '200':
          description: Risk score simulation job stopped.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RiskScoreSimulationJob'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /risk-score-simulation-jobs/{id}/transactions:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-badge: Experimental
      x-products:
        - Core
      tags:
        - Risk score
      summary: Retrieve risk score simulated transactions
      operationId: GetRiskScoreSimulatedTransactionCollection
      x-sdk-operation-name: getTransactions
      description: >-
        Retrieves a list of affected transactions for a specified risk score
        simulation.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: List of affected transactions retrieved.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
            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/RiskScoreSimulationTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /allowlists:
    get:
      x-products:
        - Core
      tags:
        - Allowlists
      summary: Retrieve allowlist collection
      operationId: GetAllowlistCollection
      x-sdk-operation-name: getAllowlistCollection
      security:
        - SecretApiKey: []
        - JWT: []
      description: Retrieves allowlist collection.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Allowlist collection retrieved.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Allowlist'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Core
      tags:
        - Allowlists
      summary: Create allowlist record
      operationId: PostAllowlist
      x-sdk-operation-name: storeAllowlist
      security:
        - PublishableApiKey: []
      description: Creates allowlist record.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Allowlist'
        description: Allowlist record.
        required: true
      responses:
        '201':
          description: Allowlist record created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Allowlist'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /allowlists/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      tags:
        - Allowlists
      summary: Retrieve allowlist record
      operationId: GetAllowlist
      x-sdk-operation-name: getAllowlist
      security:
        - SecretApiKey: []
        - JWT: []
      description: Retrieves allowlist record.
      responses:
        '200':
          description: Allowlist record retrieved.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Allowlist'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    delete:
      x-products:
        - Core
      tags:
        - Allowlists
      summary: Delete allowlist record
      operationId: DeleteAllowlist
      x-sdk-operation-name: delete
      description: Deletes allowlist record with a specified ID.
      responses:
        '204':
          description: Allowlist record deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /tags-rules:
    get:
      x-products:
        - Core
      tags:
        - Tags
      summary: Retrieve tags rules list
      operationId: GetTagRuleCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of tags rules.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of tags rules retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TagUntagRule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Core
      tags:
        - Tags
      summary: Create tags rule
      operationId: PostTagRule
      x-sdk-operation-name: create
      description: Creates a tags rule.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagUntagRule'
        description: Tags rule resource.
        required: true
      responses:
        '201':
          description: Tags rule created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagUntagRule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /tags-rules/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Core
      tags:
        - Tags
      summary: Retrieve a tags rule
      operationId: GetTagRule
      x-sdk-operation-name: get
      description: Retrieves a tags rule with a specified ID.
      responses:
        '200':
          description: Tags rule retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagUntagRule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-products:
        - Core
      tags:
        - Tags
      summary: Create a tags rule with specified ID
      operationId: PutTagRule
      x-sdk-operation-name: update
      description: Creates a tags rule with a specified ID.
      responses:
        '200':
          description: Tags rule updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagUntagRule'
        '201':
          description: Tags rule created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TagUntagRule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TagUntagRule'
        description: Tags rule resource.
        required: true
    delete:
      x-products:
        - Core
      tags:
        - Tags
      summary: Delete tags rule
      operationId: DeleteTagRule
      x-sdk-operation-name: delete
      description: Deletes a tags rule with a specified ID.
      responses:
        '204':
          description: Tags rule deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
webhooks:
  aml-list-possibly-matched:
    post:
      summary: AML list possibly matched
      operationId: aml-list-possibly-matched
      x-products:
        - Core
      tags:
        - AML
      requestBody:
        $ref: '#/components/requestBodies/CustomerWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  coupon-application-removed:
    post:
      summary: Coupon application removed
      operationId: coupon-application-removed
      x-products:
        - Core
      tags:
        - Coupons
      requestBody:
        $ref: '#/components/requestBodies/CouponRedemptionWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  coupon-applied:
    post:
      summary: Coupon applied
      operationId: coupon-applied
      x-products:
        - Core
      tags:
        - Coupons
      requestBody:
        $ref: '#/components/requestBodies/CouponRedemptionWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  coupon-expiration-modified:
    post:
      summary: Coupon expiration modified
      operationId: coupon-expiration-modified
      x-products:
        - Core
      tags:
        - Coupons
      requestBody:
        $ref: '#/components/requestBodies/CouponWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  coupon-expired:
    post:
      summary: Coupon expired
      operationId: coupon-expired
      x-products:
        - Core
      tags:
        - Coupons
      requestBody:
        $ref: '#/components/requestBodies/CouponWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  coupon-issued:
    post:
      summary: Coupon issued
      operationId: coupon-issued
      x-products:
        - Core
      tags:
        - Coupons
      requestBody:
        $ref: '#/components/requestBodies/CouponWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  coupon-modified:
    post:
      summary: Coupon modified
      operationId: coupon-modified
      x-products:
        - Core
      tags:
        - Coupons
      requestBody:
        $ref: '#/components/requestBodies/CouponWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  coupon-redeemed:
    post:
      summary: Coupon redeemed
      operationId: coupon-redeemed
      x-products:
        - Core
      tags:
        - Coupons
      requestBody:
        $ref: '#/components/requestBodies/CouponRedemptionWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  coupon-redemption-canceled:
    post:
      summary: Coupon redemption canceled
      operationId: coupon-redemption-canceled
      x-products:
        - Core
      tags:
        - Coupons
      requestBody:
        $ref: '#/components/requestBodies/CouponRedemptionWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  credit-memo-applied:
    post:
      summary: Credit memo applied
      operationId: credit-memo-applied
      x-products:
        - Core
      tags:
        - Credit memos
      requestBody:
        $ref: '#/components/requestBodies/CreditMemoWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  credit-memo-created:
    post:
      summary: Credit memo created
      operationId: credit-memo-created
      x-products:
        - Core
      tags:
        - Credit memos
      requestBody:
        $ref: '#/components/requestBodies/CreditMemoWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  credit-memo-modified:
    post:
      summary: Credit memo modified
      operationId: credit-memo-modified
      x-products:
        - Core
      tags:
        - Credit memos
      requestBody:
        $ref: '#/components/requestBodies/CreditMemoWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  credit-memo-partially-applied:
    post:
      summary: Credit memo partially applied
      operationId: credit-memo-partially-applied
      x-products:
        - Core
      tags:
        - Credit memos
      requestBody:
        $ref: '#/components/requestBodies/CreditMemoWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  credit-memo-voided:
    post:
      summary: Credit memo voided
      operationId: credit-memo-voided
      x-products:
        - Core
      tags:
        - Credit memos
      requestBody:
        $ref: '#/components/requestBodies/CreditMemoWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  customer-created:
    post:
      summary: Customer created
      operationId: customer-created
      x-products:
        - Core
      tags:
        - Customers
      requestBody:
        $ref: '#/components/requestBodies/CustomerWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  customer-merged:
    post:
      summary: Customer merged
      operationId: customer-merged
      x-products:
        - Core
      tags:
        - Customers
      requestBody:
        $ref: '#/components/requestBodies/MergedCustomer'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  customer-one-time-password-requested:
    post:
      summary: Customer one-time-password requested
      operationId: customer-one-time-password-requested
      x-products:
        - Core
      tags:
        - Customers
      requestBody:
        $ref: '#/components/requestBodies/CustomerWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  customer-redirected-offsite:
    post:
      summary: Customer redirected offsite
      operationId: customer-redirected-offsite
      x-products:
        - Core
      tags:
        - Transactions
      requestBody:
        $ref: '#/components/requestBodies/CustomerRedirect'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  customer-returned:
    post:
      summary: Customer returned
      operationId: customer-returned
      x-products:
        - Core
      tags:
        - Transactions
      requestBody:
        $ref: '#/components/requestBodies/CustomerRedirect'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  customer-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.
  invoice-tax-calculation-failed:
    post:
      summary: Invoice tax calculation failed
      operationId: invoice-tax-calculation-failed
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceTaxCalculationFailed'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  gateway-account-requested:
    post:
      summary: Gateway account requested
      operationId: gateway-account-requested
      x-products:
        - Core
      tags:
        - Transactions
      requestBody:
        $ref: '#/components/requestBodies/TransactionWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-abandoned:
    post:
      summary: Invoice abandoned
      operationId: invoice-abandoned
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-created:
    post:
      summary: Invoice created
      operationId: invoice-created
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-issued:
    post:
      summary: Invoice issued
      operationId: invoice-issued
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-modified:
    post:
      summary: Invoice modified
      operationId: invoice-modified
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-paid:
    post:
      summary: Invoice paid
      operationId: invoice-paid
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-partially-paid:
    post:
      summary: Invoice partially paid
      operationId: invoice-partially-paid
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-refunded:
    post:
      summary: Invoice refunded
      operationId: invoice-refunded
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-partially-refunded:
    post:
      summary: Invoice partially refunded
      operationId: invoice-partially-refunded
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-past-due:
    post:
      summary: Invoice past due
      operationId: invoice-past-due
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-past-due-reminder:
    post:
      summary: Invoice past due reminder
      operationId: invoice-past-due-reminder
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-reissued:
    post:
      summary: Invoice reissued
      operationId: invoice-reissued
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  invoice-voided:
    post:
      summary: Invoice voided
      operationId: invoice-voided
      x-products:
        - Core
      tags:
        - Invoices
      requestBody:
        $ref: '#/components/requestBodies/InvoiceWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  kyc-document-accepted:
    post:
      summary: KYC document accepted
      operationId: kyc-document-accepted
      x-products:
        - Core
      tags:
        - KYC documents
      requestBody:
        $ref: '#/components/requestBodies/KycDocumentWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  kyc-document-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.
  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-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.
  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.
  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-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.
  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.
  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.
  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.
  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.
  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.
  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.
  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.
  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.
  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.
  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.
  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.
  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.
  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.
  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.
  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.
  subscription-trial-end-changed:
    post:
      summary: Subscription order trial end changed
      operationId: subscription-trial-end-changed
      x-products:
        - Core
      tags:
        - Orders
      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.
  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.
  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.
  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.
  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.
  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.
  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-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.
  waiting-gateway-transaction-completed:
    post:
      summary: Waiting gateway transaction completed
      operationId: waiting-gateway-transaction-completed
      x-products:
        - Core
      tags:
        - Transactions
      requestBody:
        $ref: '#/components/requestBodies/TransactionWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  order-delinquency-reached:
    post:
      summary: Order delinquency time reached
      operationId: order-delinquency-reached
      x-products:
        - Core
      tags:
        - Orders
      requestBody:
        $ref: '#/components/requestBodies/SubscriptionWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  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.
