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

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


    # 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: unknown
        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: unknown
        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
          - bump-offers
          - 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
    collectionCriteria:
      name: criteria
      in: query
      description: Criteria parameter for requesting a collection.
      schema:
        type: string
    storefrontCustomFieldResource:
      name: resource
      in: path
      description: Type of resource schema.
      required: true
      schema:
        type: string
        enum:
          - customers
          - payment-instruments
          - subscriptions
          - transactions
  headers:
    Pagination-Total:
      description: Total number of items.
      schema:
        type: integer
      example: 332
    Pagination-Limit:
      description: Maximum number of items per page.
      schema:
        type: integer
      example: 100
    Pagination-Offset:
      description: |-
        Specifies the starting point within the
        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
        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: 512-710-1640
          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'
        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
        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
                  - attachments
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            transaction:
              type: object
    TransactionId:
      type: string
      description: ID of the transaction.
      maxLength: 50
      example: txn_0YVDTQJ8YWDGQACV2N2N5SPWQ0
    ExternalIdentifier:
      type: object
      required:
        - externalIdentifier
      properties:
        resource:
          type: string
          description: Type of the resource.
          enum:
            - customers
            - invoices
            - invoice-items
            - transactions
            - journal-accounts
            - journal-entries
          readOnly: true
        resourceId:
          type: string
          description: ID of the resource entity.
          readOnly: true
        service:
          type: string
          description: Name of the external service.
          enum:
            - quickbooks-online
          readOnly: true
        externalIdentifier:
          type: string
          description: ID of the referenced entity within an external service.
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          description: Related links.
          type: array
          readOnly: true
          items:
            type: object
            properties:
              rel:
                type: string
                description: Type of link.
                enum:
                  - self
                  - externalService
              href:
                type: string
                description: Link URL.
    ExternalServiceSettings:
      type: object
      description: Settings for external service integration.
      properties:
        quickBooksOnline:
          type: object
          title: QuickBooksOnlineExternalServiceSettings
          description: QuickBooks Online settings.
          properties:
            customer:
              type: object
              title: QuickBooksOnlineCustomerExternalServiceSettings
              description: Customer settings.
              properties:
                sync:
                  type: string
                  description: >-
                    Specifies how to synchronize customers between your Rebilly
                    and QuickBooks Online account.
                  default: manually
                  enum:
                    - manually
                    - when-used
                    - always
                  x-enumDescriptions:
                    manually: >-
                      Customer data is only synchronized when it is manually
                      executed.
                    when-used: >-
                      Customer data is synchronized when related entities, such
                      as transactions or invoices are created or updated.
                    always: >-
                      Customer data is synchronized automatically as data is
                      created or updated.
                displayName:
                  type: string
                  default: full-name
                  enum:
                    - id
                    - full-name
                    - organization-name
            invoice:
              type: object
              title: QuickBooksOnlineInvoiceExternalServiceSettings
              description: Invoice settings.
              properties:
                sync:
                  type: string
                  description: >-
                    Specifies how to synchronize invoices between your Rebilly
                    and QuickBooks Online account.
                  default: manually
                  enum:
                    - manually
                    - when-issued
                    - always
                  x-enumDescriptions:
                    manually: >-
                      Invoice data is only synchronized when it is manually
                      executed.
                    when-issued: Invoice data is synchronized when issued.
                    always: >-
                      Invoice data is synchronized automatically as data it is
                      issued or updated.
                unearnedRevenueAccountId:
                  type: string
                  description: ID of the journal account where all products are created.
                  example: jrn_acc_01H32J1C97KWGRCKF1E1JY0QG8
                taxesAccountId:
                  type:
                    - string
                    - 'null'
                  default: null
                  description: ID of the journal account where all taxes are created.
                  example: jrn_acc_01H32J1KGXSRDH0K8Q7YYA552T
                department:
                  type:
                    - string
                    - 'null'
                  default: null
                  description: >-
                    ID of the QuickBooks Online department that invoices are
                    related to.
                  example: jrn_acc_01H32J1KGXSRDH0K8Q7YYA552T
                itemName:
                  type: string
                  description: Name of the invoice item.
                itemDescription:
                  type: string
                  description: Description of the invoice item.
                itemSku:
                  type: string
                  description: Stock Keeping Unit (SKU) of the invoice item.
                itemLineDescription:
                  type: string
                  description: Description of the invoice line item.
                taxName:
                  type: string
                  description: Name of the tax that is applied to the invoice.
                taxDescription:
                  type: string
                  description: Description of the tax that is applied to the invoice.
                taxSku:
                  type: string
                  description: >-
                    Stock Keeping Unit (SKU) of the tax that is applied to the
                    invoice.
                taxLineDescription:
                  type: string
                  description: Description of the tax line.
            transaction:
              type: object
              title: QuickBooksOnlineTransactionExternalServiceSettings
              description: Transaction settings.
              properties:
                syncPayments:
                  type: string
                  description: >-
                    Specifies how to synchronize transactions between your
                    Rebilly and QuickBooks Online account.
                  default: manually
                  enum:
                    - manually
                    - always
                  x-enumDescriptions:
                    manually: >-
                      Transaction data is only synchronized when it is manually
                      executed.
                    always: >-
                      Transaction data is synchronized automatically as data is
                      created or updated.
                syncRefundReceipts:
                  type: string
                  description: >-
                    Specifies how to synchronize invoices between your Rebilly
                    and QuickBooks Online account.
                  default: manually
                  enum:
                    - manually
                    - always
                  x-enumDescriptions:
                    manually: >-
                      Invoice data is only synchronized when it is manually
                      executed.
                    always: >-
                      Invoice data is synchronized automatically as data is
                      created or updated.
                depositAccountId:
                  type: string
                  description: >-
                    ID of the journal account where all payments and refund
                    receipts are deposited.
                  example: jrn_acc_01H32J1C97KWGRCKF1E1JY0QG8
                department:
                  type:
                    - string
                    - 'null'
                  default: null
                  description: >-
                    ID of the QuickBooks Online department that payments and
                    refund receipts are related to.
                  example: jrn_acc_01H32J1KGXSRDH0K8Q7YYA552T
            journalEntry:
              type: object
              title: QuickBooksOnlineJournalEntryExternalServiceSettings
              description: Journal entry settings.
              properties:
                sync:
                  type: string
                  description: >-
                    Specifies how to synchronize journal entries between your
                    Rebilly and QuickBooks Online account.
                  default: manually
                  enum:
                    - manually
                    - always
                  x-enumDescriptions:
                    manually: >-
                      Journal entry data is only synchronized when it is
                      manually executed.
                    always: >-
                      Journal entry data is synchronized automatically as data
                      is created or updated.
    File:
      type: object
      properties:
        id:
          type: string
          description: ID of the file.
          readOnly: true
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        name:
          description: Original file name.
          type: string
        extension:
          description: File extension.
          type: string
        description:
          description: Description of the file.
          type: string
        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
        size:
          description: File size, in bytes.
          type: integer
          readOnly: true
        width:
          description: Image width. This field applicable to images only.
          type: integer
          readOnly: true
        height:
          description: Image height. This field applicable to images only.
          type: integer
          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
          example: logo.png
        description:
          description: Description of the file.
          type: string
          example: My file description
        sourceType:
          description: Source of the file.
          type:
            - string
            - 'null'
          enum:
            - upload
            - camera
          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
          example: logo.png
        description:
          description: Description of the file.
          type: string
          example: My file description
        sourceType:
          description: Source of the file.
          type:
            - string
            - 'null'
          enum:
            - upload
            - camera
          example: upload
        tags:
          description: List of tags associated with the file.
          type: array
          items:
            type: string
          example:
            - test
            - tags
    ApplicationInstance:
      type: object
      description: Application instance object.
      properties:
        status:
          description: Status of the application instance.
          readOnly: true
          type: string
          enum:
            - enabling
            - enabled
            - disabling
            - disabled
        isConfigured:
          description: >-
            Determines if the configuration of the application instance is
            complete.

            Configuration is completed using the [Upsert an application instance
            configuration](https://www.rebilly.com/catalog/all/application-users/putapplicationinstanceconfiguration)
            operation.
          type: boolean
          readOnly: true
        settings:
          description: Configuration settings that are available during installation.
          type: object
          additionalProperties:
            type: string
            description: >-
              Additional properties that the user may want to add when
              installing an application.
          example:
            color: red
            limit: '5'
          deprecated: true
          readOnly: true
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    ApplicationInstanceConfiguration:
      type: object
      required:
        - settings
      description: >-
        Application instance configuration.


        If the `configuredBy` field is set to `user`, only user can change
        application settings.


        If the `configuredBy` field is set to `application`, only the
        application itself can change settings.
      properties:
        settings:
          description: Configuration settings that are available during installation.
          type: object
          additionalProperties:
            type: string
            description: >-
              Additional properties that the user may want to add when
              installing an application.
          example:
            color: red
            level: gold
        _links:
          readOnly: true
          type: array
          description: Related links.
          items:
            type: object
            properties:
              rel:
                type: string
                description: Type of link.
                enum:
                  - self
                  - configuration
                x-enumDescriptions:
                  self: Link to the application instance configuration.
                  configuration: >-
                    Link to the external resource where the application instance
                    must be configured.

                    This field contains a JWT in the query parameter.

                    Direct the user to this URL where application settings must
                    be submitted.
              href:
                type: string
                description: Link URL.
    Application:
      type: object
      description: Application object.
      required:
        - name
        - logoId
        - authorName
        - tagline
        - description
        - permissions
      properties:
        id:
          type: string
          description: ID of the application.
          readOnly: true
          maxLength: 50
          example: app_01H0HT25X7XXCJGS4H8VJSYF2Y
        name:
          description: Name of the application.
          type: string
        logoId:
          type: string
          description: File ID of the application logo.
          maxLength: 50
          example: 4f6cf35x-2c4y-483z-a0a9-158621f77a21
        authorName:
          description: Name of the application author.
          type: string
        authorLogoId:
          type:
            - string
            - 'null'
          description: File ID of the author's logo.
          maxLength: 50
          example: 4f6cf35x-2c4y-483z-a0a9-158621f77a21
        tagline:
          description: Tagline of the application.
          type: string
        description:
          description: >-
            Detailed application description. This field accepts markdown and
            simple text.
          type: string
        status:
          description: Status of the application.
          readOnly: true
          type: string
          enum:
            - pending-approval
            - available
            - disabled
        permissions:
          description: >-
            List of permissions that are available to the application.

            If you would like to add permissions, contact [Rebilly
            Support](mailto:info@rebilly.com).
          type: array
          items:
            type: string
            format: operationId
            enum:
              - DeleteApplicationInstance
              - GetApplicationInstanceConfiguration
              - GetCustomer
              - GetCustomerCollection
              - GetInvoice
              - GetInvoiceCollection
              - GetPlan
              - GetPlanCollection
              - GetProduct
              - GetProductCollection
              - GetSubscription
              - GetSubscriptionCollection
              - GetTransaction
              - GetTransactionCollection
              - GetWebhook
              - GetWebsite
              - GetWebsiteCollection
              - PostCoupon
              - PostCouponRedemption
              - PostGatewayAccountDowntimeSchedule
              - PostPayout
              - PostServiceCredential
              - PostWebhook
              - PostWebhookCredentialHash
              - PutApplicationInstanceConfiguration
              - PutCoupon
          example:
            - GetInvoice
            - GetInvoiceCollection
            - GetCustomer
            - GetCustomerCollection
        configurationUrl:
          description: >-
            External URL where the application is configured during
            installation.
          type:
            - string
            - 'null'
          format: url
        configuredBy:
          type: string
          description: Specifies who can configure the application.
          readOnly: true
          enum:
            - user
            - application
        properties:
          description: >-
            Defines settings that users can complete when they install the
            application.

            This field accepts [JSON-schema](https://json-schema.org/) drafts 4,
            6, and 7.
          type: object
          example:
            type: object
            properties:
              email:
                type: string
              max:
                type: integer
                minimum: 0
                exclusiveMaximum: 100
            required:
              - email
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - applicationInstance
                  - logoUrl
                  - authorLogoUrl
    UserApplication:
      allOf:
        - $ref: '#/components/schemas/Application'
        - properties:
            _embedded:
              type: object
              description: >-
                Embedded objects that are requested by the `expand` query
                parameter.
              readOnly: true
              properties:
                applicationInstance:
                  $ref: '#/components/schemas/ApplicationInstance'
    OwnerApplicationInstance:
      allOf:
        - $ref: '#/components/schemas/ApplicationInstance'
        - type: object
          properties:
            organizationId:
              readOnly: true
              allOf:
                - $ref: '#/components/schemas/OrganizationId'
            token:
              description: Session token used to authenticate an organization.
              type: string
              readOnly: true
    ManualShipping:
      description: Manually set shipping amount.
      type: object
      required:
        - amount
        - calculator
      properties:
        amount:
          x-type: Money
          type: number
          format: double
          description: Shipping amount.
        calculator:
          description: Shipping calculator.
          type: string
          enum:
            - manual
    RebillyShipping:
      description: Rebilly-based shipping which is calculated by shipping rates.
      type: object
      required:
        - calculator
      properties:
        calculator:
          description: Shipping calculator.
          type: string
          enum:
            - rebilly
        rateId:
          description: >-
            ID of the shipping rate. 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
    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
        - Gooney
        - Gpaysafe
        - Greenbox
        - HiPay
        - iCanPay
        - ICEPAY
        - iCheque
        - iDebit
        - Ilixium
        - Ingenico
        - INOVAPAY
        - Inovio
        - Intuit
        - InstaDebit
        - IpayOptions
        - JetPay
        - Jeton
        - JPMOrbital
        - Khelocard
        - Klarna
        - Konnektive
        - LaCore
        - loonie
        - LPG
        - MaxiCash
        - MercadoPago
        - MiFinity
        - MobilePay
        - Moneris
        - Monolo
        - MtaPay
        - MuchBetter
        - MuchBetterGateway
        - MyFatoorah
        - Neosurf
        - Netbanking
        - Neteller
        - NGenius
        - NinjaWallet
        - NMI
        - NordikCoin
        - NOWPayments
        - NuaPay
        - OchaPay
        - Onlineueberweisen
        - OnRamp
        - Orbital
        - Pagadito
        - Pagsmile
        - Panamerican
        - ParamountCommerce
        - ParamountEft
        - ParamountInterac
        - PandaGateway
        - Pay4Fun
        - PayCash
        - PayClub
        - 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
        - Telr
        - TestProcessor
        - ToditoCash
        - 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
        - loonie
        - LPG
        - Masapay
        - MaxiCash
        - MercadoPago
        - Merrick
        - Mission Valley Bank
        - MiFinity
        - MobilePay
        - Moneris
        - Monolo
        - MuchBetter
        - MuchBetterGateway
        - MyFatoorah
        - NATWEST
        - Neosurf
        - Netbanking
        - Neteller
        - NinjaWallet
        - NMI
        - NordikCoin
        - NOWPayments
        - NuaPay
        - Nuvei
        - OchaPay
        - 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
        - TBI
        - Telr
        - TestProcessor
        - ToditoCash
        - 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'
    LanguageIsoCode:
      type: string
      description: Language in ISO 639-1 code format.
      pattern: '[a-zA-Z]{2}'
      example: US
    PurchaseBumpOffer:
      type:
        - object
        - 'null'
      description: Purchase bump offer.
      required:
        - offerId
        - offerType
        - bumpAmount
      properties:
        offerId:
          description: ID of the bump offer.
          type: string
        offerType:
          description: Type of bump offer.
          type: string
          example: bonus
        bumpAmount:
          description: Amount of the bump offer.
          $ref: '#/components/schemas/MoneyAmount'
        bumpAmountInUsd:
          description: Amount of the bump offer in USD.
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/MoneyAmount'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
    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
        hasBumpOffer:
          description: >-
            Specifies if the transaction has a bump offer.

            A bump offer is a discount, purchase bonus, deal, that is offered to
            the customer during checkout.
          type: boolean
          readOnly: true
        bumpOffer:
          description: >-
            Bump offer information.

            If the transaction does not have an associated bump offer, this
            value is `null`.
          type:
            - object
            - 'null'
          readOnly: true
          properties:
            order:
              description: Initial amount and currency.
              $ref: '#/components/schemas/Money'
            version:
              type: string
              description: |-
                Name of the version selected.
                This field is useful to measure split tests.
            language:
              description: |-
                Language in which the bump offer displays to the user.
                This field in useful to find translation issues.
              $ref: '#/components/schemas/LanguageIsoCode'
            outcome:
              type: string
              readOnly: true
              description: Status of the bump offer.
              enum:
                - presented
                - rejected
                - selected
                - unknown
            presentedOffers:
              type: array
              readOnly: true
              description: Offers presented to a customer.
              minItems: 1
              items:
                $ref: '#/components/schemas/PurchaseBumpOffer'
            selectedOffer:
              readOnly: true
              description: |-
                Offer selected by a customer.
                If a bump offer outcome is not `selected`, this value is `null`.
              allOf:
                - $ref: '#/components/schemas/PurchaseBumpOffer'
        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`.
        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:
                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'
        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'
        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
        - dob-mismatch
        - name-mismatch
        - critical-info-missing
        - old-address-on-id
        - tampered-document
        - other
    KycDocumentRejection:
      description: Reason the document is rejected.
      type:
        - object
        - 'null'
      readOnly: true
      properties:
        type:
          $ref: '#/components/schemas/KycDocumentRejectionReasonTypes'
        message:
          description: KYC document rejection message.
          type: string
          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
        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:
        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
      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
      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
        - recurringInterval
      properties:
        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
          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`.
          oneOf:
            - $ref: '#/components/schemas/PlanTrial'
            - type: 'null'
        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:
        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:
      allOf:
        - type: object
          properties:
            id:
              type: string
              description: ID of the plan.
              maxLength: 50
              example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
              readOnly: true
        - 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'
    QuoteCreateOrder:
      type: object
      title: QuoteCreateOrder
      required:
        - websiteId
        - customerId
        - items
        - action
      properties:
        id:
          readOnly: true
          description: ID of the quote.
          type: string
          maxLength: 50
          example: qt_01HXBZMEGPETPHJZH6V4RHBMA8
        type:
          description: |-
            Specifies the type of the quote.
            A quote can be a subscription or a one-time purchase.
          type: string
          readOnly: true
          enum:
            - subscription-order
            - one-time-order
        action:
          description: >-
            Action of the quote.

            When a quote is accepted, a new order is created.

            The `subscriptionId` value is filled with a new generated value from
            the order.
          type: string
          enum:
            - create
          example: create
        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
        subscriptionId:
          description: ID of the related subscription or one-time purchase.
          readOnly: true
          type:
            - string
            - 'null'
          maxLength: 50
        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 canceled the quote.
            expired: Expired before customer or organization interaction.
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        items:
          type: array
          description: Items included in the quote.
          minItems: 1
          items:
            type: object
            required:
              - plan
              - quantity
            properties:
              id:
                description: ID of the quote item.
                readOnly: true
                type: string
                example: qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY
              quantity:
                description: Number of product units in the specified plan.
                type: integer
                minimum: 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:
                type:
                  - object
                  - 'null'
                default: null
                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 fired.

                      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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
                  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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
              createdTime:
                $ref: '#/components/schemas/CreatedTime'
              updatedTime:
                $ref: '#/components/schemas/UpdatedTime'
              _embedded:
                type: object
                description: >-
                  Embedded objects that are requested by the `expand` query
                  parameter.
                readOnly: true
                properties:
                  product:
                    type: object
        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
        autopay:
          type: boolean
          default: false
          description: >-
            Specifies if payment attempts for the related subscription 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.
        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
        shipping:
          $ref: '#/components/schemas/Shipping'
        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
            subscription:
              type: object
            invoice:
              type: object
    QuoteChangeOrder:
      type: object
      title: QuoteChangeOrder
      required:
        - websiteId
        - customerId
        - items
        - action
        - subscriptionId
      properties:
        id:
          readOnly: true
          description: ID of the quote.
          type: string
          maxLength: 50
          example: qt_01HXBZMEGPETPHJZH6V4RHBMA8
        type:
          description: |-
            Specifies the type of the quote.
            A quote can be a subscription or a one-time purchase.
          type: string
          readOnly: true
          enum:
            - subscription-order
            - one-time-order
        action:
          description: >-
            Action of the quote for change order items.

            When a quote is accepted, quote items are applied to the related
            order.
          type: string
          enum:
            - change
          example: change
        acceptanceConditions:
          type: array
          writeOnly: true
          description: >-
            Conditions that must be met for the quote to be automatically
            accepted.
          items:
            type: string
            enum:
              - customer
              - payment
            x-enumDescriptions:
              customer: Quote can be accepted by customer.
              payment: Related invoice must be paid in full.
          example:
            - payment
          default:
            - customer
        acceptanceFulfillment:
          type: array
          readOnly: true
          description: List of `acceptanceConditions` with fulfillment status.
          items:
            type: object
            properties:
              condition:
                type: string
                enum:
                  - customer
                  - payment
                  - organization
              isFulfilled:
                type: boolean
        subscriptionId:
          description: ID of the related subscription.
          type: string
          maxLength: 50
          example: sub_01HRF27SATGE4Z6PBJE6PD8328
        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 the related order item changes are
              applied.
            rejected: Customer rejected the quote.
            canceled: Organization canceled the quote.
            expired: Expired before customer or organization interaction.
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        items:
          type: array
          description: Items included in the quote.
          minItems: 1
          items:
            type: object
            required:
              - plan
              - quantity
            properties:
              id:
                description: ID of the quote item.
                readOnly: true
                type: string
                example: qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY
              quantity:
                description: Number of product units in the specified plan.
                type: integer
                minimum: 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:
                type:
                  - object
                  - 'null'
                default: null
                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 fired.

                      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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
                  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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
              createdTime:
                $ref: '#/components/schemas/CreatedTime'
              updatedTime:
                $ref: '#/components/schemas/UpdatedTime'
              _embedded:
                type: object
                description: >-
                  Embedded objects that are requested by the `expand` query
                  parameter.
                readOnly: true
                properties:
                  product:
                    type: object
        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 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 subscription 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.
        usageSettings:
          type: array
          default: []
          description: Usage settings for items with metered billing.
          items:
            type: object
            properties:
              planId:
                type: string
                description: ID of the plan from which usages are transferred.
                example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
              policy:
                type: string
                enum:
                  - reset
                  - transfer
                description: Policy for removed items that have a metered billing plan.
                x-enumDescriptions:
                  reset: Delete existing usages.
                  transfer: >-
                    Transfer usages from removed plans to existing plans that
                    are in the same subscription, using the `transferTo` field.
              transferTo:
                type:
                  - string
                  - 'null'
                default: null
                description: >-
                  ID of the plan to which usages are transferred.

                  If an item with a specified plan does not exist, or does not
                  have a metered billing plan, this transfer is ignored.
                example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
        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
        autopay:
          type:
            - boolean
            - 'null'
          description: >-
            Specifies if payment attempts for the related subscription 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.
        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
        shipping:
          $ref: '#/components/schemas/Shipping'
        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
            subscription:
              type: object
            invoice:
              type: object
    QuoteReactivateOrder:
      type: object
      title: QuoteReactivateOrder
      required:
        - websiteId
        - customerId
        - items
        - action
        - subscriptionId
      properties:
        id:
          readOnly: true
          description: ID of the quote.
          type: string
          maxLength: 50
          example: qt_01HXBZMEGPETPHJZH6V4RHBMA8
        type:
          description: |-
            Specifies the type of the quote.
            A quote can be a subscription or a one-time purchase.
          type: string
          readOnly: true
          enum:
            - subscription-order
            - one-time-order
        action:
          description: >-
            Action of the quote for churned or canceled order reactivation.

            When a quote is accepted, quote items are applied to the order and
            order is reactivated.
          type: string
          enum:
            - reactivate
          example: reactivate
        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
        subscriptionId:
          description: ID of the related subscription.
          type: string
          maxLength: 50
          example: sub_01HRF27SATGE4Z6PBJE6PD8328
        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 the related order is reactivated.
            rejected: Customer rejected the quote.
            canceled: Organization canceled the quote.
            expired: Expired before customer or organization interaction.
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        items:
          type: array
          description: Items included in the quote.
          minItems: 1
          items:
            type: object
            required:
              - plan
              - quantity
            properties:
              id:
                description: ID of the quote item.
                readOnly: true
                type: string
                example: qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY
              quantity:
                description: Number of product units in the specified plan.
                type: integer
                minimum: 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:
                type:
                  - object
                  - 'null'
                default: null
                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 fired.

                      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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
                  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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
              createdTime:
                $ref: '#/components/schemas/CreatedTime'
              updatedTime:
                $ref: '#/components/schemas/UpdatedTime'
              _embedded:
                type: object
                description: >-
                  Embedded objects that are requested by the `expand` query
                  parameter.
                readOnly: true
                properties:
                  product:
                    type: object
        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
            - 'null'
          format: date-time
        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
            - 'null'
          format: date-time
        paymentInstrumentId:
          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
        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
        autopay:
          type:
            - boolean
            - 'null'
          description: >-
            Specifies if payment attempts for the related subscription 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.
        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
        shipping:
          $ref: '#/components/schemas/Shipping'
        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
            subscription:
              type: object
            invoice:
              type: object
    QuoteTrialConversionOrder:
      type: object
      title: QuoteTrialConversionOrder
      required:
        - websiteId
        - customerId
        - items
        - action
        - subscriptionId
      properties:
        id:
          readOnly: true
          description: ID of the quote.
          type: string
          maxLength: 50
          example: qt_01HXBZMEGPETPHJZH6V4RHBMA8
        type:
          description: |-
            Specifies the type of the quote.
            A quote can be a subscription or a one-time purchase.
          type: string
          readOnly: true
          enum:
            - subscription-order
            - one-time-order
        action:
          description: |-
            Action of the quote for an ended trial-only subscription.
            When a quote is accepted, the related order is activated.
          type: string
          enum:
            - trial-only-conversion
          example: trial-only-conversion
        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
        subscriptionId:
          description: ID of the related order.
          type: string
          maxLength: 50
        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 the related order item changes are
              applied.
            rejected: Customer rejected the quote.
            canceled: Organization canceled the quote.
            expired: Expired before customer or organization interaction.
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        items:
          type: array
          description: Items included in the quote.
          minItems: 1
          items:
            type: object
            required:
              - plan
              - quantity
            properties:
              id:
                description: ID of the quote item.
                readOnly: true
                type: string
                example: qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY
              quantity:
                description: Number of product units in the specified plan.
                type: integer
                minimum: 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:
                type:
                  - object
                  - 'null'
                default: null
                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 fired.

                      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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
                  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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
              createdTime:
                $ref: '#/components/schemas/CreatedTime'
              updatedTime:
                $ref: '#/components/schemas/UpdatedTime'
              _embedded:
                type: object
                description: >-
                  Embedded objects that are requested by the `expand` query
                  parameter.
                readOnly: true
                properties:
                  product:
                    type: object
        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
        autopay:
          type:
            - boolean
            - 'null'
          description: >-
            Specifies if payment attempts for the related subscription 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.
        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
        shipping:
          $ref: '#/components/schemas/Shipping'
        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: action
        mapping:
          create: '#/components/schemas/QuoteCreateOrder'
          change: '#/components/schemas/QuoteChangeOrder'
          reactivate: '#/components/schemas/QuoteReactivateOrder'
          trial-only-conversion: '#/components/schemas/QuoteTrialConversionOrder'
      oneOf:
        - $ref: '#/components/schemas/QuoteCreateOrder'
        - $ref: '#/components/schemas/QuoteChangeOrder'
        - $ref: '#/components/schemas/QuoteReactivateOrder'
        - $ref: '#/components/schemas/QuoteTrialConversionOrder'
    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:
          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 fired.

                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: 1
                amount:
                  type: number
                  format: double
                  description: Usage limit amount in the currency of the order.
                  minimum: 0.01
            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: 1
                amount:
                  type: number
                  format: double
                  description: Usage limit amount in the currency of the order.
                  minimum: 0.01
        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.
        _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
        trialReminderTime:
          description: Date and time when the trial reminder event triggers.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        trialReminderNumber:
          description: Number of triggered trial 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: >-
            Specifies if a subscription had trial conversion.

            Trial conversion is when at least one successful payment is made on
            the subscription after a trial.
          type: boolean
          readOnly: true
          example: 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
        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
          x-badges:
            - name: Experimental
        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:
                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 fired.

                      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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
                  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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
        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:
          x-badges:
            - name: Experimental
          description: Filled quantity of the subscription item (experimental property).
          type: integer
    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
        - churnTimePolicy
      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.
          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
        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'
    AllowedIps:
      description: |-
        List of IP addresses that are permitted access.
        Private subnets are prohibited.
        To remove restrictions, set this value to `null`.
      type:
        - array
        - 'null'
      items:
        type: string
        format: ip
      example:
        - 153.12.32.33
        - 201.54.122.0/24
        - 76.*.*.*
        - 2001:0db8:abcd:0012:0000:0000:0000:ffff
        - 2001:db8:abcd:12::0/64
    ApiKey:
      type: object
      description: API secret Key.
      required:
        - description
      properties:
        id:
          type: string
          readOnly: true
          description: ID of the API key.
          maxLength: 50
          example: api_key_0YV7JQMY6ED2FBE58BMFHBWBZH
        description:
          description: API key description.
          type: string
        type:
          description: Type of API key.
          type: string
          default: secret
          enum:
            - secret
            - publishable
        acl:
          description: >-
            Specify access control list here if creating a restricted API key.
            Send all matching permission with an empty scope to allow all
            permissions.
          $ref: '#/components/schemas/Acl'
        allowedIps:
          $ref: '#/components/schemas/AllowedIps'
        apiUser:
          description: API user name.
          type: string
          readOnly: true
        secretKey:
          description: API secret key's value.
          type: string
          readOnly: true
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    ChargeTransaction:
      type: object
      required:
        - type
      properties:
        id:
          type: string
          description: ID of the balance transaction.
          readOnly: true
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        type:
          description: Type of balance transaction.
          type: string
          readOnly: true
          enum:
            - charge
        parentId:
          description: >-
            ID of the parent entry if one exists.


            Some types of transactions relate to parent transactions.

            For example, a `risk-reserve` relates to a `charge`, and a
            `risk-reserve-release` relates a to `risk-reserve`.
          type:
            - string
            - 'null'
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        transactionId:
          description: ID of the related transaction.
          $ref: '#/components/schemas/TransactionId'
        settlementCurrency:
          $ref: '#/components/schemas/CurrencyCode'
        settlementAmount:
          x-type: Money
          x-currency-field: settlementCurrency
          x-sortable: true
          x-basic: true
          description: Amount of the settlement.
          type:
            - number
            - 'null'
          format: double
        settlementTime:
          description: Date and time of the expected settlement.
          $ref: '#/components/schemas/ServerTimestamp'
        settlementRate:
          description: |-
            If the settlement currency does not match the transaction currency.
            This field displays the exchange rate of the settlement.
          type:
            - number
            - 'null'
          format: double
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    RefundTransaction:
      type: object
      required:
        - type
      properties:
        id:
          type: string
          description: ID of the balance transaction.
          readOnly: true
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        type:
          description: Type of balance transaction.
          type: string
          readOnly: true
          enum:
            - refund
        parentId:
          description: >-
            ID of the parent entry if one exists.


            Some types of transactions relate to parent transactions.

            For example, a `risk-reserve` relates to a `charge`, and a
            `risk-reserve-release` relates a to `risk-reserve`.
          type:
            - string
            - 'null'
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        transactionId:
          description: ID of the related transaction.
          $ref: '#/components/schemas/TransactionId'
        settlementCurrency:
          $ref: '#/components/schemas/CurrencyCode'
        settlementAmount:
          x-type: Money
          x-currency-field: settlementCurrency
          x-sortable: true
          x-basic: true
          description: Amount of the settlement.
          type:
            - number
            - 'null'
          format: double
        settlementTime:
          description: Date and time of the expected settlement.
          $ref: '#/components/schemas/ServerTimestamp'
        settlementRate:
          description: |-
            If the settlement currency does not match the transaction currency.
            This field displays the exchange rate of the settlement.
          type:
            - number
            - 'null'
          format: double
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    BuyFeeTransaction:
      type: object
      required:
        - type
      properties:
        id:
          type: string
          description: ID of the balance transaction.
          readOnly: true
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        type:
          description: Type of balance transaction.
          type: string
          readOnly: true
          enum:
            - buy-fee
        fee:
          type: object
          properties:
            name:
              description: Name of the fee.
              type: string
        parentId:
          description: >-
            ID of the parent entry if one exists.


            Some types of transactions relate to parent transactions.

            For example, a `risk-reserve` relates to a `charge`, and a
            `risk-reserve-release` relates a to `risk-reserve`.
          type:
            - string
            - 'null'
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        transactionId:
          description: ID of the related transaction.
          $ref: '#/components/schemas/TransactionId'
        settlementCurrency:
          $ref: '#/components/schemas/CurrencyCode'
        settlementAmount:
          x-type: Money
          x-currency-field: settlementCurrency
          x-sortable: true
          x-basic: true
          description: Amount of the settlement.
          type:
            - number
            - 'null'
          format: double
        settlementTime:
          description: Date and time of the expected settlement.
          $ref: '#/components/schemas/ServerTimestamp'
        settlementRate:
          description: |-
            If the settlement currency does not match the transaction currency.
            This field displays the exchange rate of the settlement.
          type:
            - number
            - 'null'
          format: double
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    SellFeeTransaction:
      type: object
      required:
        - type
      properties:
        id:
          type: string
          description: ID of the balance transaction.
          readOnly: true
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        type:
          description: Type of balance transaction.
          type: string
          readOnly: true
          enum:
            - sell-fee
        fee:
          type: object
          properties:
            name:
              description: Name of the fee.
              type: string
        parentId:
          description: >-
            ID of the parent entry if one exists.


            Some types of transactions relate to parent transactions.

            For example, a `risk-reserve` relates to a `charge`, and a
            `risk-reserve-release` relates a to `risk-reserve`.
          type:
            - string
            - 'null'
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        transactionId:
          description: ID of the related transaction.
          $ref: '#/components/schemas/TransactionId'
        settlementCurrency:
          $ref: '#/components/schemas/CurrencyCode'
        settlementAmount:
          x-type: Money
          x-currency-field: settlementCurrency
          x-sortable: true
          x-basic: true
          description: Amount of the settlement.
          type:
            - number
            - 'null'
          format: double
        settlementTime:
          description: Date and time of the expected settlement.
          $ref: '#/components/schemas/ServerTimestamp'
        settlementRate:
          description: |-
            If the settlement currency does not match the transaction currency.
            This field displays the exchange rate of the settlement.
          type:
            - number
            - 'null'
          format: double
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    RiskReserveTransaction:
      type: object
      required:
        - type
      properties:
        id:
          type: string
          description: ID of the balance transaction.
          readOnly: true
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        type:
          description: Type of balance transaction.
          type: string
          readOnly: true
          enum:
            - risk-reserve
        riskReserve:
          type: object
          properties:
            releaseTime:
              description: Time of risk reserve release.
              type:
                - string
                - 'null'
              format: date-time
              readOnly: true
        parentId:
          description: >-
            ID of the parent entry if one exists.


            Some types of transactions relate to parent transactions.

            For example, a `risk-reserve` relates to a `charge`, and a
            `risk-reserve-release` relates a to `risk-reserve`.
          type: string
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        transactionId:
          description: ID of the related transaction.
          $ref: '#/components/schemas/TransactionId'
        settlementCurrency:
          $ref: '#/components/schemas/CurrencyCode'
        settlementAmount:
          x-type: Money
          x-currency-field: settlementCurrency
          x-sortable: true
          x-basic: true
          description: Amount of the settlement.
          type:
            - number
            - 'null'
          format: double
        settlementTime:
          description: Date and time of the expected settlement.
          $ref: '#/components/schemas/ServerTimestamp'
        settlementRate:
          description: |-
            If the settlement currency does not match the transaction currency.
            This field displays the exchange rate of the settlement.
          type:
            - number
            - 'null'
          format: double
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    RiskReserveReleaseTransaction:
      type: object
      required:
        - type
      properties:
        id:
          type: string
          description: ID of the balance transaction.
          readOnly: true
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        type:
          description: Type of balance transaction.
          type: string
          readOnly: true
          enum:
            - risk-reserve-release
        parentId:
          description: >-
            ID of the parent entry if one exists.


            Some types of transactions relate to parent transactions.

            For example, a `risk-reserve` relates to a `charge`, and a
            `risk-reserve-release` relates a to `risk-reserve`.
          type: string
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        transactionId:
          description: ID of the related transaction.
          $ref: '#/components/schemas/TransactionId'
        settlementCurrency:
          $ref: '#/components/schemas/CurrencyCode'
        settlementAmount:
          x-type: Money
          x-currency-field: settlementCurrency
          x-sortable: true
          x-basic: true
          description: Amount of the settlement.
          type:
            - number
            - 'null'
          format: double
        settlementTime:
          description: Date and time of the expected settlement.
          $ref: '#/components/schemas/ServerTimestamp'
        settlementRate:
          description: |-
            If the settlement currency does not match the transaction currency.
            This field displays the exchange rate of the settlement.
          type:
            - number
            - 'null'
          format: double
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    ReverseTransaction:
      type: object
      required:
        - type
      properties:
        id:
          type: string
          description: ID of the balance transaction.
          readOnly: true
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        type:
          description: Type of balance transaction.
          type: string
          readOnly: true
          enum:
            - reverse
        parentId:
          description: >-
            ID of the parent entry if one exists.


            Some types of transactions relate to parent transactions.

            For example, a `risk-reserve` relates to a `charge`, and a
            `risk-reserve-release` relates a to `risk-reserve`.
          type: string
          maxLength: 50
          example: btxn_0YVCNJYRXTDDQ9QF2Z60ZA05WP
        transactionId:
          description: ID of the related transaction.
          $ref: '#/components/schemas/TransactionId'
        settlementCurrency:
          $ref: '#/components/schemas/CurrencyCode'
        settlementAmount:
          x-type: Money
          x-currency-field: settlementCurrency
          x-sortable: true
          x-basic: true
          description: Amount of the settlement.
          type:
            - number
            - 'null'
          format: double
        settlementTime:
          description: Date and time of the expected settlement.
          $ref: '#/components/schemas/ServerTimestamp'
        settlementRate:
          description: |-
            If the settlement currency does not match the transaction currency.
            This field displays the exchange rate of the settlement.
          type:
            - number
            - 'null'
          format: double
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    BalanceTransaction:
      type: object
      title: Balance transaction
      discriminator:
        propertyName: type
        mapping:
          charge: '#/components/schemas/ChargeTransaction'
          refund: '#/components/schemas/RefundTransaction'
          buy-fee: '#/components/schemas/BuyFeeTransaction'
          sell-fee: '#/components/schemas/SellFeeTransaction'
          risk-reserve: '#/components/schemas/RiskReserveTransaction'
          risk-reserve-release: '#/components/schemas/RiskReserveReleaseTransaction'
          reverse: '#/components/schemas/ReverseTransaction'
      oneOf:
        - $ref: '#/components/schemas/ChargeTransaction'
        - $ref: '#/components/schemas/RefundTransaction'
        - $ref: '#/components/schemas/BuyFeeTransaction'
        - $ref: '#/components/schemas/SellFeeTransaction'
        - $ref: '#/components/schemas/RiskReserveTransaction'
        - $ref: '#/components/schemas/RiskReserveReleaseTransaction'
        - $ref: '#/components/schemas/ReverseTransaction'
    BillingPortal:
      type: object
      required:
        - websiteId
        - slug
        - name
      properties:
        id:
          type: string
          description: ID of the billing portal.
          readOnly: true
          maxLength: 50
          example: bill_prt_0YV7K5TYV5D1P9ZNKDT39KZC3C
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        slug:
          description: >-
            Path segment that is appended to the billing portal URL to help make
            it human-readable.

            Example: `https://example.com/billing-portal/{slug}`.
          type: string
          minLength: 5
          maxLength: 100
        name:
          description: >-
            Billing portal name.

            This name is for internal use and helps you to organize and
            differentiate billing portals.

            This value is not displayed to your customers.
          type: string
        customDomain:
          description: |-
            Custom domain for the billing portal.
            The default domain is: `portal.secure-payments.app`.
          type:
            - string
            - 'null'
          maxLength: 255
        features:
          description: Features that can be enabled for the billing portal.
          type: object
          properties:
            authenticateWithPassword:
              description: Specifies if a customer can authenticate with a password.
              type: boolean
              default: true
            orderCancel:
              description: Specifies if a customer can cancel an order.
              type: boolean
              default: true
            orderAddressEdit:
              description: Specifies if a customer can change an order address.
              type: boolean
              default: true
            paymentInstrumentAdd:
              description: Specifies if a customer can add a new payment instrument.
              type: boolean
              default: true
            paymentInstrumentUpdate:
              description: Specifies if a customer can update their payment instruments.
              type: boolean
              default: true
            paymentInstrumentDeactivate:
              description: Specifies if a customer can disable their payment instruments.
              type: boolean
              default: true
        customization:
          description: Visual customization options for the billing portal.
          type: object
          properties:
            logoId:
              type:
                - string
                - 'null'
              description: File ID of the billing portal logo.
              maxLength: 50
              example: 4f6cf35x-2c4y-483z-a0a9-158621f77a21
            colors:
              description: Various colors used in the billing portal.
              type: object
              properties:
                primary:
                  description: Primary color for the billing portal in hexadecimal format.
                  type: string
                  maxLength: 6
                  default: 0044d4
                secondary:
                  description: >-
                    Secondary color for the billing portal in hexadecimal
                    format.
                  type: string
                  maxLength: 6
                  default: ffffff
            links:
              description: URLs that are displayed in the billing portal.
              type: object
              properties:
                refundPolicy:
                  description: Website refund policy URL.
                  type:
                    - string
                    - 'null'
                  format: url
                privacyPolicy:
                  description: Website privacy policy URL.
                  type:
                    - string
                    - 'null'
                  format: url
                termsOfService:
                  description: Website terms of service URL.
                  type:
                    - string
                    - 'null'
                  format: url
        status:
          description: |-
            Status of the billing portal. If the status is `inactive`,
            the billing portal URL results in a 404 error.
          type: string
          enum:
            - active
            - inactive
          default: active
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    BroadcastMessage:
      type: object
      required:
        - startSendingTime
        - messages
      properties:
        id:
          type: string
          description: ID of the broadcast message.
          readOnly: true
          maxLength: 50
          example: mail_bcst_0YV8XW5EXWDVEAP64XP8CY2X40
        filter:
          type:
            - string
            - 'null'
          description: >-
            Use this filter to select customers during broadcast message
            processing.


            This field uses the same syntax as the `query` filter,

            but without the `filter=` prefix. Examples: `firstName:John`,
            `firstName:John;lastName:Doe`.


            > **Important**: Do not URL encode the filter value.
          example: firstName:John;lastName:Doe
        title:
          type: string
          description: Title of the message. This title displays in reports.
        messages:
          type: array
          description: List of messages.
          minItems: 1
          items:
            type: object
            properties:
              id:
                type: string
                format: uuid
                description: ID of the message.
              version:
                type: string
                description: >-
                  Version number of the message.

                  Use this field to distinguish between multiple messages by
                  name and version number.

                  If there are no versions, this field is empty.
              weight:
                type: integer
                description: >-
                  Weight distribution value that is assigned to a template for a
                  split test.

                  Each template in a split test can be assigned a weight.

                  The higher the weight value, the more likely the message
                  template is used.


                  The split test algorithm does not assess locale when making a
                  weighted template selection.
                minimum: 0
                maximum: 100
                example: 75
                default: 100
              templates:
                description: >-
                  Split test templates.


                  Use split tests to determine which content is most effective.

                  Split tests send variations of the same message to different
                  customers or leads.

                  You can then send the winning message to the remaining
                  customers or leads.
                type: array
                minItems: 1
                items:
                  type: object
                  properties:
                    from:
                      type: string
                      description: >-
                        Email address of the sender.


                        > **Important:** This value must be a verified email
                        address.


                        To verify an email address:
                          1. [Create an email delivery setting](https://www.rebilly.com/catalog/all/email-delivery-settings/postemaildeliverysetting/).
                          In the response, you receive the email and a token.
                          1. [Verify the email delivery](https://www.rebilly.com/catalog/all/email-delivery-settings/putemaildeliverysettingsverification/) by passing the token as the path parameter.
                      maxLength: 254
                      example: example@example.com
                    subject:
                      type: string
                      description: >-
                        Subject of the message.

                        The use of template placeholders is permitted for this
                        field.
                      maxLength: 998
                      example: Demonstration subject
                    text:
                      type: string
                      description: >-
                        Text body of the message.

                        To use content from the `html` field, leave this field
                        empty.

                        The use of template placeholders is permitted for this
                        field.
                      example: Demonstration text
                    html:
                      type: string
                      description: >-
                        HTML body of the message.

                        To use content from the `text` field, leave this field
                        empty.

                        The use of template placeholders is permitted for this
                        field.
                      example: <p>Demonstration text</p>
                    locale:
                      type: string
                      description: >-
                        Language locale identifier in [RFC
                        5646](https://tools.ietf.org/html/rfc5646) format.
                      example: fr-FR
                  required:
                    - from
                    - subject
                    - text
                    - html
                    - locale
            required:
              - templates
        splitTestStartTime:
          readOnly: true
          type:
            - string
            - 'null'
          format: date-time
          description: Date and time when the split test messages are scheduled to send.
        startSendingTime:
          type: string
          format: date-time
          description: Date and time when the message is scheduled to send.
        status:
          readOnly: true
          type: string
          description: Status of the broadcast message.
          enum:
            - draft
            - sending
            - sent
            - archived
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    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'
        transactionId:
          type:
            - string
            - 'null'
          description: ID of the transaction that is used in the deposit request.
          deprecated: true
          readOnly: true
          maxLength: 50
          example: txn_0YVDTQJ8YWDGQACV2N2N5SPWQ0
        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
        _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'
    CheckoutFormFixedPlan:
      title: Fixed quantity
      type: object
      required:
        - planId
        - type
        - quantity
      properties:
        planId:
          type: string
          description: ID of the plan.
          maxLength: 50
          example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
        type:
          description: |-
            Type of plan. If this value is set to `fixed`,
            customers cannot choose the plan quantity.
            If this value is set to `variable`,
            customers can choose the plan quantity.
          type: string
          enum:
            - fixed
        quantity:
          description: Quantity of the plan.
          type: integer
          minimum: 1
    CheckoutFormVariablePlan:
      title: Variable quantity
      type: object
      required:
        - planId
        - type
        - quantity
      properties:
        planId:
          type: string
          description: ID of the plan.
          maxLength: 50
          example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
        type:
          description: |-
            Type of plan. If this value is set to `variable`,
            customers can choose the plan quantity.
            If this value is set to `fixed`,
            customers cannot choose the plan quantity.
          type: string
          enum:
            - variable
        quantity:
          description: Default plan quantity.
          type: integer
        minimum:
          description: Minimum plan quantity.
          type: integer
          minimum: 1
          default: 1
        multipleOf:
          description: Multiple by which the plan quantity increases.
          type: integer
          minimum: 1
          default: 1
        maximum:
          description: Maximum plan quantity.
          type: integer
          minimum: 1
          default: 100
    CheckoutFormPlan:
      type: object
      discriminator:
        propertyName: type
        mapping:
          fixed: '#/components/schemas/CheckoutFormFixedPlan'
          variable: '#/components/schemas/CheckoutFormVariablePlan'
      oneOf:
        - $ref: '#/components/schemas/CheckoutFormFixedPlan'
        - $ref: '#/components/schemas/CheckoutFormVariablePlan'
    CheckoutForm:
      type: object
      required:
        - name
        - websiteId
        - plans
      properties:
        id:
          type: string
          description: ID of the checkout form.
          readOnly: true
          maxLength: 50
          example: chkt_frm_0YV8XZ6174C2MBS5011SAZNMBP
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customDomain:
          description: Custom domain for the checkout form.
          type:
            - string
            - 'null'
          maxLength: 255
        plans:
          type: array
          description: >-
            List of plans that are applied to a customer order by default.

            Plans describe how the customer must pay for products. For more
            information, see
            [Plans](https://www.rebilly.com/docs/dev-docs/api/plans/).
          minItems: 1
          items:
            $ref: '#/components/schemas/CheckoutFormPlan'
        addonPlans:
          type: array
          description: >-
            List of add-on plans that are displayed to the customer on the
            payment screen.

            Add-ons are plans that the customer has not already subscribed to.


            The customer selects whether to add an add-on plan to their current
            order.
          default: []
          items:
            $ref: '#/components/schemas/CheckoutFormPlan'
        bumpPlans:
          type: array
          description: >-
            List of bump plans that are displayed to the customer on the payment
            screen.

            Use bump plans to offer purchase bonuses, discounts, and deals to
            the customer.


            The customer selects whether to purchase bump plans,

            or to use the plans that are specified in their current order.
          default: []
          items:
            $ref: '#/components/schemas/CheckoutFormPlan'
        accountsEnabled:
          description: >-
            Specifies if the account is enabled.

            If this value is `true`, the customer can sign-up and sign-in using
            the checkout form.
          type: boolean
          default: false
        couponsEnabled:
          description: >-
            Specifies if coupons are enabled in the checkout form.

            If this value is `true`, the customer can use coupons in the
            checkout form.

            Use coupons to reward customers, generate sales, or to test new
            pricing strategies.
          type: boolean
          default: false
        purchaseLimit:
          description: >-
            Limits the number of purchases that can be made using a specific
            checkout form.

            If a purchase limit value is set, each purchase decreases this
            value.

            When the purchases limit value reaches zero, the checkout form
            becomes inactive.
          type:
            - integer
            - 'null'
          minimum: 0
          default: null
        paymentMethods:
          description: |-
            List of available payment methods.
            Payment methods must have at least one active gateway account.
            If not specified, all available payment methods are displayed.
          type: array
          items:
            $ref: '#/components/schemas/PaymentMethod'
        customization:
          description: Visual customization options for the checkout form.
          type: object
          properties:
            logoId:
              description: ID of the linked file object.
              type:
                - string
                - 'null'
              maxLength: 50
              example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
            summary:
              description: Summary text.
              type:
                - string
                - 'null'
            buttonText:
              description: >-
                Button text. Use the `{{amount}}` placeholder to display the
                checkout form total.
              type: string
              default: Pay {{amount}}
            colors:
              description: Primary color used in the checkout form and button text.
              type: object
              properties:
                primary:
                  description: Primary color for the checkout form in hexadecimal format.
                  type: string
                  maxLength: 6
                  default: 0044d4
                buttonText:
                  description: >-
                    Button text color for the checkout form in hexadecimal
                    format.
                  type: string
                  maxLength: 6
                  default: ffffff
            links:
              description: URLs that are displayed on the checkout form.
              type: object
              properties:
                refundPolicy:
                  description: Website refund policy URL.
                  type:
                    - string
                    - 'null'
                  format: url
                privacyPolicy:
                  description: Website privacy policy URL.
                  type:
                    - string
                    - 'null'
                  format: url
                termsOfService:
                  description: Website terms of service URL.
                  type:
                    - string
                    - 'null'
                  format: url
            tracking:
              description: Tracking system IDs.
              type: object
              properties:
                googleAnalytics:
                  description: Google Analytics tracking ID.
                  type:
                    - string
                    - 'null'
                  example: UA-XXXXX-YY
                googleTagManager:
                  description: Google Tag Manager tracking ID.
                  type:
                    - string
                    - 'null'
                  example: GTM-XXXXX
                gtagJs:
                  description: >-
                    Google Analytics tracking ID.

                    This value is used by Google Global Site Tag (gtag.js)
                    service.
                  type:
                    - string
                    - 'null'
                  example: UA-XXXXX-YY
                facebookPixel:
                  description: Facebook Pixel tracking ID.
                  type:
                    - string
                    - 'null'
                  example: '1234567890'
                segmentAnalytics:
                  description: Segment Analytics tracking ID.
                  type:
                    - string
                    - 'null'
                  example: '1234567890'
                heapIo:
                  description: Heap.io tracking ID.
                  type:
                    - string
                    - 'null'
                  example: '1234567890'
            requiredAdditionalFields:
              description: List of required fields.
              type: array
              items:
                type: string
              example:
                - information.companyName
                - information.phoneNumber
        name:
          description: >-
            Name of the checkout form.

            This name value is for internal display, and is not visible to your
            customers.

            Use this name to locate and organize your checkout forms.
          type: string
        status:
          description: |-
            Status of the checkout form. If the `status` value is `inactive`,
            the checkout form URL produces a 404 error.
          type: string
          enum:
            - active
            - inactive
          default: active
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - preview
    SmtpAuthorizationNone:
      type: object
      required:
        - type
      properties:
        type:
          type: string
          enum:
            - none
          default: none
    SmtpAuthorizationCramMd5:
      type: object
      properties:
        username:
          description: Authentication username.
          type: string
        password:
          description: Authentication password.
          type: string
          format: password
        type:
          type: string
          enum:
            - cram-md5
          default: none
      required:
        - username
        - password
        - type
    SmtpAuthorizationLogin:
      type: object
      properties:
        username:
          description: Authentication username.
          type: string
        password:
          description: Authentication password.
          type: string
          format: password
        type:
          type: string
          enum:
            - login
          default: none
      required:
        - username
        - password
        - type
    SmtpAuthorizationPlain:
      type: object
      properties:
        username:
          description: Authentication username.
          type: string
        password:
          description: Authentication password.
          type: string
          format: password
        type:
          type: string
          enum:
            - plain
          default: none
      required:
        - username
        - password
        - type
    SmtpAuthorization:
      type: object
      description: Authentication type and details.
      discriminator:
        propertyName: type
        mapping:
          none: '#/components/schemas/SmtpAuthorizationNone'
          cram-md5: '#/components/schemas/SmtpAuthorizationCramMd5'
          login: '#/components/schemas/SmtpAuthorizationLogin'
          plain: '#/components/schemas/SmtpAuthorizationPlain'
      oneOf:
        - $ref: '#/components/schemas/SmtpAuthorizationNone'
        - $ref: '#/components/schemas/SmtpAuthorizationCramMd5'
        - $ref: '#/components/schemas/SmtpAuthorizationLogin'
        - $ref: '#/components/schemas/SmtpAuthorizationPlain'
    SmtpCredential:
      type: object
      description: SMTP credential.
      required:
        - host
        - type
      properties:
        id:
          type: string
          description: ID of the credential.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        hash:
          deprecated: true
          type: string
          description: ID of the credential. Use `id` field instead.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        deactivationTime:
          description: Date and time when the credential is deactivated.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        type:
          description: Type of credential.
          type: string
          readOnly: true
          enum:
            - smtp
        host:
          type: string
          description: SMTP host name.
        port:
          type: integer
          description: SMTP port value.
          minimum: 1
          maximum: 65535
          default: 25
        encryption:
          type: string
          description: Encryption value.
          enum:
            - none
            - tls
            - ssl
          default: none
        auth:
          $ref: '#/components/schemas/SmtpAuthorization'
        _links:
          $ref: '#/components/schemas/SelfLink'
    WebhookAuthorizationNone:
      type: object
      properties:
        type:
          type: string
          description: Type of authorization.
          enum:
            - none
          default: none
      required:
        - type
    WebhookAuthorizationBasic:
      type: object
      properties:
        type:
          type: string
          description: Type of authorization.
          enum:
            - basic
          default: none
        username:
          description: Authentication username.
          type: string
        password:
          description: Authentication password.
          type: string
          format: password
      required:
        - username
        - password
        - type
    WebhookAuthorizationDigest:
      type: object
      properties:
        type:
          type: string
          description: Type of authorization.
          enum:
            - digest
          default: none
        username:
          description: Authentication username.
          type: string
        password:
          description: Authentication password.
          type: string
          format: password
      required:
        - username
        - password
        - type
    WebhookAuthorizationOAuth1:
      type: object
      properties:
        type:
          type: string
          description: Type of authorization.
          enum:
            - oauth1
          default: none
        consumerKey:
          description: Consumer key.
          type: string
        consumerSecret:
          description: Customer secret.
          type: string
        token:
          description: Authentication token.
          type: string
        tokenSecret:
          description: Secret token.
          type: string
      required:
        - consumerKey
        - consumerSecret
        - token
        - tokenSecret
        - type
    WebhookAuthorization:
      type: object
      description: Authentication type and details.
      discriminator:
        propertyName: type
        mapping:
          none: '#/components/schemas/WebhookAuthorizationNone'
          basic: '#/components/schemas/WebhookAuthorizationBasic'
          digest: '#/components/schemas/WebhookAuthorizationDigest'
          oauth1: '#/components/schemas/WebhookAuthorizationOAuth1'
      oneOf:
        - $ref: '#/components/schemas/WebhookAuthorizationNone'
        - $ref: '#/components/schemas/WebhookAuthorizationBasic'
        - $ref: '#/components/schemas/WebhookAuthorizationDigest'
        - $ref: '#/components/schemas/WebhookAuthorizationOAuth1'
    WebhookCredential:
      type: object
      description: Webhook credential.
      properties:
        id:
          type: string
          description: ID of the credential.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        hash:
          deprecated: true
          type: string
          description: ID of the credential. Use `id` field instead.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        deactivationTime:
          description: Date and time when the credential is deactivated.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        type:
          description: Type of credential.
          type: string
          readOnly: true
          enum:
            - webhook
        host:
          type: string
          description: Name of the host.
          pattern: ^[A-Za-z0-9-.]+$
          example: app-prod.example.com
        auth:
          $ref: '#/components/schemas/WebhookAuthorization'
      required:
        - host
        - type
    ExperianCredential:
      type: object
      description: >-
        Experian integration provides identity verification.

        For more information, see [Experian
        integration](https://www.rebilly.com/docs/automations/experian-integration/#experian-integration).
      required:
        - username
        - password
        - hmacKey
        - publicKey
        - type
      properties:
        id:
          type: string
          description: ID of the credential.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        hash:
          deprecated: true
          type: string
          description: ID of the credential. Use `id` field instead.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        deactivationTime:
          description: Date and time when the credential is deactivated.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        type:
          description: Type of credential.
          type: string
          readOnly: true
          enum:
            - experian
        username:
          type: string
          description: Username of the Experian account.
        password:
          type: string
          description: Password of the Experian account.
          format: password
        hmacKey:
          type: string
          description: >-
            HMAC key that is used to generate the signature for Experian
            requests.
          format: password
          example: PxOclToLSxW4oAB5N5HSdfoslyEWuvfkLjfHeNG2aZY~
        publicKey:
          type: string
          description: >-
            HMAC public key that is included in the signature for Experian
            requests.
          example: 8831AA5552FE10CD
        _links:
          $ref: '#/components/schemas/SelfLink'
    MailgunCredential:
      type: object
      description: Mailgun credential.
      required:
        - emailFrom
        - apiKey
        - domain
        - type
      properties:
        id:
          type: string
          description: ID of the credential.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        hash:
          deprecated: true
          type: string
          description: ID of the credential. Use `id` field instead.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        deactivationTime:
          description: Date and time when the credential is deactivated.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        type:
          description: Type of credential.
          type: string
          readOnly: true
          enum:
            - mailgun
        emailFrom:
          type: string
          format: email
          description: Address from which emails are sent.
        apiKey:
          type: string
          description: Mailgun API key.
        domain:
          type: string
          description: Mailgun domain.
        _links:
          $ref: '#/components/schemas/SelfLink'
    OAuth2Credential:
      type: object
      description: OAuth2 credential.
      required:
        - code
        - scopes
        - service
        - type
      properties:
        id:
          type: string
          description: ID of the credential.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        hash:
          deprecated: true
          type: string
          description: ID of the credential. Use `id` field instead.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        deactivationTime:
          description: Date and time when the credential is deactivated.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        type:
          description: Type of credential.
          type: string
          readOnly: true
          enum:
            - oauth2
        service:
          description: Name of the service to which the OAuth2 credential relates.
          type: string
          enum:
            - google-sheets
            - keap-infusionsoft
            - intuit-quickbooks
        code:
          description: OAuth2 code provided by the authentication server.
          type: string
          example: 2/smAHUUr9jOxw_IOp47Y_dH1r2Y
        accessToken:
          description: OAuth2 access token.
          readOnly: true
          type: string
          example: >-
            zw34.PltIPtJZHmEgZS9R4RoGpzaRrJd5MYjZIONQ2MjWSCj7N7Iqp9BXXFIbkhDRfAPs6cB1pKtTjLUgb3ofzgHUprJfnRiMDTnB_yPMK7vtgobCX4SUs7fhrR6bdApq
        refreshToken:
          description: OAuth2 refresh token.
          readOnly: true
          type: string
          example: 2/4DPERp2EiySF6JUIOTS4jM5f0JmLG2gPcpGaWYTGU94
        scopes:
          description: List of URLs that are granted OAuth2 access.
          type: array
          items:
            type: string
          example:
            - https://www.googleapis.com/auth/drive.metadata.readonly
        _links:
          $ref: '#/components/schemas/SelfLink'
    PostmarkCredential:
      type: object
      description: Postmark credential.
      required:
        - serverApiToken
        - type
      properties:
        id:
          type: string
          description: ID of the credential.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        hash:
          deprecated: true
          type: string
          description: ID of the credential. Use `id` field instead.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        deactivationTime:
          description: Date and time when the credential is deactivated.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        type:
          description: Type of credential.
          type: string
          readOnly: true
          enum:
            - postmark
        serverApiToken:
          type: string
          description: Postmark server API token.
          example: dd0508z9-2291-6794-3376-z0a70g12eqm9
        _links:
          $ref: '#/components/schemas/SelfLink'
    SendGridCredential:
      type: object
      description: SendGrid credential.
      required:
        - apiKey
        - type
      properties:
        id:
          type: string
          description: ID of the credential.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        hash:
          deprecated: true
          type: string
          description: ID of the credential. Use `id` field instead.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        deactivationTime:
          description: Date and time when the credential is deactivated.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        type:
          description: Type of credential.
          type: string
          readOnly: true
          enum:
            - sendgrid
        apiKey:
          type: string
          description: SendGrid API key.
          example: >-
            SO.WFbRlSWUQJSb40eny4RuZQ.7liHLZ4l1jaPCgbu02b-aGH-bo4RB8z9fK3aUd1heeL
        _links:
          $ref: '#/components/schemas/SelfLink'
    SESCredential:
      type: object
      description: Amazon Web Services (AWS) Simple Email Service (SES) credential.
      required:
        - key
        - secret
        - region
        - type
      properties:
        id:
          type: string
          description: ID of the credential.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        hash:
          deprecated: true
          type: string
          description: ID of the credential. Use `id` field instead.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        deactivationTime:
          description: Date and time when the credential is deactivated.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        type:
          description: Type of credential.
          type: string
          readOnly: true
          enum:
            - aws-ses
        key:
          type: string
          description: ID of the AWS access key.
          example: BWITYO4UARGDLMFY6UDP
        secret:
          type: string
          description: Secret AWS access key.
          example: 8D34yYHOK9+yM7pDnNUO3UTO/5b8Wy/PGNyzTRmG
        region:
          type: string
          description: AWS region name.
          example: us-west-2
        configurationSetName:
          type: string
          description: Name of configuration set from which emails are sent.
          example: SpecialConfigurationSet
        _links:
          $ref: '#/components/schemas/SelfLink'
    TaxJarCredential:
      type: object
      description: >-
        TaxJar integration enables you to calculate taxes and create
        transactions for the Sales Tax AutoFile feature in your TaxJar account.

        For more information, see [TaxJar
        integration](https://www.rebilly.com/docs/automations/tax-jar-integration/#taxjar-integration).
      required:
        - apiToken
        - type
      properties:
        id:
          type: string
          description: ID of the credential.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        hash:
          deprecated: true
          type: string
          description: ID of the credential. Use `id` field instead.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        deactivationTime:
          description: Date and time when the credential is deactivated.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        type:
          description: Type of credential.
          type: string
          readOnly: true
          enum:
            - taxjar
        apiToken:
          type: string
          description: TaxJar API token.
          format: password
          example: 0ab15e3c1cc608b6f592fbddaddeb8f2
        omitFromAddress:
          type: boolean
          description: >-
            Specifies if `from_` address fields must be omitted in TaxJar
            request.

            For more information, see [TaxJar API
            guide](https://developers.taxjar.com/api/guides/#when-to-use-from_-address-information).
          default: false
          example: false
        _links:
          $ref: '#/components/schemas/SelfLink'
    AvalaraCredential:
      type: object
      description: >-
        Avalara integration enables you to calculate taxes and create
        transactions in your Avalara account.
      required:
        - licenseKey
        - accountId
        - type
      properties:
        id:
          type: string
          description: ID of the credential.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        hash:
          deprecated: true
          type: string
          description: ID of the credential. Use `id` field instead.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        deactivationTime:
          description: Date and time when the credential is deactivated.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        type:
          description: Type of credential.
          type: string
          readOnly: true
          enum:
            - avalara
        licenseKey:
          type: string
          description: Avalara license key.
          format: password
          example: 0ab15e3c1cc608b6f592fbddaddeb8f2
        accountId:
          type: string
          description: ID of the Avalara account.
          example: a1b2c3d4e5f6
        _links:
          $ref: '#/components/schemas/SelfLink'
    PlaidCredential:
      type: object
      description: >-
        Plaid integration provides customer bank credential verification,

        and simplifies the process of providing credentials for your customers.

        For more information, see [Plaid
        integration](https://www.rebilly.com/docs/automations/plaid-integration/).
      required:
        - clientId
        - secretToken
        - type
      properties:
        id:
          type: string
          description: ID of the credential.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        hash:
          deprecated: true
          type: string
          description: ID of the credential. Use `id` field instead.
          readOnly: true
          maxLength: 36
          example: crd_0YV9Y706QGCB39FQD380G1ZHZH
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        deactivationTime:
          description: Date and time when the credential is deactivated.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        type:
          description: Type of credential.
          type: string
          readOnly: true
          enum:
            - plaid
        websiteId:
          type: string
          description: |-
            ID of the website that is assigned to the Plaid account.
            If this value is not set, credentials are for all websites.
          maxLength: 50
          example: web_0YV7DE4Z26DQSA1AC92FBJ7SEG
        clientId:
          type: string
          description: ID of the Plaid client.
          example: 5efc712byyf502zz11f9bexx
        secretToken:
          type: string
          description: Plaid secret token.
          format: password
          example: d184cfdgdb4597dfsa9365f59356b
        useStripe:
          type: boolean
          description: |-
            Specifies if a Stripe integration is enabled for the Plaid account.
            This setting enables the creation of Stripe bank account tokens.
          default: false
          example: true
        _links:
          $ref: '#/components/schemas/SelfLink'
    ServiceCredential:
      discriminator:
        propertyName: type
        mapping:
          smtp: '#/components/schemas/SmtpCredential'
          webhook: '#/components/schemas/WebhookCredential'
          experian: '#/components/schemas/ExperianCredential'
          mailgun: '#/components/schemas/MailgunCredential'
          oauth2: '#/components/schemas/OAuth2Credential'
          postmark: '#/components/schemas/PostmarkCredential'
          sendgrid: '#/components/schemas/SendGridCredential'
          aws-ses: '#/components/schemas/SESCredential'
          taxjar: '#/components/schemas/TaxJarCredential'
          avalara: '#/components/schemas/AvalaraCredential'
          plaid: '#/components/schemas/PlaidCredential'
      oneOf:
        - $ref: '#/components/schemas/SmtpCredential'
        - $ref: '#/components/schemas/WebhookCredential'
        - $ref: '#/components/schemas/ExperianCredential'
        - $ref: '#/components/schemas/MailgunCredential'
        - $ref: '#/components/schemas/OAuth2Credential'
        - $ref: '#/components/schemas/PostmarkCredential'
        - $ref: '#/components/schemas/SendGridCredential'
        - $ref: '#/components/schemas/SESCredential'
        - $ref: '#/components/schemas/TaxJarCredential'
        - $ref: '#/components/schemas/AvalaraCredential'
        - $ref: '#/components/schemas/PlaidCredential'
    PatchServiceCredential:
      type: object
      required:
        - status
      properties:
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
    PatchPlaidCredential:
      type: object
      description: Plaid credential.
      properties:
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        websiteId:
          type: string
          description: |-
            ID of the website that is assigned to the Plaid account.
            If this value is not set, credentials are for all websites.
          maxLength: 50
          example: web_0YV7DE4Z26DQSA1AC92FBJ7SEG
        clientId:
          type: string
          description: ID of the Plaid client.
          example: 5efc712byyf502zz11f9bexx
        secretToken:
          type: string
          description: Plaid secret token.
          format: password
          example: d184cfdgdb4597dfsa9365f59356b
        useStripe:
          type: boolean
          description: |-
            Specifies if a Stripe integration is enabled for the Plaid account.
            This setting enables the creation of Stripe bank account tokens.
          default: false
          example: true
    PatchTaxJarCredential:
      type: object
      description: TaxJar credential.
      required:
        - status
      properties:
        status:
          description: Status of the credential.
          type: string
          enum:
            - active
            - inactive
            - deactivated
          x-enumDescriptions:
            active: Credential is active and can be used.
            inactive: >-
              Credential is temporarily inactivated and cannot be used until
              reactivated.
            deactivated: Credential is permanently deactivated and cannot be reactivated.
        omitFromAddress:
          type: boolean
          description: >-
            Specifies if `from_` address fields must be omitted in TaxJar
            request.

            For more information, see [TaxJar API
            guide](https://developers.taxjar.com/api/guides/#when-to-use-from_-address-information).
          example: false
    GoogleSpreadsheet:
      type: object
      properties:
        id:
          description: ID of the Google Spreadsheet.
          readOnly: true
          type: string
          example: 2ytkMntAC2Ke7aIgpaOBjz9IORRlNRjwFqO7KvyNam3B
        name:
          readOnly: true
          description: Name of the Google Spreadsheet.
          type: string
          example: Spreadsheet 1
    CustomDomain:
      type: object
      required:
        - domain
      properties:
        id:
          description: ID of the custom domain.
          type: string
          maxLength: 255
          readOnly: true
        domain:
          description: Fully qualified domain name.
          type: string
          maxLength: 255
        isVerified:
          description: True if the domain is verified by Rebilly.
          type: boolean
          readOnly: true
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    EmailDeliverySetting:
      type: object
      required:
        - from
        - name
      properties:
        id:
          type: string
          description: ID of the email delivery setting.
          readOnly: true
          maxLength: 50
          example: mail_dst_0YVCNQV8PSCERAJ7N1V4WWPZN2
        from:
          description: >-
            Email address of the sender.


            > **Important:** This email address must be unique within your
            account.
          type: string
          format: email
          maxLength: 254
          example: from-example@rebilly.com
        name:
          description: Name of the sender.
          type: string
          example: John Doe
        status:
          description: Status of the email message.
          readOnly: true
          type: string
          enum:
            - pending
            - verified
        credentialId:
          type:
            - string
            - 'null'
          description: ID of the SMTP or Email Service Provider (ESP) credential.
          example: b120c2ca-6c2b-4690-9dff-3b0d87852dc7
        provider:
          readOnly: true
          description: Email service provider name.
          type: string
          enum:
            - rebilly
            - smtp
            - aws-ses
            - mailgun
            - postmark
            - sendgrid
          example: rebilly
        isDefault:
          type: boolean
          description: Specifies if the email delivery setting is used by default.
          default: false
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    EmailMessage:
      type: object
      required:
        - from
        - to
        - subject
        - text
        - html
      properties:
        id:
          type: string
          description: ID of the email message.
          readOnly: true
          maxLength: 50
          example: mail_msg_0YVCNR8ZRBCVMAX28DP4XRFZVA
        status:
          description: Status of the email message.
          type: string
          enum:
            - draft
            - outbox
            - sending
            - sent
            - failed
          default: draft
        metadata:
          description: Metadata associated with the email message.
          type:
            - object
            - 'null'
          additionalProperties:
            type: string
          example:
            eventType: subscription-canceled
        credentialHash:
          type:
            - string
            - 'null'
          description: ID of the SMTP or Email Service Provider (ESP) credential.
          example: b120c2ca-6c2b-4690-9dff-3b0d87852dc7
        from:
          description: Email address of the sender.
          type: string
          format: email
          maxLength: 254
          example: from-example@rebilly.com
        to:
          description: List of email addresses to which the email message is sent.
          type: array
          minItems: 1
          items:
            type: string
            format: email
            maxLength: 254
          example:
            - to-example@rebilly.com
        cc:
          description: List of CC email addresses to which the email message is sent.
          type: array
          items:
            type: string
            format: email
            maxLength: 254
          example:
            - cc-example@rebilly.com
        bcc:
          description: List of BCC email addresses to which the email message is sent.
          type: array
          items:
            type: string
            format: email
            maxLength: 254
          example:
            - cc-example@rebilly.com
        subject:
          description: Subject of the email message.
          type: string
          maxLength: 998
          example: Welcome dear customer!
        text:
          description: Body of the email message in plain text.
          type: string
          example: Email message text body
        html:
          description: Body of the email message in HTML format.
          type: string
          example: <p>Email message html body</p>
        attachments:
          description: Attachments of the email message.
          type: array
          items:
            type: object
            required:
              - resourceType
              - resourceId
            properties:
              resourceType:
                description: Type of attachment resource.
                type: string
                example: invoice
              resourceId:
                type: string
                description: ID of the attachment resource.
                maxLength: 50
                example: att_0YV7J787J0DW0918MQQMDHWA7M
        responseCode:
          type:
            - integer
            - 'null'
          description: >-
            Status code returned by a mail service after an attempt to send
            email.
          readOnly: true
          example: 250
        responseBody:
          type:
            - string
            - 'null'
          description: >-
            Body of response returned by a mail service after an attempt to send
            email.
          readOnly: true
        initiatedTime:
          type:
            - string
            - 'null'
          description: Date and time when the email is initiated.
          format: date-time
          readOnly: true
        sentTime:
          type:
            - string
            - 'null'
          description: Date and time when the email is sent.
          format: date-time
          readOnly: true
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    EventType:
      type: string
      description: Type of Rebilly event.
      readOnly: true
      enum:
        - account-password-reset-requested
        - account-verification-requested
        - aml-list-possibly-matched
        - application-instance-disabled
        - application-instance-enabled
        - balance-transaction-settled
        - coupon-application-removed
        - coupon-applied
        - coupon-expiration-modified
        - coupon-expired
        - coupon-issued
        - coupon-modified
        - coupon-redeemed
        - coupon-redemption-canceled
        - customer-created
        - customer-one-time-password-requested
        - customer-updated
        - dispute-created
        - dispute-modified
        - experian-check-performed
        - gateway-account-downtime-ended
        - gateway-account-downtime-started
        - gateway-account-limit-reached
        - gateway-account-onboarding-completed
        - gateway-account-onboarding-failed
        - gateway-account-requested
        - hard-usage-limit-reached
        - invoice-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
        - nsf-response-received
        - 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
        - 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-upgraded
        - transaction-amount-discrepancy-found
        - transaction-declined
        - transaction-discrepancy-found
        - transaction-process-requested
        - transaction-processed
        - order-delinquency-reached
        - autodeposit-lookup-performed
    EmailNotification:
      type: object
      description: Email notification event.
      readOnly: true
      properties:
        eventType:
          $ref: '#/components/schemas/EventType'
        count:
          type: integer
          readOnly: true
          description: Total number of binds with `send-email` actions per event.
        notifications:
          readOnly: true
          type: array
          description: List of notifications.
          items:
            type: object
            properties:
              labels:
                description: Labels of the notification.
                type: array
                items:
                  type: string
              title:
                type: string
                description: Title of the notification.
        _links:
          $ref: '#/components/schemas/SelfLink'
    SystemEvent:
      type: object
      description: Application event.
      readOnly: true
      properties:
        eventType:
          $ref: '#/components/schemas/EventType'
        title:
          description: Title of the system event.
          type: string
        description:
          description: Description of the system event.
          type: string
        category:
          description: Category of system event.
          type: string
          enum:
            - billing
            - payments
        rulesCount:
          description: >-
            Total number of rules associated with the system event.

            A rule is a configuration of an event and one or more actions.

            A rule can be configured to stop subsequent rules in the event list
            from being executed.
          type: integer
          readOnly: true
        bindsCount:
          description: |-
            Total number of binds associated with the system event.
            A bind is a configuration of an event and one or more actions.
          type: integer
          readOnly: true
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - history
                  - rules
    RuleAction:
      type: object
      discriminator:
        propertyName: name
        mapping:
          abandon-scheduled-payments: '#/components/schemas/RuleActionAbandonScheduledPayments'
          add-risk-score: '#/components/schemas/RuleActionAddRiskScore'
          adjust-ready-to-pay: '#/components/schemas/RuleActionAdjustReadyToPay'
          adjust-ready-to-payout: '#/components/schemas/RuleActionAdjustReadyToPayout'
          blocklist: '#/components/schemas/RuleActionAddBlockList'
          cancel-scheduled-payments: '#/components/schemas/RuleActionCancelScheduledPayments'
          create-intuit-quickbooks-balance-transaction-entry: >-
            #/components/schemas/RuleActionCreateIntuitQuickbooksBalanceTransactionEntry
          create-intuit-quickbooks-invoice: '#/components/schemas/RuleActionCreateIntuitQuickbooksInvoice'
          create-intuit-quickbooks-payment: '#/components/schemas/RuleActionCreateIntuitQuickbooksPayment'
          create-intuit-quickbooks-refund-receipt: '#/components/schemas/RuleActionCreateIntuitQuickbooksRefundReceipt'
          create-intuit-quickbooks-revenue-recognition-entry: >-
            #/components/schemas/RuleActionCreateIntuitQuickbooksRevenueRecognitionEntry
          create-keap-infusionsoft-order: '#/components/schemas/RuleActionCreateInfusionsoftOrder'
          create-keap-infusionsoft-payment: '#/components/schemas/RuleActionCreateInfusionsoftPayment'
          decline-transaction: '#/components/schemas/RuleActionDeclineTransaction'
          check-ontario-restriction: '#/components/schemas/RuleActionCheckOntarioRestriction'
          display-message: '#/components/schemas/RuleActionDisplayMessage'
          display-other-choices: '#/components/schemas/RuleActionDisplayOtherChoices'
          guess-payment-card-expiration: '#/components/schemas/RuleActionGuessPaymentCardExpiration'
          offer-purchase-bump: '#/components/schemas/RuleActionOfferPurchaseBump'
          perform-experian-check: '#/components/schemas/RuleActionPerformExperianCheck'
          pick-gateway-account: '#/components/schemas/RuleActionPickGatewayAccount'
          remove-reminder: '#/components/schemas/RuleActionRemoveReminder'
          request-kyc: '#/components/schemas/RuleActionRequestKyc'
          reset-reminder: '#/components/schemas/RuleActionResetReminder'
          schedule-invoice-retry: '#/components/schemas/RuleActionScheduleInvoiceRetry'
          schedule-payment: '#/components/schemas/RuleActionSchedulePayment'
          schedule-reminder: '#/components/schemas/RuleActionScheduleReminder'
          send-email: '#/components/schemas/RuleActionSendEmail'
          stop-subscriptions: '#/components/schemas/RuleActionStopSubscriptions'
          tag-or-untag-customer: '#/components/schemas/RuleActionTagOrUntagCustomer'
          update-intuit-quickbooks-invoice: '#/components/schemas/RuleActionUpdateIntuitQuickbooksInvoice'
          void-intuit-quickbooks-invoice: '#/components/schemas/RuleActionVoidIntuitQuickbooksInvoice'
      properties:
        name:
          type: string
          description: Name of the action.
          enum:
            - abandon-scheduled-payments
            - add-risk-score
            - adjust-ready-to-pay
            - blocklist
            - cancel-scheduled-payments
            - create-intuit-quickbooks-balance-transaction-entry
            - create-intuit-quickbooks-invoice
            - create-intuit-quickbooks-payment
            - create-intuit-quickbooks-refund-receipt
            - create-intuit-quickbooks-revenue-recognition-entry
            - create-keap-infusionsoft-order
            - create-keap-infusionsoft-payment
            - decline-transaction
            - check-ontario-restriction
            - display-message
            - display-other-choices
            - guess-payment-card-expiration
            - offer-purchase-bump
            - perform-experian-check
            - pick-gateway-account
            - remove-reminder
            - request-kyc
            - reset-reminder
            - schedule-invoice-retry
            - schedule-payment
            - schedule-reminder
            - send-email
            - stop-subscriptions
            - tag-or-untag-customer
            - update-intuit-quickbooks-invoice
            - void-intuit-quickbooks-invoice
        status:
          description: Status of the action.
          type: string
          default: active
          enum:
            - active
            - inactive
      required:
        - name
    RuleActionAbandonScheduledPayments:
      description: >-
        Abandon scheduled payments for an order that exceeds the configured
        delinquency period.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
    RuleActionAddRiskScore:
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          description: Add risk score.
          properties:
            score:
              type: integer
              default: 0
    AdjustReadyToPayPaymentCard:
      type: object
      title: Payment card
      properties:
        paymentMethod:
          type: string
          enum:
            - payment-card
        feature:
          type:
            - string
            - 'null'
          description: Name of the feature.
          enum:
            - Apple Pay
            - Google Pay
    AdjustReadyToPayAch:
      type: object
      title: ACH
      properties:
        paymentMethod:
          type: string
          enum:
            - ach
        feature:
          type:
            - string
            - 'null'
          description: Feature name.
          enum:
            - Plaid
    AdjustReadyToPayPaypal:
      type: object
      title: PayPal
      properties:
        paymentMethod:
          type: string
          enum:
            - paypal
        feature:
          type:
            - string
            - 'null'
          description: Feature name.
          enum:
            - PayPal billing agreement
    AdjustReadyToPayGeneric:
      type: object
      title: Generic
      properties:
        paymentMethod:
          description: Payment method of the payment instrument.
          allOf:
            - $ref: '#/components/schemas/AlternativePaymentMethods'
            - not:
                enum:
                  - paypal
        feature:
          type:
            - string
            - 'null'
    AdjustPaymentMethod:
      type: object
      required:
        - paymentMethod
        - feature
      discriminator:
        propertyName: paymentMethod
        mapping:
          payment-card: '#/components/schemas/AdjustReadyToPayPaymentCard'
          ach: '#/components/schemas/AdjustReadyToPayAch'
          paypal: '#/components/schemas/AdjustReadyToPayPaypal'
          cash: '#/components/schemas/AdjustReadyToPayGeneric'
          check: '#/components/schemas/AdjustReadyToPayGeneric'
          AdvCash: '#/components/schemas/AdjustReadyToPayGeneric'
          Alfa-click: '#/components/schemas/AdjustReadyToPayGeneric'
          Alipay: '#/components/schemas/AdjustReadyToPayGeneric'
          AstroPay Card: '#/components/schemas/AdjustReadyToPayGeneric'
          AstroPay-GO: '#/components/schemas/AdjustReadyToPayGeneric'
          BankReferenced: '#/components/schemas/AdjustReadyToPayGeneric'
          bank-transfer: '#/components/schemas/AdjustReadyToPayGeneric'
          bank-transfer-2: '#/components/schemas/AdjustReadyToPayGeneric'
          bank-transfer-3: '#/components/schemas/AdjustReadyToPayGeneric'
          bank-transfer-4: '#/components/schemas/AdjustReadyToPayGeneric'
          bank-transfer-5: '#/components/schemas/AdjustReadyToPayGeneric'
          bank-transfer-6: '#/components/schemas/AdjustReadyToPayGeneric'
          bank-transfer-7: '#/components/schemas/AdjustReadyToPayGeneric'
          bank-transfer-8: '#/components/schemas/AdjustReadyToPayGeneric'
          bank-transfer-9: '#/components/schemas/AdjustReadyToPayGeneric'
          Baloto: '#/components/schemas/AdjustReadyToPayGeneric'
          Beeline: '#/components/schemas/AdjustReadyToPayGeneric'
          Belfius-direct-net: '#/components/schemas/AdjustReadyToPayGeneric'
          bitcoin: '#/components/schemas/AdjustReadyToPayGeneric'
          Bizum: '#/components/schemas/AdjustReadyToPayGeneric'
          Boleto: '#/components/schemas/AdjustReadyToPayGeneric'
          cash-deposit: '#/components/schemas/AdjustReadyToPayGeneric'
          CASHlib: '#/components/schemas/AdjustReadyToPayGeneric'
          CashToCode: '#/components/schemas/AdjustReadyToPayGeneric'
          China UnionPay: '#/components/schemas/AdjustReadyToPayGeneric'
          Cleo: '#/components/schemas/AdjustReadyToPayGeneric'
          CODVoucher: '#/components/schemas/AdjustReadyToPayGeneric'
          Conekta-oxxo: '#/components/schemas/AdjustReadyToPayGeneric'
          Cupon-de-pagos: '#/components/schemas/AdjustReadyToPayGeneric'
          cryptocurrency: '#/components/schemas/AdjustReadyToPayGeneric'
          domestic-cards: '#/components/schemas/AdjustReadyToPayGeneric'
          echeck: '#/components/schemas/AdjustReadyToPayGeneric'
          ecoPayz: '#/components/schemas/AdjustReadyToPayGeneric'
          ecoVoucher: '#/components/schemas/AdjustReadyToPayGeneric'
          Efecty: '#/components/schemas/AdjustReadyToPayGeneric'
          EPS: '#/components/schemas/AdjustReadyToPayGeneric'
          ePay.bg: '#/components/schemas/AdjustReadyToPayGeneric'
          eZeeWallet: '#/components/schemas/AdjustReadyToPayGeneric'
          FasterPay: '#/components/schemas/AdjustReadyToPayGeneric'
          Flexepin: '#/components/schemas/AdjustReadyToPayGeneric'
          Giropay: '#/components/schemas/AdjustReadyToPayGeneric'
          Gpaysafe: '#/components/schemas/AdjustReadyToPayGeneric'
          Google Pay: '#/components/schemas/AdjustReadyToPayGeneric'
          iDebit: '#/components/schemas/AdjustReadyToPayGeneric'
          iDEAL: '#/components/schemas/AdjustReadyToPayGeneric'
          ING-homepay: '#/components/schemas/AdjustReadyToPayGeneric'
          INOVAPAY-pin: '#/components/schemas/AdjustReadyToPayGeneric'
          INOVAPAY-wallet: '#/components/schemas/AdjustReadyToPayGeneric'
          InstaDebit: '#/components/schemas/AdjustReadyToPayGeneric'
          instant-bank-transfer: '#/components/schemas/AdjustReadyToPayGeneric'
          InstantPayments: '#/components/schemas/AdjustReadyToPayGeneric'
          Interac: '#/components/schemas/AdjustReadyToPayGeneric'
          Interac-online: '#/components/schemas/AdjustReadyToPayGeneric'
          Interac-eTransfer: '#/components/schemas/AdjustReadyToPayGeneric'
          invoice: '#/components/schemas/AdjustReadyToPayGeneric'
          iWallet: '#/components/schemas/AdjustReadyToPayGeneric'
          Jeton: '#/components/schemas/AdjustReadyToPayGeneric'
          jpay: '#/components/schemas/AdjustReadyToPayGeneric'
          Khelocard: '#/components/schemas/AdjustReadyToPayGeneric'
          Klarna: '#/components/schemas/AdjustReadyToPayGeneric'
          KNOT: '#/components/schemas/AdjustReadyToPayGeneric'
          loonie: '#/components/schemas/AdjustReadyToPayGeneric'
          Matrix: '#/components/schemas/AdjustReadyToPayGeneric'
          MaxiCash: '#/components/schemas/AdjustReadyToPayGeneric'
          Megafon: '#/components/schemas/AdjustReadyToPayGeneric'
          MiFinity-eWallet: '#/components/schemas/AdjustReadyToPayGeneric'
          miscellaneous: '#/components/schemas/AdjustReadyToPayGeneric'
          Bancontact: '#/components/schemas/AdjustReadyToPayGeneric'
          Bancontact-mobile: '#/components/schemas/AdjustReadyToPayGeneric'
          MTS: '#/components/schemas/AdjustReadyToPayGeneric'
          MuchBetter: '#/components/schemas/AdjustReadyToPayGeneric'
          Multibanco: '#/components/schemas/AdjustReadyToPayGeneric'
          Neosurf: '#/components/schemas/AdjustReadyToPayGeneric'
          Netbanking: '#/components/schemas/AdjustReadyToPayGeneric'
          Neteller: '#/components/schemas/AdjustReadyToPayGeneric'
          Nordea-Solo: '#/components/schemas/AdjustReadyToPayGeneric'
          OchaPay: '#/components/schemas/AdjustReadyToPayGeneric'
          online-bank-transfer: '#/components/schemas/AdjustReadyToPayGeneric'
          Onlineueberweisen: '#/components/schemas/AdjustReadyToPayGeneric'
          oriental-wallet: '#/components/schemas/AdjustReadyToPayGeneric'
          OXXO: '#/components/schemas/AdjustReadyToPayGeneric'
          P24: '#/components/schemas/AdjustReadyToPayGeneric'
          Pagadito: '#/components/schemas/AdjustReadyToPayGeneric'
          PagoEffectivo: '#/components/schemas/AdjustReadyToPayGeneric'
          Pagsmile-deposit-express: '#/components/schemas/AdjustReadyToPayGeneric'
          Pagsmile-lottery: '#/components/schemas/AdjustReadyToPayGeneric'
          PayCash: '#/components/schemas/AdjustReadyToPayGeneric'
          Payeer: '#/components/schemas/AdjustReadyToPayGeneric'
          PaymentAsia-crypto: '#/components/schemas/AdjustReadyToPayGeneric'
          Paymero: '#/components/schemas/AdjustReadyToPayGeneric'
          Perfect-money: '#/components/schemas/AdjustReadyToPayGeneric'
          Piastrix: '#/components/schemas/AdjustReadyToPayGeneric'
          plaid-account: '#/components/schemas/AdjustReadyToPayGeneric'
          PayTabs: '#/components/schemas/AdjustReadyToPayGeneric'
          Paysafecard: '#/components/schemas/AdjustReadyToPayGeneric'
          Paysafecash: '#/components/schemas/AdjustReadyToPayGeneric'
          Pay4Fun: '#/components/schemas/AdjustReadyToPayGeneric'
          Paynote: '#/components/schemas/AdjustReadyToPayGeneric'
          PinPay: '#/components/schemas/AdjustReadyToPayGeneric'
          phone: '#/components/schemas/AdjustReadyToPayGeneric'
          PhonePe: '#/components/schemas/AdjustReadyToPayGeneric'
          POLi: '#/components/schemas/AdjustReadyToPayGeneric'
          PostFinance-card: '#/components/schemas/AdjustReadyToPayGeneric'
          PostFinance-e-finance: '#/components/schemas/AdjustReadyToPayGeneric'
          QIWI: '#/components/schemas/AdjustReadyToPayGeneric'
          QPay: '#/components/schemas/AdjustReadyToPayGeneric'
          QQPay: '#/components/schemas/AdjustReadyToPayGeneric'
          rapyd-checkout: '#/components/schemas/AdjustReadyToPayGeneric'
          Resurs: '#/components/schemas/AdjustReadyToPayGeneric'
          SafetyPay: '#/components/schemas/AdjustReadyToPayGeneric'
          SEPA: '#/components/schemas/AdjustReadyToPayGeneric'
          Skrill: '#/components/schemas/AdjustReadyToPayGeneric'
          Skrill Rapid Transfer: '#/components/schemas/AdjustReadyToPayGeneric'
          SMSVoucher: '#/components/schemas/AdjustReadyToPayGeneric'
          Sofort: '#/components/schemas/AdjustReadyToPayGeneric'
          SparkPay: '#/components/schemas/AdjustReadyToPayGeneric'
          swift-dbt: '#/components/schemas/AdjustReadyToPayGeneric'
          Tele2: '#/components/schemas/AdjustReadyToPayGeneric'
          Terminaly-RF: '#/components/schemas/AdjustReadyToPayGeneric'
          ToditoCash-card: '#/components/schemas/AdjustReadyToPayGeneric'
          Trustly: '#/components/schemas/AdjustReadyToPayGeneric'
          UPayCard: '#/components/schemas/AdjustReadyToPayGeneric'
          UPI: '#/components/schemas/AdjustReadyToPayGeneric'
          USD-coin: '#/components/schemas/AdjustReadyToPayGeneric'
          VCreditos: '#/components/schemas/AdjustReadyToPayGeneric'
          VenusPoint: '#/components/schemas/AdjustReadyToPayGeneric'
          voucher: '#/components/schemas/AdjustReadyToPayGeneric'
          voucher-2: '#/components/schemas/AdjustReadyToPayGeneric'
          voucher-3: '#/components/schemas/AdjustReadyToPayGeneric'
          voucher-4: '#/components/schemas/AdjustReadyToPayGeneric'
          Webmoney: '#/components/schemas/AdjustReadyToPayGeneric'
          Webpay: '#/components/schemas/AdjustReadyToPayGeneric'
          Webpay-2: '#/components/schemas/AdjustReadyToPayGeneric'
          Webpay Card: '#/components/schemas/AdjustReadyToPayGeneric'
          WeChat Pay: '#/components/schemas/AdjustReadyToPayGeneric'
          XPay-P2P: '#/components/schemas/AdjustReadyToPayGeneric'
          XPay-QR: '#/components/schemas/AdjustReadyToPayGeneric'
          Yandex-money: '#/components/schemas/AdjustReadyToPayGeneric'
          Zotapay: '#/components/schemas/AdjustReadyToPayGeneric'
          Zimpler: '#/components/schemas/AdjustReadyToPayGeneric'
      anyOf:
        - $ref: '#/components/schemas/AdjustReadyToPayPaymentCard'
        - $ref: '#/components/schemas/AdjustReadyToPayAch'
        - $ref: '#/components/schemas/AdjustReadyToPayPaypal'
        - $ref: '#/components/schemas/AdjustReadyToPayGeneric'
    RuleActionAdjustReadyToPay:
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          description: Adjust ready to pay.
          properties:
            prioritizeActivePaymentInstruments:
              type: boolean
              default: false
              description: >-
                If set as `true`, the payment methods associated to the
                customer's active payment instruments are displayed at the top
                of the list.
            paymentMethods:
              type: array
              description: >-
                Ordered list of payment methods allowed. If empty, then no
                payment methods are allowed.
              items:
                $ref: '#/components/schemas/AdjustPaymentMethod'
    AdjustReadyToPayoutGeneric:
      type: object
      title: Generic
      properties:
        paymentMethod:
          description: Payment method of the payment instrument.
          $ref: '#/components/schemas/AlternativePaymentMethods'
    AdjustReadyToPayoutPaymentMethod:
      type: object
      required:
        - paymentMethod
        - feature
      discriminator:
        propertyName: paymentMethod
        mapping:
          payment-card: '#/components/schemas/AdjustReadyToPayoutGeneric'
          ach: '#/components/schemas/AdjustReadyToPayoutGeneric'
          paypal: '#/components/schemas/AdjustReadyToPayoutGeneric'
          cash: '#/components/schemas/AdjustReadyToPayoutGeneric'
          check: '#/components/schemas/AdjustReadyToPayoutGeneric'
          AdvCash: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Alfa-click: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Alipay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          AstroPay Card: '#/components/schemas/AdjustReadyToPayoutGeneric'
          AstroPay-GO: '#/components/schemas/AdjustReadyToPayoutGeneric'
          BankReferenced: '#/components/schemas/AdjustReadyToPayoutGeneric'
          bank-transfer: '#/components/schemas/AdjustReadyToPayoutGeneric'
          bank-transfer-2: '#/components/schemas/AdjustReadyToPayoutGeneric'
          bank-transfer-3: '#/components/schemas/AdjustReadyToPayoutGeneric'
          bank-transfer-4: '#/components/schemas/AdjustReadyToPayoutGeneric'
          bank-transfer-5: '#/components/schemas/AdjustReadyToPayoutGeneric'
          bank-transfer-6: '#/components/schemas/AdjustReadyToPayoutGeneric'
          bank-transfer-7: '#/components/schemas/AdjustReadyToPayoutGeneric'
          bank-transfer-8: '#/components/schemas/AdjustReadyToPayoutGeneric'
          bank-transfer-9: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Baloto: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Beeline: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Belfius-direct-net: '#/components/schemas/AdjustReadyToPayoutGeneric'
          bitcoin: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Bizum: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Boleto: '#/components/schemas/AdjustReadyToPayoutGeneric'
          cash-deposit: '#/components/schemas/AdjustReadyToPayoutGeneric'
          CASHlib: '#/components/schemas/AdjustReadyToPayoutGeneric'
          CashToCode: '#/components/schemas/AdjustReadyToPayoutGeneric'
          China UnionPay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Cleo: '#/components/schemas/AdjustReadyToPayoutGeneric'
          CODVoucher: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Conekta-oxxo: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Cupon-de-pagos: '#/components/schemas/AdjustReadyToPayoutGeneric'
          cryptocurrency: '#/components/schemas/AdjustReadyToPayoutGeneric'
          domestic-cards: '#/components/schemas/AdjustReadyToPayoutGeneric'
          echeck: '#/components/schemas/AdjustReadyToPayoutGeneric'
          ecoPayz: '#/components/schemas/AdjustReadyToPayoutGeneric'
          ecoVoucher: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Efecty: '#/components/schemas/AdjustReadyToPayoutGeneric'
          EPS: '#/components/schemas/AdjustReadyToPayoutGeneric'
          ePay.bg: '#/components/schemas/AdjustReadyToPayoutGeneric'
          eZeeWallet: '#/components/schemas/AdjustReadyToPayoutGeneric'
          FasterPay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Flexepin: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Giropay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Gpaysafe: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Google Pay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          iDebit: '#/components/schemas/AdjustReadyToPayoutGeneric'
          iDEAL: '#/components/schemas/AdjustReadyToPayoutGeneric'
          ING-homepay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          INOVAPAY-pin: '#/components/schemas/AdjustReadyToPayoutGeneric'
          INOVAPAY-wallet: '#/components/schemas/AdjustReadyToPayoutGeneric'
          InstaDebit: '#/components/schemas/AdjustReadyToPayoutGeneric'
          instant-bank-transfer: '#/components/schemas/AdjustReadyToPayoutGeneric'
          InstantPayments: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Interac: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Interac-online: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Interac-eTransfer: '#/components/schemas/AdjustReadyToPayoutGeneric'
          invoice: '#/components/schemas/AdjustReadyToPayoutGeneric'
          iWallet: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Jeton: '#/components/schemas/AdjustReadyToPayoutGeneric'
          jpay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Khelocard: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Klarna: '#/components/schemas/AdjustReadyToPayoutGeneric'
          KNOT: '#/components/schemas/AdjustReadyToPayoutGeneric'
          loonie: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Matrix: '#/components/schemas/AdjustReadyToPayoutGeneric'
          MaxiCash: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Megafon: '#/components/schemas/AdjustReadyToPayoutGeneric'
          MiFinity-eWallet: '#/components/schemas/AdjustReadyToPayoutGeneric'
          miscellaneous: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Bancontact: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Bancontact-mobile: '#/components/schemas/AdjustReadyToPayoutGeneric'
          MTS: '#/components/schemas/AdjustReadyToPayoutGeneric'
          MuchBetter: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Multibanco: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Neosurf: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Netbanking: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Neteller: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Nordea-Solo: '#/components/schemas/AdjustReadyToPayoutGeneric'
          OchaPay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          online-bank-transfer: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Onlineueberweisen: '#/components/schemas/AdjustReadyToPayoutGeneric'
          oriental-wallet: '#/components/schemas/AdjustReadyToPayoutGeneric'
          OXXO: '#/components/schemas/AdjustReadyToPayoutGeneric'
          P24: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Pagadito: '#/components/schemas/AdjustReadyToPayoutGeneric'
          PagoEffectivo: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Pagsmile-deposit-express: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Pagsmile-lottery: '#/components/schemas/AdjustReadyToPayoutGeneric'
          PayCash: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Payeer: '#/components/schemas/AdjustReadyToPayoutGeneric'
          PaymentAsia-crypto: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Paymero: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Perfect-money: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Piastrix: '#/components/schemas/AdjustReadyToPayoutGeneric'
          plaid-account: '#/components/schemas/AdjustReadyToPayoutGeneric'
          PayTabs: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Paysafecard: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Paysafecash: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Pay4Fun: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Paynote: '#/components/schemas/AdjustReadyToPayoutGeneric'
          PinPay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          phone: '#/components/schemas/AdjustReadyToPayoutGeneric'
          PhonePe: '#/components/schemas/AdjustReadyToPayoutGeneric'
          POLi: '#/components/schemas/AdjustReadyToPayoutGeneric'
          PostFinance-card: '#/components/schemas/AdjustReadyToPayoutGeneric'
          PostFinance-e-finance: '#/components/schemas/AdjustReadyToPayoutGeneric'
          QIWI: '#/components/schemas/AdjustReadyToPayoutGeneric'
          QPay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          QQPay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          rapyd-checkout: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Resurs: '#/components/schemas/AdjustReadyToPayoutGeneric'
          SafetyPay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          SEPA: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Skrill: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Skrill Rapid Transfer: '#/components/schemas/AdjustReadyToPayoutGeneric'
          SMSVoucher: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Sofort: '#/components/schemas/AdjustReadyToPayoutGeneric'
          SparkPay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          swift-dbt: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Tele2: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Terminaly-RF: '#/components/schemas/AdjustReadyToPayoutGeneric'
          ToditoCash-card: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Trustly: '#/components/schemas/AdjustReadyToPayoutGeneric'
          UPayCard: '#/components/schemas/AdjustReadyToPayoutGeneric'
          UPI: '#/components/schemas/AdjustReadyToPayoutGeneric'
          USD-coin: '#/components/schemas/AdjustReadyToPayoutGeneric'
          VCreditos: '#/components/schemas/AdjustReadyToPayoutGeneric'
          VenusPoint: '#/components/schemas/AdjustReadyToPayoutGeneric'
          voucher: '#/components/schemas/AdjustReadyToPayoutGeneric'
          voucher-2: '#/components/schemas/AdjustReadyToPayoutGeneric'
          voucher-3: '#/components/schemas/AdjustReadyToPayoutGeneric'
          voucher-4: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Webmoney: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Webpay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Webpay-2: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Webpay Card: '#/components/schemas/AdjustReadyToPayoutGeneric'
          WeChat Pay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          XPay-P2P: '#/components/schemas/AdjustReadyToPayoutGeneric'
          XPay-QR: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Yandex-money: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Zotapay: '#/components/schemas/AdjustReadyToPayoutGeneric'
          Zimpler: '#/components/schemas/AdjustReadyToPayoutGeneric'
      anyOf:
        - $ref: '#/components/schemas/AdjustReadyToPayoutGeneric'
    RuleActionAdjustReadyToPayout:
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          description: Adjust ready to payout.
          properties:
            prioritizeActivePaymentInstruments:
              type: boolean
              default: false
              description: >-
                Specifies if payment methods, that are associated with the
                customer's active payment instruments, are displayed at the top
                of the list.
            paymentMethods:
              type: array
              description: >-
                Ordered list of allowed payment methods. If this field is empty,
                no payment methods are allowed.
              items:
                $ref: '#/components/schemas/AdjustReadyToPayoutPaymentMethod'
    RuleActionAddBlockList:
      description: Add customer data to blocklist.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            type:
              type: string
              enum:
                - customer-id
                - email
                - fingerprint
                - ip-address
                - payment-card
            ttl:
              type: integer
              description: >-
                Blocklist TTL. Defaults to zero, meaning blocklist record won't
                expire ever.
              default: 0
          required:
            - type
    RuleActionCancelScheduledPayments:
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            skipStartedServicePeriod:
              type: boolean
              description: Skip invoices with started service period.
              default: false
    RuleActionCreateIntuitQuickbooksBalanceTransactionEntry:
      description: Create an Intuit QuickBooks balance transaction entry.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            debitAccount:
              description: ID of the debit QuickBooks account.
              type: string
            creditAccount:
              description: ID of the credit QuickBooks account.
              type: string
            description:
              description: >-
                QuickBooks balance transaction entry description.


                For example, `Balance transaction of type {{
                balanceTransaction.type }} for transaction #{{ transaction.id
                }}`.
              type: string
            credentialHash:
              type: string
              description: ID of the OAuth2 credential.
          required:
            - credentialHash
            - debitAccount
            - creditAccount
            - description
    RuleActionUpdateIntuitQuickbooksInvoice:
      description: Update an Intuit QuickBooks invoice.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            unearnedRevenueAccount:
              description: ID of the unearned revenue QuickBooks account.
              type: string
            taxesAccount:
              description: >-
                ID of the taxes QuickBooks account.

                If supplied taxes are represented as separate line items instead
                of integrated tax field.
              type:
                - string
                - 'null'
            discountsAccount:
              description: |-
                ID of the discounts QuickBooks account.
                If not set `unearnedRevenueAccount` is used for discounts.
              type:
                - string
                - 'null'
            department:
              description: ID of the QuickBooks department.
              type:
                - string
                - 'null'
            template:
              type: object
              properties:
                itemName:
                  description: Name of the line item.
                  type: string
                  default: >-
                    {{ item.plan.id | default: item.product.id | default:
                    item.description }}
                itemDescription:
                  description: Description of the line item.
                  type: string
                  default: '{{ item.product.description | default: item.description }}'
                itemSku:
                  description: SKU of the line item.
                  type: string
                  default: >-
                    {{ item.plan.id | default: item.product.id | default:
                    item.id }}
                itemLineDescription:
                  description: Description of the line item.
                  type: string
                  default: >-
                    {{ item.plan.id | default: item.product.id | default:
                    item.description }}{% if item.periodStartTime and
                    item.periodEndTime %} ({{ item.periodStartTime | datetime:
                    "M jS, Y" }} – {{ item.periodEndTime | datetime: "M jS, Y"
                    }}){% endif %}
                taxName:
                  description: >-
                    Name of the tax item name. 

                    This value is used when the `taxesAccount` field is
                    configured.
                  type: string
                  default: '{{ tax.description }}'
                taxDescription:
                  description: Description of the tax item.
                  type: string
                  default: >-
                    {{ tax.description }} This value is used when the
                    `taxesAccount` field is configured.
                taxSku:
                  description: SKU of the tax item.
                  type: string
                  default: tax
                taxLineDescription:
                  description: >-
                    Description of the tax line.

                    This value is used when the `taxesAccount` field is
                    configured.
                  type: string
                  default: >-
                    {{ tax.description }}{% if item %} for {{ item.plan.id |
                    default: item.description }}{% if item.periodStartTime and
                    item.periodEndTime %} ({{ item.periodStartTime | datetime:
                    "M jS, Y" }} – {{ item.periodEndTime | datetime: "M jS, Y"
                    }}){% else %} for multiple items{% endif %}{% endif %}
            credentialHash:
              type: string
              description: ID of the OAuth2 credential.
          required:
            - credentialHash
            - customerDisplayName
            - unearnedRevenueAccount
    RuleActionCreateIntuitQuickbooksInvoice:
      description: Create an Intuit QuickBooks invoice.
      allOf:
        - $ref: '#/components/schemas/RuleActionUpdateIntuitQuickbooksInvoice'
        - type: object
          properties:
            customerDisplayName:
              description: >-
                Customer display name in QuickBooks. Duplicate names are mapped
                to a single QuickBooks customer.


                Event placeholders could be used as follows:

                - Organization name: `{{
                invoice.customer.primaryAddress.organization }}`;

                - Full customer name: `{{ invoice.customer.firstName }} {{
                invoice.customer.lastName }}`;

                - Customer ID: `{{ invoice.customer.id }}`.
              type: string
          required:
            - customerDisplayName
    RuleActionCreateIntuitQuickbooksPayment:
      description: Create an Intuit QuickBooks payment.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            depositAccount:
              description: ID of the deposit QuickBooks account.
              type: string
            credentialHash:
              type: string
              description: ID of the OAuth2 credential.
          required:
            - credentialHash
            - depositAccount
    RuleActionCreateIntuitQuickbooksRefundReceipt:
      description: Create an Intuit QuickBooks refund receipt.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            depositAccount:
              description: ID of the deposit QuickBooks account.
              type: string
            department:
              description: ID of the QuickBooks department.
              type:
                - string
                - 'null'
            credentialHash:
              type: string
              description: ID of the OAuth2 credential.
          required:
            - credentialHash
            - depositAccount
    RuleActionCreateIntuitQuickbooksRevenueRecognitionEntry:
      description: Create an Intuit QuickBooks revenue recognition entry.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            debitAccount:
              description: ID of the debit QuickBooks account.
              type: string
            creditAccount:
              description: ID of the credit QuickBooks account.
              type: string
            description:
              description: >-
                QuickBooks revenue recognition entry description.


                For example, `Revenue recognition for invoice #{{ invoice.id }}
                item #{{ item.id }} – {{ item.description }}`.
              type: string
            credentialHash:
              type: string
              description: ID of the OAuth2 credential.
          required:
            - credentialHash
            - debitAccount
            - creditAccount
            - description
    RuleActionCreateInfusionsoftOrder:
      description: Create a Keap Infusionsoft order along with a contact.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            contactBody:
              description: >-
                List of contact attributes used during Keap Infusionsoft
                creation process.
              type: object
              properties:
                email_addresses:
                  description: >-
                    Contact email addresses used during Keap Infusionsoft
                    creation process.
                  type: array
                  minItems: 1
                  items:
                    type: object
                    properties:
                      email:
                        description: >-
                          Contact email address used during Keap Infusionsoft
                          creation process.
                        type: string
                        example: '{{ invoice.customer.email }}'
                      field:
                        description: >-
                          Contact email field type used during Keap Infusionsoft
                          creation process.
                        type: string
                        enum:
                          - EMAIL1
                          - EMAIL2
                          - EMAIL3
                        example: EMAIL1
                phone_numbers:
                  description: >-
                    Contact phone numbers used during Keap Infusionsoft creation
                    process.
                  type: array
                  minItems: 1
                  items:
                    type: object
                    properties:
                      number:
                        description: >-
                          Contact phone number used during Keap Infusionsoft
                          creation process.
                        type: string
                        example: '{{ invoice.customer.customFields.phoneNumber }}'
                      field:
                        description: >-
                          Contact phone field type used during Keap Infusionsoft
                          creation process.
                        type: string
                        enum:
                          - PHONE1
                          - PHONE2
                          - PHONE3
                          - PHONE4
                          - PHONE5
                        example: PHONE1
            orderBody:
              description: >-
                List of order attributes used during Keap Infusionsoft creation
                process except `contact_id`.
              type: object
              properties:
                order_date:
                  description: Order date used during Keap Infusionsoft creation process.
                  type: string
                  example: '{{ invoice.issuedTime }}'
                order_title:
                  description: Order title used during Keap Infusionsoft creation process.
                  type: string
                  example: '{{ invoice.id }}'
                order_type:
                  description: >-
                    Order type that used during Keap Infusionsoft creation
                    process.
                  type: string
                  enum:
                    - Offline
                    - Online
                  example: Offline
              required:
                - order_date
                - order_title
                - order_type
            credentialHash:
              type: string
              description: ID of the OAuth2 credential.
          required:
            - credentialHash
            - contactBody
            - orderBody
    RuleActionCreateInfusionsoftPayment:
      description: Create a Keap Infusionsoft payment.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            paymentBody:
              description: >-
                List of payment attributes used during Keap Infusionsoft
                creation process.
              type: object
            credentialHash:
              type: string
              description: ID of the OAuth2 credential.
          required:
            - credentialHash
    RuleActionDeclineTransaction:
      description: Decline transaction.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
    RuleActionCheckOntarioRestriction:
      description: Decline transaction not conforming Ontario's restrictions.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
    RuleActionDisplayMessage:
      description: Display message.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            messages:
              type: array
              minItems: 1
              items:
                type: object
                properties:
                  langIso:
                    description: Language in ISO 639-1 code format.
                    type: string
                  content:
                    type: string
                required:
                  - langIso
                  - content
          required:
            - messages
    RuleActionDisplayOtherChoices:
      description: Display other choices.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            choices:
              type: array
              minItems: 1
              items:
                type: object
                properties:
                  langIso:
                    description: Language in ISO 639-1 code format.
                    type: string
                  content:
                    type: string
                required:
                  - langIso
                  - content
          required:
            - choices
    RuleActionGuessPaymentCardExpiration:
      allOf:
        - $ref: '#/components/schemas/RuleAction'
    RuleActionOfferPurchaseBump:
      description: Offer purchase bump.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          required:
            - bumpOffers
          properties:
            bumpOffers:
              type: array
              minItems: 1
              items:
                type: object
                required:
                  - name
                  - weight
                  - offers
                  - choices
                properties:
                  name:
                    type: string
                    description: |-
                      Name of the bump offer version.
                      This field is useful when measuring split tests.
                  weight:
                    description: Weight of the bump offer.
                    type: integer
                    minimum: 0
                  offers:
                    type: array
                    minItems: 1
                    items:
                      $ref: '#/components/schemas/PurchaseBumpOffer'
                  choices:
                    type: array
                    minItems: 1
                    items:
                      type: object
                      required:
                        - langIso
                        - content
                      properties:
                        langIso:
                          $ref: '#/components/schemas/LanguageIsoCode'
                        content:
                          type: string
    RuleActionPerformExperianCheck:
      description: Perform Experian ProveID check on the customer.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            experianCredentialHash:
              description: Hash of the Experian credential to use for performing the check.
              type: string
              example: 58816e40-387e-4834-982f-fa1855a75f64
            tagOnApprove:
              description: >-
                Tag ID that should be used to tag the customer when the identity
                matches Experian records.
              type: string
            tagOnReject:
              description: >-
                Tag ID that should be used to tag the customer when the identity
                doesn't match Experian records.
              type: string
            tagOnUnknown:
              description: >-
                Tag ID that should be used to tag the customer when the identity
                is not found in Experian records or further analysis needed.
              type: string
          required:
            - experianCredentialHash
    GatewayAccountPickInstruction:
      type: object
      discriminator:
        propertyName: method
        mapping:
          gateway-account-weights: '#/components/schemas/PickInstructionGatewayAccountWeights'
          gateway-acquirer-weights: '#/components/schemas/PickInstructionGatewayAcquirerWeights'
      properties:
        strategy:
          type: string
          enum:
            - weighted-random
            - round-robin
          description: >-
            Controls the picking strategy for gateway accounts.

            The weighted-random strategy picks based on weighted-random every
            time.

            The round-robin strategy tries a weighted-random different gateway
            account for consecutive attempts from same payment instrument.
          default: weighted-random
        method:
          type: string
          enum:
            - gateway-account-weights
            - gateway-acquirer-weights
      required:
        - method
    PickInstructionGatewayAccountWeights:
      allOf:
        - $ref: '#/components/schemas/GatewayAccountPickInstruction'
        - type: object
          properties:
            weightedList:
              type: array
              uniqueItems: true
              minimum: 0
              items:
                type: object
                properties:
                  gatewayAccountId:
                    type: string
                    description: Unique resource ID.
                    maxLength: 50
                    example: gw_acc_0YVCXMF26DDNKAERE5NW727S34
                  weight:
                    type: integer
                    minimum: 0
                required:
                  - gatewayAccountId
                  - weight
              example:
                - gatewayAccountId: my_gateway_account_1
                  weight: 80
                - gatewayAccountId: my_gateway_account_2
                  weight: 20
          required:
            - weightedList
    PickInstructionGatewayAcquirerWeights:
      allOf:
        - $ref: '#/components/schemas/GatewayAccountPickInstruction'
        - type: object
          properties:
            weightedList:
              type: array
              uniqueItems: true
              minimum: 0
              items:
                type: object
                properties:
                  gatewayName:
                    $ref: '#/components/schemas/GatewayName'
                  acquirerName:
                    $ref: '#/components/schemas/AcquirerName'
                  weight:
                    type: integer
                    minimum: 0
                required:
                  - gatewayName
                  - acquirerName
                  - weight
              example:
                - gatewayName: TestProcessor
                  acquirerName: AIB
                  weight: 80
                - gatewayName: TestProcessor
                  acquirerName: B+S
                  weight: 20
          required:
            - weightedList
    RuleActionPickGatewayAccount:
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            pickInstruction:
              $ref: '#/components/schemas/GatewayAccountPickInstruction'
          required:
            - pickInstruction
    RuleActionRemoveReminder:
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            role:
              type: string
              enum:
                - all
                - renewal
                - trial-end
              description: >-
                Role of Reminder (available only on Order events, other events
                should use `all`).
          required:
            - role
    RuleActionRequestKyc:
      description: Request KYC page to verify customer identity.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            documents:
              type: array
              description: Documents to request from the customer.
              minItems: 1
              items:
                $ref: '#/components/schemas/KycRequestDocument'
            excludePolicy:
              type: string
              description: Specifies who should be excluded from the verification.
              enum:
                - customers-with-accepted-document
                - customers-with-document
                - none
              default: customers-with-accepted-document
            isMandatory:
              type: boolean
              description: Is the verification mandatory.
              default: true
            promptPolicy:
              type: string
              description: When to prompt, before or after processing the transaction.
              enum:
                - before-transaction-process
                - after-transaction-process
              default: before-transaction-process
            rejectedBeforeTransactionProcessPolicy:
              type: string
              description: >-
                What to do if verification is before transaction processing, and
                is rejected.
              enum:
                - process-transaction
                - decline
                - use-alternate-gateway
              default: decline
            alternateGatewayAccountIfRejected:
              type: string
              description: >-
                Gateway account to use if use-alternate-gateway is selected for
                rejectedBeforeTransactionProcessPolicy.
            rejectedAfterTransactionProcessPolicy:
              type: string
              description: >-
                What to do if verification is after transaction processing, and
                is rejected.
              enum:
                - proceed
              default: proceed
            optionalPolicy:
              type: string
              description: What to do if verification is optional.
              enum:
                - allow-bypass
                - allow-use-alternate-gateway
              default: allow-bypass
            alternateGatewayAccountIfOptional:
              type: string
              description: >-
                Gateway account to use if allow-use-alternate-gateway is
                selected for optionalPolicy.
            bypassCurrencyToDisplay:
              description: >-
                Currency three letter code to display on the bypass link, if
                optional.
              type: string
              default: USD
          required:
            - documents
            - excludePolicy
            - isMandatory
            - promptPolicy
            - rejectedBeforeTransactionProcessPolicy
            - rejectedAfterTransactionProcessPolicy
            - optionalPolicy
    RuleActionResetReminder:
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            role:
              type: string
              enum:
                - all
                - renewal
                - trial-end
              description: >-
                Role of Reminder (available only on Order events, other events
                should use `all`).
          required:
            - role
    RuleActionScheduleInvoiceRetry:
      description: Schedule an invoice retry.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            attempts:
              type: array
              description: Describes the retry instruction.
              minItems: 1
              items:
                type: object
                properties:
                  scheduleInstruction:
                    $ref: '#/components/schemas/InvoiceRetryScheduleInstruction'
                  amountAdjustmentInstruction:
                    $ref: >-
                      #/components/schemas/InvoiceRetryAmountAdjustmentInstruction
                  tryBackupInstruments:
                    description: >-
                      Specifies whether to use backup payment instruments on an
                      invoice payment retry.
                    type: boolean
                    default: false
                required:
                  - scheduleInstruction
            afterAttemptPolicies:
              description: Policy on the attempt finishes.
              type: array
              items:
                type: string
                enum:
                  - change-subscription-renewal-time
            afterRetryEndPolicies:
              description: Policy on the retry ends.
              type: array
              items:
                type: string
                enum:
                  - abandon-invoice
                  - cancel-subscription
            overrideRetryInstruction:
              description: Specifies whether to replace the existing retry.
              type: boolean
          required:
            - attempts
            - afterAttemptPolicies
            - afterRetryEndPolicies
            - overrideRetryInstruction
    SchedulingMethodAuto:
      type: object
      required:
        - method
      properties:
        method:
          type: string
          enum:
            - auto
    ScheduleInstruction:
      type: object
      description: Specifies when the instruction is performed.
      discriminator:
        propertyName: method
        mapping:
          auto: '#/components/schemas/SchedulingMethodAuto'
          date-interval: '#/components/schemas/SchedulingMethodDateInterval'
          day-of-month: '#/components/schemas/SchedulingMethodDayOfMonth'
          day-of-week: '#/components/schemas/SchedulingMethodDayOfWeek'
          immediately: '#/components/schemas/SchedulingMethodImmediately'
          intelligent: '#/components/schemas/SchedulingMethodIntelligent'
      anyOf:
        - $ref: '#/components/schemas/SchedulingMethodAuto'
        - $ref: '#/components/schemas/SchedulingMethodDateInterval'
        - $ref: '#/components/schemas/SchedulingMethodDayOfMonth'
        - $ref: '#/components/schemas/SchedulingMethodDayOfWeek'
        - $ref: '#/components/schemas/SchedulingMethodImmediately'
        - $ref: '#/components/schemas/SchedulingMethodIntelligent'
    RuleActionSchedulePayment:
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          description: Calculation instruction of scheduled time for payment.
          properties:
            scheduleInstruction:
              $ref: '#/components/schemas/ScheduleInstruction'
            amountPolicy:
              type: string
              enum:
                - invoice-amount-due
          required:
            - scheduleInstruction
            - amountPolicy
    ReminderScheduleInstruction:
      type: object
      description: Calculation instruction of the scheduled time.
      discriminator:
        propertyName: method
        mapping:
          date-interval: '#/components/schemas/SchedulingMethodDateInterval'
          day-of-month: '#/components/schemas/SchedulingMethodDayOfMonth'
          day-of-week: '#/components/schemas/SchedulingMethodDayOfWeek'
      anyOf:
        - $ref: '#/components/schemas/SchedulingMethodDateInterval'
        - $ref: '#/components/schemas/SchedulingMethodDayOfMonth'
        - $ref: '#/components/schemas/SchedulingMethodDayOfWeek'
    RuleActionScheduleReminder:
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            role:
              type: string
              enum:
                - all
                - renewal
                - trial-end
              description: >-
                Specifies the types of events that the reminder is applicable
                to.

                The `renewal` and `trial-end` options are only available for
                order events.

                Other events must use the `all` option.
            schedule:
              type: object
              description: Collection of schedule instructions.
              properties:
                instructions:
                  type: array
                  items:
                    $ref: '#/components/schemas/ReminderScheduleInstruction'
                chronology:
                  type: string
                  enum:
                    - before
                    - after
              required:
                - instructions
                - chronology
          required:
            - role
    RulesEmailNotification:
      type: object
      properties:
        id:
          type: string
          format: uuid
          description: ID of the message.
        version:
          type: string
          description: >-
            Version number of the message.

            Use this field to distinguish between multiple messages by name and
            version number.

            If there are no versions, this field is empty.
        weight:
          type: integer
          description: >-
            Weight distribution value that is assigned to a template for a split
            test.

            Each template in a split test can be assigned a weight.

            The higher the weight value, the more likely the message template is
            used.


            The split test algorithm does not assess locale when making a
            weighted template selection.
          minimum: 0
          maximum: 100
          example: 75
          default: 100
        templates:
          description: >-
            Array of message templates with language locale identifiers in [RFC
            5646](https://tools.ietf.org/html/rfc5646) format.

            A language is selected based on the customer's locale.


            If no locale is configured for the customer, `en-US` (US English) is
            used.


            If no template is available in the customer's locale,

            a template locale is selected using a closest match algorithm.


            If your email message templates are localized into more than one
            language,

            set a customer locale.


            Invalid placeholders render as empty strings.

            For example, `Hello {{invalid.placeholder}}!` is rendered as `Hello
            !`.
          type: array
          minItems: 1
          items:
            type: object
            required:
              - locale
              - subject
              - text
              - html
              - from
              - to
            properties:
              locale:
                type: string
                description: >-
                  Language locale identifier in [RFC
                  5646](https://tools.ietf.org/html/rfc5646) format.
                example: fr-FR
              from:
                type: string
                description: >-
                  Email address of the sender.


                  > **Important:** This value must be a verified email address.


                  To verify an email address:
                    1. [Create an email delivery setting](https://www.rebilly.com/catalog/all/email-delivery-settings/postemaildeliverysetting/).
                      In the response, you receive the email and a token.
                    1. [Verify the email delivery](https://www.rebilly.com/catalog/all/email-delivery-settings/putemaildeliverysettingsverification/) by passing the token as the path parameter.

                  Template placeholders are permitted.

                  If a placeholder does not resolve to a verified `from`
                  address,

                  the default verified `from` address is used.
                maxLength: 254
                example: example@example.com
              to:
                type: array
                description: |-
                  List of email addresses to which the email message is sent.
                  Template placeholders are permitted.
                  If a placeholder does not resolve to an email address,
                  the address is not added.
                minItems: 1
                items:
                  type: string
                  maxLength: 254
                  example: '{{ invoice.customer.email }}'
              cc:
                type: array
                description: |-
                  List of CC email addresses to which the email message is sent.
                  Template placeholders are permitted.
                  If a placeholder does not resolve to an email address,
                  the address is not added.
                items:
                  type: string
                  maxLength: 254
                  example: '{{ invoice.customer.email }}'
              bcc:
                type: array
                description: >-
                  List of BCC email addresses to which the email message is
                  sent.

                  Template placeholders are permitted.

                  If a placeholder does not resolve to an email address,

                  the address is not added.
                items:
                  type: string
                  maxLength: 254
                  example: '{{ invoice.customer.email }}'
              subject:
                type: string
                description: |-
                  Subject of the message.
                  The use of template placeholders is permitted for this field.
                maxLength: 998
                example: Demonstration subject
              text:
                type: string
                description: |-
                  Text body of the message.
                  To use content from the `html` field, leave this field empty.
                  The use of template placeholders is permitted for this field.
                example: Demonstration text
              html:
                type: string
                description: |-
                  HTML body of the message.
                  To use content from the `text` field, leave this field empty.
                  The use of template placeholders is permitted for this field.
                example: <p>Demonstration text</p>
              editor:
                type: string
                description: >-
                  Source of the message.

                  This value is required for the email editor.

                  This value is not used for sending emails.

                  It is used by the editor to reproduce the message for future
                  updates.
                example: <div class="block">Demonstration text</div>
              attachments:
                description: Attachments of the email message.
                type: array
                items:
                  type: object
                  required:
                    - resourceType
                    - resourceId
                  properties:
                    resourceType:
                      type: string
                      description: Type of the attachment resource.
                      example: customer
                    resourceId:
                      type: string
                      description: |-
                        ID of the attachment resource.
                        Template placeholders are permitted.
                      maxLength: 50
                      example: cus_0YV7DDSDD1C8DA64KHH2W33CPF
            example:
              locale: fr-FR
              from: example@example.com
              to:
                - '{{ invoice.customer.email }}'
              subject: Sujet de démonstration
              text: Texte de démonstration
              html: <p>Texte de démonstration</p>
              editor: <div class="block">Texte de démonstration</div>
      required:
        - templates
    RuleActionSendEmail:
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            id:
              type: string
              format: uuid
              description: ID of the action.
            title:
              type: string
              description: Title of the messages (this title appears in reports).
            emails:
              type: array
              description: List of messages.
              minItems: 1
              items:
                $ref: '#/components/schemas/RulesEmailNotification'
            splitTestStartTime:
              type: string
              format: date-time
              description: Split test start time.
          required:
            - emails
    RuleActionStopSubscriptions:
      description: Stop active subscriptions.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
    RuleActionTagOrUntagCustomer:
      description: Tag or untag a customer with a specified list of tags.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            addingTags:
              description: List of tag ID customer should be tagged with.
              type: array
              maxItems: 1000
              items:
                type: string
            removingTags:
              description: List of tag ID customer should be untagged from.
              type: array
              maxItems: 1000
              items:
                type: string
          required:
            - addingTags
            - removingTags
    RuleActionVoidIntuitQuickbooksInvoice:
      description: Void an Intuit QuickBooks invoice.
      allOf:
        - $ref: '#/components/schemas/RuleAction'
        - type: object
          properties:
            credentialHash:
              type: string
              description: ID of the OAuth2 credential.
          required:
            - credentialHash
            - customerDisplayName
            - unearnedRevenueAccount
    Bind:
      type: object
      description: Rule information.
      properties:
        id:
          description: ID of the rule.
          $ref: '#/components/schemas/ResourceId'
        name:
          description: Name of the rule.
          type: string
        labels:
          description: Labels of the rule.
          type: array
          uniqueItems: true
          example:
            - test-rule
            - category:foo
          items:
            type: string
            pattern: '[a-zA-Z][a-zA-Z0-9:-]*'
        status:
          description: Status of the rule.
          type: string
          default: active
          enum:
            - active
            - inactive
        filter:
          description: >-
            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).
          type: string
        actions:
          description: Actions that execute when an event occurs.
          type: array
          uniqueItems: true
          items:
            $ref: '#/components/schemas/RuleAction'
      required:
        - name
        - actions
    Rule:
      type: object
      allOf:
        - $ref: '#/components/schemas/Bind'
        - type: object
          properties:
            final:
              description: >-
                Specifies if the rule stops subsequent rules in the event list
                from being executed.
              type: boolean
              default: true
    RuleSet:
      type: object
      description: Ruleset for a specific event.
      properties:
        version:
          description: Version of the ruleset.
          type: integer
          readOnly: true
        binds:
          type: array
          description: |-
            Binds always execute, regardless of rule based events.
            A bind is a configuration of an event and one or more actions.
          items:
            $ref: '#/components/schemas/Bind'
        rules:
          type: array
          description: >-
            Rules can be configured to stop subsequent rules in the event list
            from being executed.

            A rule is a configuration of an event and one or more actions.
          items:
            $ref: '#/components/schemas/Rule'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
      required:
        - rules
    RulesEngineTimeline:
      type: object
      properties:
        id:
          type: string
          description: ID of the timeline message.
          readOnly: true
          maxLength: 50
          example: tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC
        type:
          description: Type of timeline message.
          type: string
          readOnly: true
          enum:
            - timeline-comment-created
            - ruleset-created
            - ruleset-changed
        triggeredBy:
          description: Specifies who, or what, triggered the timeline event.
          type: string
          readOnly: true
          enum:
            - rebilly
            - app
            - direct-api
        message:
          description: Contents of the timeline message.
          type: string
        extraData:
          $ref: '#/components/schemas/TimelineExtraData'
        occurredTime:
          description: Date and time when the timeline message occurred.
          readOnly: true
          $ref: '#/components/schemas/ServerTimestamp'
        _links:
          $ref: '#/components/schemas/SelfLink'
    RuleSetHistoryItem:
      type: object
      description: Version of ruleset.
      readOnly: true
      properties:
        version:
          description: Version of the ruleset.
          type: integer
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - history
                  - rules
    RuleSetVersion:
      type: object
      description: Version of ruleset.
      readOnly: true
      properties:
        version:
          description: Version of the ruleset.
          type: integer
        binds:
          type: array
          description: |-
            Binds always execute, regardless of rule based events.
            A bind is a configuration of an event and one or more actions.
          items:
            $ref: '#/components/schemas/Bind'
        rules:
          type: array
          description: >-
            Rules can be configured to stop subsequent rules in the event list
            from being executed.

            A rule is a configuration of an event and one or more actions.
          items:
            $ref: '#/components/schemas/Rule'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    RuleSetDraft:
      type: object
      description: Draft ruleset for specific event.
      properties:
        id:
          type: string
          readOnly: true
          description: ID of the draft rule set.
          maxLength: 50
          example: rule_dft_0YVDN3FN43CEQ8CQ93Y0H00ZQ7
        baseVersion:
          type: integer
          minimum: 0
          description: >-
            Ruleset version on which the draft ruleset is based.

            Generally, a draft ruleset is cloned from an existing ruleset.

            Use this field to determine if the active ruleset changed since the
            draft creation.

            `0` denotes a draft ruleset that is not created from an existing
            ruleset.

            The value of this field is informational only, it is not assigned to
            the active ruleset.
        binds:
          type: array
          description: |-
            Binds always execute, regardless of rule based events.
            A rule is a configuration of an event and one or more actions.
          items:
            $ref: '#/components/schemas/Bind'
        rules:
          type: array
          description: >-
            Rule can be configured to stop subsequent rules in the event list
            from being executed.

            A rule is a configuration of an event and one or more actions.
          items:
            $ref: '#/components/schemas/Rule'
        author:
          description: Author of the draft.
          readOnly: true
          type: object
          properties:
            id:
              description: Author's user ID.
              type: string
              $ref: '#/components/schemas/ResourceId'
            name:
              description: Author's first and last name.
              type: string
        name:
          type: string
          description: Name of the draft.
        description:
          type: string
          description: Detailed description of the drafted ruleset.
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - user
      required:
        - rules
        - name
        - baseVersion
    ForgotPassword:
      type: object
      required:
        - email
      properties:
        email:
          description: Email address to which a reset password link is sent.
          type: string
          format: email
    GatewayAccount:
      description: Gateway account details.
      type: object
      required:
        - gatewayName
        - method
        - acceptedCurrencies
      discriminator:
        propertyName: gatewayName
        mapping:
          A1Gateway: '#/components/schemas/A1Gateway'
          ACI: '#/components/schemas/ACI'
          Adyen: '#/components/schemas/Adyen'
          Aircash: '#/components/schemas/Aircash'
          Airpay: '#/components/schemas/Airpay'
          Airwallex: '#/components/schemas/Airwallex'
          AmazonPay: '#/components/schemas/AmazonPay'
          AmexVPC: '#/components/schemas/AmexVPC'
          ApcoPay: '#/components/schemas/ApcoPay'
          AsiaPaymentGateway: '#/components/schemas/AsiaPaymentGateway'
          AstroPayCard: '#/components/schemas/AstroPayCard'
          AuthorizeNet: '#/components/schemas/AuthorizeNet'
          Awepay: '#/components/schemas/Awepay'
          Bambora: '#/components/schemas/Bambora'
          BankSEND: '#/components/schemas/BankSEND'
          BitPay: '#/components/schemas/BitPay'
          BlueSnap: '#/components/schemas/BlueSnap'
          BraintreePayments: '#/components/schemas/BraintreePayments'
          Buckaroo: '#/components/schemas/Buckaroo'
          BVNK: '#/components/schemas/BVNK'
          CASHlib: '#/components/schemas/CASHlib'
          CODVoucher: '#/components/schemas/CODVoucher'
          Coinbase: '#/components/schemas/Coinbase'
          CoinGate: '#/components/schemas/CoinGate'
          CoinPayments: '#/components/schemas/CoinPayments'
          Cardknox: '#/components/schemas/Cardknox'
          Cashflows: '#/components/schemas/Cashflows'
          Cashterminal: '#/components/schemas/Cashterminal'
          CashToCode: '#/components/schemas/CashToCode'
          CauriPayment: '#/components/schemas/CauriPayment'
          Cayan: '#/components/schemas/Cayan'
          CCAvenue: '#/components/schemas/CCAvenue'
          Chase: '#/components/schemas/Chase'
          CheckoutCom: '#/components/schemas/CheckoutCom'
          Chillstock: '#/components/schemas/Chillstock'
          Circle: '#/components/schemas/Circle'
          Citadel: '#/components/schemas/Citadel'
          Clearhaus: '#/components/schemas/Clearhaus'
          Cleo: '#/components/schemas/Cleo'
          Conekta: '#/components/schemas/Conekta'
          Coppr: '#/components/schemas/Coppr'
          Credorax: '#/components/schemas/Credorax'
          Cryptonator: '#/components/schemas/Cryptonator'
          CyberSource: '#/components/schemas/CyberSource'
          DataCash: '#/components/schemas/DataCash'
          Dengi: '#/components/schemas/Dengi'
          Dimoco: '#/components/schemas/Dimoco'
          dLocal: '#/components/schemas/dLocal'
          Dragonphoenix: '#/components/schemas/Dragonphoenix'
          Dropayment: '#/components/schemas/Dropayment'
          Directa24: '#/components/schemas/Directa24'
          EasyPayDirect: '#/components/schemas/EasyPayDirect'
          EBANX: '#/components/schemas/EBANX'
          EPG: '#/components/schemas/EPG'
          EPro: '#/components/schemas/EPro'
          EcorePay: '#/components/schemas/EcorePay'
          Elavon: '#/components/schemas/Elavon'
          EMS: '#/components/schemas/EMS'
          ePay: '#/components/schemas/ePay'
          Euteller: '#/components/schemas/Euteller'
          Ezeebill: '#/components/schemas/Ezeebill'
          eZeeWallet: '#/components/schemas/eZeeWallet'
          ezyEFT: '#/components/schemas/ezyEFT'
          FinTecSystems: '#/components/schemas/FinTecSystems'
          Finrax: '#/components/schemas/Finrax'
          Flexepin: '#/components/schemas/Flexepin'
          Forte: '#/components/schemas/Forte'
          FundSend: '#/components/schemas/FundSend'
          gate2way: '#/components/schemas/gate2way'
          GET: '#/components/schemas/GET'
          Gigadat: '#/components/schemas/Gigadat'
          GlobalOne: '#/components/schemas/GlobalOne'
          Gooney: '#/components/schemas/Gooney'
          Gpaysafe: '#/components/schemas/Gpaysafe'
          Greenbox: '#/components/schemas/Greenbox'
          HiPay: '#/components/schemas/HiPay'
          ICEPAY: '#/components/schemas/ICEPAY'
          INOVAPAY: '#/components/schemas/INOVAPAY'
          Ilixium: '#/components/schemas/Ilixium'
          Ingenico: '#/components/schemas/Ingenico'
          Inovio: '#/components/schemas/Inovio'
          InstaDebit: '#/components/schemas/InstaDebit'
          Intuit: '#/components/schemas/Intuit'
          IpayOptions: '#/components/schemas/IpayOptions'
          JetPay: '#/components/schemas/JetPay'
          Jeton: '#/components/schemas/Jeton'
          JPMOrbital: '#/components/schemas/JPMOrbital'
          Khelocard: '#/components/schemas/Khelocard'
          Klarna: '#/components/schemas/Klarna'
          Konnektive: '#/components/schemas/Konnektive'
          LaCore: '#/components/schemas/LaCore'
          loonie: '#/components/schemas/loonie'
          LPG: '#/components/schemas/LPG'
          MaxiCash: '#/components/schemas/MaxiCash'
          MercadoPago: '#/components/schemas/MercadoPago'
          MiFinity: '#/components/schemas/MiFinity'
          MobilePay: '#/components/schemas/MobilePay'
          Moneris: '#/components/schemas/Moneris'
          Monolo: '#/components/schemas/Monolo'
          MtaPay: '#/components/schemas/MtaPay'
          MuchBetter: '#/components/schemas/MuchBetter'
          MuchBetterGateway: '#/components/schemas/MuchBetterGateway'
          MyFatoorah: '#/components/schemas/MyFatoorah'
          Neosurf: '#/components/schemas/Neosurf'
          NMI: '#/components/schemas/NMI'
          Netbanking: '#/components/schemas/Netbanking'
          Neteller: '#/components/schemas/Neteller'
          NGenius: '#/components/schemas/NGenius'
          NinjaWallet: '#/components/schemas/NinjaWallet'
          NordikCoin: '#/components/schemas/NordikCoin'
          NOWPayments: '#/components/schemas/NOWPayments'
          NuaPay: '#/components/schemas/NuaPay'
          OchaPay: '#/components/schemas/OchaPay'
          Onlineueberweisen: '#/components/schemas/Onlineueberweisen'
          OnRamp: '#/components/schemas/OnRamp'
          Orbital: '#/components/schemas/Orbital'
          Pagadito: '#/components/schemas/Pagadito'
          Pagsmile: '#/components/schemas/Pagsmile'
          Panamerican: '#/components/schemas/Panamerican'
          PandaGateway: '#/components/schemas/PandaGateway'
          ParamountCommerce: '#/components/schemas/ParamountCommerce'
          ParamountEft: '#/components/schemas/ParamountEft'
          ParamountInterac: '#/components/schemas/ParamountInterac'
          Pay4Fun: '#/components/schemas/Pay4Fun'
          PayCash: '#/components/schemas/PayCash'
          PayClub: '#/components/schemas/PayClub'
          PayEcards: '#/components/schemas/PayEcards'
          Paynote: '#/components/schemas/Paynote'
          PayPal: '#/components/schemas/PayPal'
          Payeezy: '#/components/schemas/Payeezy'
          Payflow: '#/components/schemas/Payflow'
          PaymentAsia: '#/components/schemas/PaymentAsia'
          PaymenTechnologies: '#/components/schemas/PaymenTechnologies'
          PaymentsOS: '#/components/schemas/PaymentsOS'
          Paymero: '#/components/schemas/Paymero'
          Payper: '#/components/schemas/Payper'
          Payr: '#/components/schemas/Payr'
          PayRedeem: '#/components/schemas/PayRedeem'
          PayRetailers: '#/components/schemas/PayRetailers'
          Paysafe: '#/components/schemas/Paysafe'
          Paysafecard: '#/components/schemas/Paysafecard'
          Paysafecash: '#/components/schemas/Paysafecash'
          PayTabs: '#/components/schemas/PayTabs'
          PayU: '#/components/schemas/PayU'
          PayULatam: '#/components/schemas/PayULatam'
          Payvision: '#/components/schemas/Payvision'
          PharosPayments: '#/components/schemas/PharosPayments'
          Piastrix: '#/components/schemas/Piastrix'
          Pin4Pay: '#/components/schemas/Pin4Pay'
          Plugnpay: '#/components/schemas/Plugnpay'
          PostFinance: '#/components/schemas/PostFinance'
          PSiGate: '#/components/schemas/PSiGate'
          PPRO: '#/components/schemas/PPRO'
          Prosa: '#/components/schemas/Prosa'
          Rapyd: '#/components/schemas/Rapyd'
          RPN: '#/components/schemas/RPN'
          Realex: '#/components/schemas/Realex'
          Realtime: '#/components/schemas/Realtime'
          Redsys: '#/components/schemas/Redsys'
          Rotessa: '#/components/schemas/Rotessa'
          Safecharge: '#/components/schemas/Safecharge'
          SaltarPay: '#/components/schemas/SaltarPay'
          SMSVoucher: '#/components/schemas/SMSVoucher'
          Sofort: '#/components/schemas/Sofort'
          Sagepay: '#/components/schemas/Sagepay'
          SeamlessChex: '#/components/schemas/SeamlessChex'
          SecureTrading: '#/components/schemas/SecureTrading'
          SecurionPay: '#/components/schemas/SecurionPay'
          Skrill: '#/components/schemas/Skrill'
          SmartInvoice: '#/components/schemas/SmartInvoice'
          SparkPay: '#/components/schemas/SparkPay'
          StaticGateway: '#/components/schemas/StaticGateway'
          STPMexico: '#/components/schemas/STPMexico'
          Stripe: '#/components/schemas/Stripe'
          Telr: '#/components/schemas/Telr'
          TestProcessor: '#/components/schemas/TestProcessor'
          ToditoCash: '#/components/schemas/ToditoCash'
          Truevo: '#/components/schemas/Truevo'
          TrustsPay: '#/components/schemas/TrustsPay'
          Trustly: '#/components/schemas/Trustly'
          TWINT: '#/components/schemas/TWINT'
          Unlimit: '#/components/schemas/Unlimit'
          UPayCard: '#/components/schemas/UPayCard'
          USAePay: '#/components/schemas/USAePay'
          VantivLitle: '#/components/schemas/VantivLitle'
          VCreditos: '#/components/schemas/VCreditos'
          VegaWallet: '#/components/schemas/VegaWallet'
          Wallet88: '#/components/schemas/Wallet88'
          Walpay: '#/components/schemas/Walpay'
          WesternUnion: '#/components/schemas/WesternUnion'
          Wirecard: '#/components/schemas/Wirecard'
          WorldlineAtosFrankfurt: '#/components/schemas/WorldlineAtosFrankfurt'
          Worldpay: '#/components/schemas/Worldpay'
          Zotapay: '#/components/schemas/Zotapay'
          eMerchantPay: '#/components/schemas/eMerchantPay'
          ecoPayz: '#/components/schemas/ecoPayz'
          iCanPay: '#/components/schemas/iCanPay'
          iCheque: '#/components/schemas/iCheque'
          iDebit: '#/components/schemas/iDebit'
          vegaaH: '#/components/schemas/vegaaH'
          XPay: '#/components/schemas/XPay'
          Zimpler: '#/components/schemas/Zimpler'
      properties:
        id:
          type: string
          description: ID of the payment gateway account.
          readOnly: true
          maxLength: 50
          example: gw_acc_0YVCXMF26DDNKAERE5NW727S34
        gatewayName:
          $ref: '#/components/schemas/GatewayName'
        acquirerName:
          default: Other
          allOf:
            - $ref: '#/components/schemas/AcquirerName'
        method:
          $ref: '#/components/schemas/PaymentMethod'
        acceptedCurrencies:
          description: Accepted currencies. An array of ISO 4217 currency codes.
          type: array
          items:
            type: string
        paymentCardSchemes:
          description: Accepted payment card brands.
          type: array
          items:
            $ref: '#/components/schemas/PaymentCardBrand'
        status:
          description: Status of the gateway account.
          readOnly: true
          type: string
          enum:
            - active
            - inactive
            - pending
            - closed
        merchantCategoryCode:
          description: Merchant category code of the payment gateway account.
          type: string
          pattern: ^[0-9]{4}$
          default: '0000'
        dccMarkup:
          description: Dynamic currency conversion markup in basis points.
          type:
            - integer
            - 'null'
          minimum: -10000
          maximum: 10000
        dccForceCurrency:
          type:
            - string
            - 'null'
          description: >-
            Forces Dynamic Currency Conversion (DCC) to the specified currency
            on each sale.

            To disable forced DCC, leave this field empty.
        dccForceRounding:
          type: boolean
          default: false
          description: >-
            Specifies that DCC quote amounts must be rounded half up to the
            nearest whole number.
        descriptor:
          description: Gateway account descriptor value.
          type:
            - string
            - 'null'
        cityField:
          description: >-
            Gateway account city field. This value is also known as a line 2
            descriptor.
          type:
            - string
            - 'null'
        excludedDccQuoteCurrencies:
          description: Excluded Dynamic Currency Conversion (DCC) quote currencies.
          type: array
          items:
            type: string
        monthlyLimit:
          description: >-
            Monthly limit on the amount money that the gateway account can
            process.
          type:
            - number
            - 'null'
          format: double
          minimum: 0
        approvalWindowTtl:
          description: >-
            Allotted time, in seconds, in which an offsite transaction must be
            approved before it is automatically `abandoned`.
          type: integer
          default: 3600
          minimum: 300
          maximum: 16777215
        reconciliationWindowEnabled:
          description: >-
            Specifies that if a transaction is not reconciled within the
            `reconciliationWindowTtl` time, the transaction is marked as
            `abandoned`.
          type: boolean
          default: false
        reconciliationWindowTtl:
          description: >-
            Allotted time, in seconds, in which a reconciliation must occur
            before it is automatically `abandoned`.
          type:
            - integer
            - 'null'
          minimum: 300
          maximum: 16777215
        threeDSecure:
          description: Specifies if a gateway account allows 3D Secure.
          type: boolean
          default: false
        dynamicDescriptor:
          description: Specifies if a gateway allows dynamic descriptors.
          type: boolean
          default: false
        digitalWallets:
          $ref: '#/components/schemas/DigitalWallets'
        isDown:
          description: Specifies if a gateway is in a downtime period.
          type: boolean
          readOnly: true
        additionalFilters:
          description: >-
            Additional filters used to determine if the gateway account can be
            selected to process a transaction.


            For example, the filter may place a maximum amount value on
            transaction.

            If a transaction exceeds this value, the gateway account is not
            used.


            For more information see,

            [Using
            filters](https://www.rebilly.com/docs/dev-docs/search-filters).
          type:
            - string
            - 'null'
          example: amount:1..100;bin:411111,444433
        timeout:
          description: Gateway account request timeout, in seconds.
          type:
            - integer
            - 'null'
          minimum: 10
          maximum: 120
        token:
          description: Gateway account token.
          type:
            - string
            - 'null'
          readOnly: true
          example: TwiX3f92k4AiBE27BzTbQ38hHjicBz_w
        sticky:
          description: >-
            Specifies if all future payments by the customer's payment
            instrument are processed by this gateway account.


            For more information, see [Gateway
            routing](https://www.rebilly.com/docs/settings/intelligent-payment-routing/#sticky-gateway-accounts).
          type: boolean
          default: true
        setupInstruction:
          type: string
          default: do-nothing
          description: >-
            Creates zero, one, or more child transactions such as `authorize`
            and `void`.

            The transactions are linked to the `setup` transaction by the
            `parentTransactionId` relationship.
          enum:
            - authorize
            - authorize-and-void
            - sca
            - do-nothing
          x-enumDescriptions:
            authorize: >-
              Creates an `authorize` transaction in the amount and currency of
              the request.
            authorize-and-void: >-
              Creates an `authorize` transaction followed by a `void`, if the
              `authorize` is approved.

              If the request amount is $0, then a $1 authorize is created.
              Otherwise the request amount is used.
            sca: >-
              Uses Strong Customer Authentication (SCA) without an `authorize`
              transaction.

              SCA includes 3DS, and specific wallet behavior,

              such as setting up a billing agreement with PayPal.
            do-nothing: |-
              Does nothing except return an approved `setup` transaction.
              This is the default behavior.
        readyToPayoutInstruction:
          type: string
          default: none
          description: >-
            Defines the mode of gateway payout behaviour for the [Ready to
            payout](https://www.rebilly.com/catalog/all/storefront-purchases/storefrontpostreadytopayout)
            operation.
          enum:
            - all
            - covered-payout
            - approved-payment
            - none
          x-enumDescriptions:
            all: Payout any amount from this gateway.
            covered-payout: >-
              Payout from this gateway if it previously processed a payment for
              the same,

              or a greater, amount.
            approved-payment: >-
              Payout any amount from this gateway if it processed an earlier
              payment.

              The customer must have a previously approved transaction,

              in the same currency, on this gateway.
            none: >-
              Do not allow any payouts with this gateway. This is the default
              value, merchants must opt into payouts.
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        organizationId:
          deprecated: true
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/OrganizationId'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - onBoardingUrl
                  - dynamicIpnUrl
                  - staticIpnUrl
    A1Gateway:
      description: A1Gateway gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: A1Gateway credentials object.
              properties:
                accountId:
                  type: string
                  description: ID of the A1Gateway account.
                password:
                  type: string
                  description: A1Gateway password.
                  format: password
                  writeOnly: true
              required:
                - accountId
                - password
    ThreeDSecureIO3dsServer:
      description: ThreeDSecureIO 3DS Server.
      type: object
      required:
        - name
        - acquirerMerchantIdVisa
        - acquirerMerchantIdMastercard
        - merchantName
        - merchantAcquirerBinVisa
        - merchantAcquirerBinMastercard
        - merchantCountry
        - merchantUrl
        - transactionType
      properties:
        name:
          type: string
          description: Merchant plug-in name.
          enum:
            - ThreeDSecureIO3dsServer
        acquirerMerchantIdVisa:
          type: string
          description: Merchant ID (MID) of the Visa acquirer.
          maxLength: 35
        acquirerMerchantIdMastercard:
          type: string
          description: Merchant ID (MID) of the Mastercard acquirer.
          maxLength: 35
        acquirerMerchantIdAmex:
          type: string
          description: Merchant ID (MID) of the American Express acquirer.
          maxLength: 35
        acquirerMerchantIdDiscover:
          type: string
          description: Merchant ID (MID) of the Discover/Diners acquirer.
          maxLength: 35
        acquirerMerchantIdJcb:
          type: string
          description: Merchant ID (MID) of the JCB acquirer.
          maxLength: 35
        merchantName:
          type: string
          description: Name of the merchant.
          maxLength: 40
        merchantAcquirerBinVisa:
          type: string
          description: BIN of the Visa acquirer.
          minLength: 6
          maxLength: 11
        merchantAcquirerBinMastercard:
          type: string
          description: BIN of the Mastercard acquirer.
          minLength: 6
          maxLength: 11
        merchantAcquirerBinAmex:
          type: string
          description: BIN of the American Express acquirer.
          minLength: 6
          maxLength: 11
        merchantAcquirerBinDiscover:
          type: string
          description: BIN of the Discover/Diners acquirer.
          minLength: 6
          maxLength: 11
        merchantAcquirerBinJcb:
          type: string
          description: BIN of the JCB acquirer.
          minLength: 6
          maxLength: 11
        merchantCountry:
          type: string
          description: Merchant country in ISO Alpha-2 code format.
          maxLength: 2
          example: US
        merchantUrl:
          type: string
          description: URL of the merchant's website.
          maxLength: 2048
        transactionType:
          type: string
          enum:
            - '01'
            - '03'
            - '10'
            - '11'
            - '28'
          description: Identifies the type of transaction that is being authenticated.
          x-enumDescriptions:
            '1': Goods/Service purchase.
            '3': Check acceptance.
            '10': Account funding.
            '11': Quasi-Cash transaction. Indicates the type of 3RI request.
            '28': Prepaid activation and load.
        declineNotEnrolled:
          type: boolean
          description: >-
            Specifies whether to decline transactions if a payment card is not
            enrolled.
          default: false
        use3dsForMerchantInitiated:
          type: boolean
          description: Specifies whether to use 3DS for merchant initiated transactions.
          default: false
        threeRIInd:
          type: string
          enum:
            - '01'
            - '02'
            - '03'
            - '04'
            - '05'
            - '06'
            - '07'
            - '08'
            - '09'
            - '10'
            - '11'
          description: |-
            Indicates the type of 3RI request.
            Values 06 - 11 are only supported in 3DS 2.2.0.
          x-enumDescriptions:
            '10': Whitelist status check.
            '11': Other payment.
            '01': Recurring transaction.
            '02': Instalment transaction.
            '03': Add card.
            '04': Maintain card information.
            '05': Account verification.
            '06': Split/delayed shipment.
            '07': Top-up.
            '08': Mail order.
            '09': Telephone order.
    ACI:
      description: ACI gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: ACI credentials object.
              properties:
                entityId:
                  type: string
                accessToken:
                  type: string
                  format: password
                  writeOnly: true
              required:
                - entityId
                - accessToken
            settings:
              type: object
              description: ACI settings object.
              properties:
                url:
                  type: string
                  description: ACI custom server URL.
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    Adyen:
      description: Adyen gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              description: Adyen credentials object.
              properties:
                merchantAccount:
                  type: string
                  description: Adyen merchant account.
                apiKey:
                  type: string
                  description: Adyen API key.
                  format: password
                  writeOnly: true
              required:
                - merchantAccount
                - apiKey
            settings:
              type: object
              description: Adyen settings object.
              properties:
                store:
                  type: string
                  description: >-
                    E-commerce or point-of-sale store that is processing the
                    payment.
                  minLength: 1
                  maxLength: 16
                url:
                  type: string
                  description: Adyen post URL.
                splitPayments:
                  type: array
                  description: Adyen split payments.
                  items:
                    type: object
                    properties:
                      percentage:
                        description: Percentage of the transaction amount.
                        type: number
                        format: double
                        minimum: 0
                        maximum: 100
                        example: 0.5
                      commissionAmount:
                        description: Fixed commission amount in minor units.
                        type: number
                        format: integer
                        example: 100
                      currency:
                        $ref: '#/components/schemas/CurrencyCode'
                      account:
                        description: >-
                          ID of the balance account where the split amount is
                          sent.
                        type: string
                      merchantCountry:
                        description: >-
                          Two-letter ISO 3166 alpha-2 code of the merchant's
                          country.
                        type: string
                        example: US
                      type:
                        description: Account type of the split payment.
                        type: string
                        enum:
                          - BalanceAccount
                          - Commission
                          - Remainder
                          - PaymentFee
                totalTaxRate:
                  type: number
                  format: double
                  description: >-
                    Total tax percentage as a decimal. Use this field to
                    calculate the total tax amount to send with level 2 enhanced
                    scheme data.
                  example: 5.5
                  minimum: 0.01
                  maximum: 100
                enableMoto:
                  type: boolean
                  description: Specifies whether to use Mail Order Telephone Order (MOTO).
                  default: false
                  example: false
              required:
                - url
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    Aircash:
      description: Aircash gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Aircash credentials object.
              properties:
                partnerId:
                  type: string
                  description: ID of the Aircash partner.
                privateKey:
                  writeOnly: true
                  type: string
                  description: Private key of the Aircash partner.
                  format: password
                  x-multiline: true
                privateKeyPassword:
                  writeOnly: true
                  type: string
                  description: Private key password of the Aircash partner.
                  format: password
              required:
                - partnerId
                - privateKey
                - privateKeyPassword
    Airpay:
      description: Airpay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Airpay credentials object.
              properties:
                username:
                  type: string
                  description: Airpay username.
                merchantId:
                  type: string
                  description: ID of the Airpay merchant.
                password:
                  writeOnly: true
                  type: string
                  description: Airpay password.
                  format: password
                apiKey:
                  type: string
                  description: Airpay API key.
                  format: password
                  writeOnly: true
              required:
                - username
                - merchantId
                - password
                - apiKey
    Airwallex:
      description: Airwallex gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Airwallex credentials object.
              properties:
                clientId:
                  type: string
                  description: Airwallex client ID.
                apiKey:
                  type: string
                  description: Airwallex API key.
                  format: password
                  writeOnly: true
              required:
                - clientId
                - apiKey
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    AmazonPay:
      description: AmazonPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantId:
                  type: string
                  description: ID of the AmazonPay merchant.
                storeId:
                  type: string
                  description: ID of the AmazonPay store.
                publicKeyId:
                  type: string
                  description: ID of the AmazonPay public key.
                privateKey:
                  description: ID of the AmazonPay private key.
                  type: string
                  format: password
                  x-multiline: true
                  writeOnly: true
              required:
                - privateKey
                - storeId
                - publicKeyId
                - merchantId
    AmexVPC:
      description: AmexVPC gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              description: AmexVPC credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the AmexVPC merchant.
                accessCode:
                  type: string
                  description: AmexVPC access Code.
                  format: password
                  writeOnly: true
                user:
                  type: string
                  description: >-
                    AmexVPC account user. This field is used for refund, void,
                    and capture transactions.
                password:
                  type: string
                  description: >-
                    AmexVPC account password. This field is used for refund,
                    void, and capture transactions.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - accessCode
                - user
                - password
            settings:
              type: object
              description: AmexVPC settings object.
              properties:
                url:
                  type: string
                  description: Virtual payment client URL.
              required:
                - url
    ApcoPay:
      description: ApcoPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: ApcoPay credentials object.
              properties:
                profileID:
                  type: string
                  description: ID of the ApcoPay profile.
                secretWord:
                  type: string
                  description: ApcoPay secret word.
                  format: password
                  writeOnly: true
                MerchantID:
                  type: string
                  description: ID of the ApcoPay merchant.
                MerchantPassword:
                  type: string
                  description: ApcoPay merchant password.
                  format: password
                  writeOnly: true
              required:
                - profileID
                - secretWord
                - MerchantID
                - MerchantPassword
            settings:
              type: object
              properties:
                method:
                  type: string
                  description: ApcoPay method.
                  enum:
                    - AFTERPAY
                    - BANCONTACT
                    - CREDITCLICK
                    - FLEXEPIN
                    - IDEAL
                    - JPAY
                    - OCTAPAY
                    - ONLINEUBERWEISEN
                    - ORIENTALWALLET
                    - VENUSPOINT
                    - ZIMPLER
              required:
                - method
    AsiaPaymentGateway:
      description: AsiaPaymentGateway gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: AsiaPaymentGateway credentials object.
              properties:
                merchantNumber:
                  type: string
                  description: AsiaPaymentGateway merchant number.
                secretKey:
                  type: string
                  description: AsiaPaymentGateway secret key for hash.
                  format: password
                  writeOnly: true
              required:
                - merchantNumber
                - secretKey
            settings:
              type: object
              properties:
                use3DSEndpoint:
                  type: boolean
                  description: Specifies whether to use a 3DS endpoint.
    AstroPayCard:
      description: AstroPay Card gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: AstroPay Card credentials object.
              properties:
                x_login:
                  type: string
                  description: AstroPay Card login.
                x_tran_key:
                  type: string
                  description: AstroPay Card transaction key.
                  format: password
                  writeOnly: true
                secret_key:
                  type: string
                  description: AstroPay Card secret key.
                  format: password
                  writeOnly: true
                api_key:
                  type: string
                  description: OneTouch Astropay API key.
                  format: password
                  writeOnly: true
              required:
                - x_login
                - x_tran_key
                - secret_key
            settings:
              type: object
              description: AstroPay Card settings object.
              properties:
                oneTouchApi:
                  type: boolean
                  description: Specifies whether to use a OneTouch AstroPay API.
                  default: false
                useOneTouchSdk:
                  type: boolean
                  description: Specifies whether to use the OneTouch AstroPay SDK.
                  default: false
                merchantName:
                  type: string
                  description: Displayed merchant name for AstroPay OneTouch.
                merchantLogoUrl:
                  type: string
                  description: Displayed merchant logo for AstroPay OneTouch.
    AuthorizeNet:
      description: AuthorizeNet gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                apiLoginId:
                  type: string
                  description: ID of the AuthorizeNet API login.
                transactionKey:
                  description: AuthorizeNet transaction key.
                  type: string
                  format: password
                  writeOnly: true
              required:
                - apiLoginId
                - transactionKey
    Awepay:
      description: Awepay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Awepay credentials object.
              properties:
                sid:
                  type: string
                  description: ID of the Awepay site.
                rcode:
                  type: string
                  description: Awepay rcode.
                  format: password
                  writeOnly: true
                secretKey:
                  type: string
                  description: Awepay secret key for the P2P REST API.
                  format: password
                  writeOnly: true
              required:
                - sid
                - rcode
            settings:
              type: object
              description: Awepay setting.
              properties:
                useP2pRest:
                  type: boolean
                  description: Specifies whether to use the P2P REST API.
    Bambora:
      description: Bambora gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantId:
                  type: string
                  description: ID of the Bambora merchant.
                apiPasscode:
                  type: string
                  description: Bambora API passcode.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - apiPasscode
    BankSEND:
      description: BankSEND gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: BankSEND credentials object.
              properties:
                merchantId:
                  description: ID of the BankSEND merchant.
                  type: string
                merchantToken:
                  type: string
                  format: password
                  description: BankSEND merchant token.
                  writeOnly: true
              required:
                - merchantId
                - merchantToken
    BitPay:
      description: BitPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: BitPay credentials object.
              properties:
                token:
                  type: string
                  description: BitPay merchant API token.
                  format: password
                  writeOnly: true
              required:
                - token
    BlueSnap:
      description: BlueSnap gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: BlueSnap credentials object.
              properties:
                username:
                  type: string
                  description: API username of the BlueSnap merchant.
                merchantId:
                  type: string
                  description: ID of the BlueSnap merchant.
                password:
                  type: string
                  description: API password of the BlueSnap merchant.
                  format: password
                  writeOnly: true
                dataProtectionKey:
                  type: string
                  description: Data protection key of the BlueSnap merchant.
                  format: password
                  writeOnly: true
              required:
                - username
                - password
            settings:
              type: object
              properties:
                enableMoto:
                  type: boolean
                  description: Specifies whether to use Mail Order Telephone Order (MOTO).
                  default: false
                salesTaxAmount:
                  type: number
                  format: double
                  description: Sales tax amount as a decimal to send with level 2/3 data.
                  example: 0.06
                metadataCustomField:
                  type: string
                  description: >-
                    Rebilly custom field to use for sending transaction
                    metadata.
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    BraintreePayments:
      description: BraintreePayments gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                publicKey:
                  type: string
                  description: BraintreePayments public key.
                privateKey:
                  type: string
                  description: BraintreePayments private key.
                  format: password
                  writeOnly: true
                merchantId:
                  type: string
                  description: ID of the BraintreePayments merchant.
                  format: password
                  writeOnly: true
                merchantAccountId:
                  type: string
                  description: ID of the BraintreePayments merchant account.
                  format: password
                  writeOnly: true
              required:
                - publicKey
                - privateKey
                - merchantId
                - merchantAccountId
    Buckaroo:
      description: Buckaroo gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Buckaroo credentials object.
              properties:
                schemeKey:
                  type: string
                  description: Scheme key.
                websiteKey:
                  type: string
                  description: Website key.
                secretKey:
                  description: Secret key.
                  type: string
                  format: password
              required:
                - websiteKey
                - secretKey
    BVNK:
      description: BVNK gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: BVNK credentials object.
              properties:
                merchantId:
                  type: string
                  description: Merchant ID of the BVNK merchant.
                hawkAuthId:
                  type: string
                  description: HAWK auth ID.
                  format: password
                  writeOnly: true
                hawkAuthKey:
                  type: string
                  description: HAWK auth key.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - hawkAuthId
                - hawkAuthKey
            settings:
              type: object
              description: BVNK settings object.
              properties:
                payoutCurrency:
                  type: string
                  description: Cryptocurrency of the payout.
                payoutNetwork:
                  type: string
                  description: Blockchain network to use for the payout.
    CASHlib:
      description: CASHlib gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: CASHlib credentials object.
              properties:
                apiKey:
                  type: string
                  description: CASHlib API key.
                  format: password
                  writeOnly: true
                merchantId:
                  type: string
                  description: ID of the CASHlib merchant.
              required:
                - apiKey
                - merchantId
    CODVoucher:
      description: CODVoucher gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: CODVoucher credentials object.
              properties:
                apiKey:
                  type: string
                  description: CODVoucher API key.
                  format: password
                  writeOnly: true
                apiSecret:
                  type: string
                  description: CODVoucher API secret.
                  format: password
                  writeOnly: true
              required:
                - apiKey
                - apiSecret
    AmountAdjustmentTolerance:
      type: integer
      description: Tolerance percentage for the settled amount.
      minimum: 0
      maximum: 5
      example: 5
    Coinbase:
      description: Coinbase gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Coinbase credentials object.
              properties:
                apiKey:
                  type: string
                  format: password
                  writeOnly: true
              required:
                - apiKey
            settings:
              type: object
              description: Coinbase settings object.
              required:
                - tolerancePercentage
              properties:
                tolerancePercentage:
                  $ref: '#/components/schemas/AmountAdjustmentTolerance'
    CoinGate:
      description: CoinGate gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              properties:
                authToken:
                  type: string
                  format: password
                  description: Authentication token.
                  writeOnly: true
              required:
                - authToken
            settings:
              type: object
              properties:
                targetCurrency:
                  description: |-
                    Currency to which the received cryptocurrency is converted.
                    This field defaults to the transaction currency.
                  type: string
                  minLength: 3
                  maxLength: 3
                  example: USD
                tolerancePercentage:
                  $ref: '#/components/schemas/AmountAdjustmentTolerance'
                adjustAmount:
                  type: boolean
                  description: >-
                    Specifies whether to adjust the amount that is received from
                    the downstream gateway.
                  default: false
                  example: false
    CoinPayments:
      description: CoinPayments gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: CoinPayments credentials object.
              required:
                - publicKey
                - privateKey
                - ipnSecret
              properties:
                publicKey:
                  type: string
                  description: CoinPayments public key.
                privateKey:
                  type: string
                  format: password
                  description: CoinPayments private key.
                  writeOnly: true
                ipnSecret:
                  type: string
                  format: password
                  description: CoinPayments IPN secret.
                  writeOnly: true
                merchantId:
                  type: string
                  format: password
                  description: ID of the CoinPayments merchant.
                  writeOnly: true
            settings:
              type: object
              properties:
                useCallbackAddress:
                  type: boolean
                  description: Specifies whether to use a callback address payment type.
    Cardknox:
      description: Cardknox gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                xKey:
                  type: string
                  description: Cardknox xKey.
                  format: password
                  writeOnly: true
              required:
                - xKey
    Cashflows:
      description: Cashflows gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                authenticationId:
                  type: string
                  description: ID of the Cashflows authentication.
                authPassword:
                  type: string
                  description: ID of the Cashflows authentication password.
                  format: password
                  writeOnly: true
              required:
                - authPassword
                - authId
    Cashterminal:
      description: Cashterminal gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                secretKey:
                  description: Cashterminal secret key.
                  type: string
                  format: password
                  writeOnly: true
              required:
                - secretKey
    CashToCode:
      description: CashToCode gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: CashToCode credentials object.
              properties:
                cashToCodeUsername:
                  type: string
                  description: CashToCode credentials username.
                cashToCodePassword:
                  type: string
                  description: CashToCode credentials password.
                  format: password
                  writeOnly: true
                merchantUsername:
                  type: string
                  description: Merchant credentials username.
                merchantPassword:
                  type: string
                  description: Merchant credentials password.
                  format: password
                  writeOnly: true
                mid:
                  type: string
                  description: CashToCode Merchant Identifier Number (MID) or brand name.
              required:
                - cashToCodeUsername
                - cashToCodePassword
                - merchantUsername
                - merchantPassword
            settings:
              type: object
              properties:
                baseUrl:
                  type: string
                  description: Base API URL.
                skipAmountSelection:
                  type: boolean
                  description: Specifies whether to skip the amount selection screen.
                  default: false
                amounts:
                  type: array
                  description: Amounts for which transactions are processed.
                  items:
                    type: number
                    format: double
                    minimum: 0
    CauriPayment:
      description: CauriPayment gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: CauriPayment credentials object.
              properties:
                publicKey:
                  type: string
                  description: CauriPayment merchant public key.
                privateKey:
                  type: string
                  description: CauriPayment merchant private key.
                  format: password
                  writeOnly: true
              required:
                - publicKey
                - privateKey
    Cayan:
      description: Cayan gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantSiteId:
                  type: string
                  description: ID of the Cayan merchant site.
                merchantName:
                  type: string
                  description: Cayan merchant name.
                merchantKey:
                  type: string
                  description: Cayan merchant key.
                  format: password
                  writeOnly: true
              required:
                - merchantSiteId
                - merchantName
                - merchantKey
    CCAvenue:
      description: CCAvenue gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: CCAvenue credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the CCAvenue merchant.
                accessCode:
                  type: string
                  description: CCAvenue access code.
                  format: password
                  writeOnly: true
                workingKey:
                  type: string
                  description: CCAvenue working key.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - accessCode
                - workingKey
            settings:
              type: object
              properties:
                useStandingInstructionApi:
                  description: Specifies whether to use the Standing Instruction API.
                  type: boolean
                  default: false
    Chase:
      description: Chase gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                username:
                  type: string
                  description: Chase NetConnect username.
                password:
                  type: string
                  description: Chase NetConnect password.
                  format: password
                  writeOnly: true
                coNumber:
                  type: string
                  description: Chase CO number used for delimited file reports.
                divisionId:
                  type: string
                  description: ID of the Chase division.
                partialAuth:
                  type: boolean
                  description: Specifies whether to support partial authentications.
                  default: false
              required:
                - username
                - password
                - coNumber
                - divisionId
                - partialAuth
    CheckoutCom:
      description: Checkout.com gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Checkout.com credentials object.
              properties:
                secretKey:
                  type: string
                  format: password
                  description: Checkout.com secret API key.
                  writeOnly: true
              required:
                - secretKey
            settings:
              type: object
              properties:
                markAsWaitingGatewayOnPendingPayout:
                  type: boolean
                  description: >-
                    Specifies whether to mark pending payouts as
                    'waiting-gateway/unknown' instead of 'approved'.
                  default: false
                subEntityIdWebsiteCustomField:
                  type: string
                  description: >-
                    Name of the website custom field that contains the
                    sub-entity ID.
                processingChannelId:
                  type: string
                  description: Checkout.com processing channel ID.
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    Chillstock:
      description: Chillstock gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Chillstock credentials object.
              properties:
                merchantId:
                  type: string
                  description: Merchant ID (MID).
                privateKey:
                  type: string
                  description: Chillstock private key.
                  format: password
                  x-multiline: true
                  writeOnly: true
                publicKey:
                  type: string
                  description: Chillstock public key.
              required:
                - merchantId
                - privateKey
            settings:
              type: object
              properties:
                sandbox:
                  type: boolean
                  description: Specifies if the gateway account is forced to sandbox mode.
                  default: false
    Circle:
      description: Circle gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Circle credentials object.
              properties:
                apiKey:
                  type: string
                  format: password
                  description: Circle API key.
                  writeOnly: true
              required:
                - apiKey
    Citadel:
      description: Citadel gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Citadel credentials object.
              properties:
                storeName:
                  type: string
                  description: Citadel store name.
                storeId:
                  type: string
                  description: ID of the Citadel store.
                username:
                  type: string
                  description: Citadel username.
                password:
                  type: string
                  description: Citadel password.
                  format: password
                  writeOnly: true
              required:
                - storeName
                - storeId
                - username
                - password
    Clearhaus:
      description: Clearhaus gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                apiKey:
                  type: string
                  description: Clearhaus API key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
    Cleo:
      description: Cleo gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Cleo credentials object.
              properties:
                accessToken:
                  type: string
                  description: Cleo access token.
                  format: password
                  writeOnly: true
              required:
                - accessToken
    Conekta:
      description: Conekta gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Conekta credentials object.
              properties:
                apiKey:
                  type: string
                  description: Conekta private API key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
            settings:
              type: object
              description: Conekta settings object.
              properties:
                baseUrl:
                  type: string
                  description: Base API URL.
    Coppr:
      description: Coppr gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Coppr credentials object.
              properties:
                organizationId:
                  type: string
                  description: ID of the Coppr organization.
                apiKey:
                  type: string
                  description: Coppr API key.
                  format: password
                  writeOnly: true
              required:
                - organizationId
                - apiKey
            settings:
              type: object
              description: Coppr settings object.
              properties:
                rebillyPublishableKey:
                  type: string
                  description: >-
                    Rebilly publishable API key.

                    If this value is provided, a payment token is created for
                    each transaction.

                    To obtain an API key, see [Manage API
                    keys](https://www.rebilly.com/docs/dev-docs/api-keys/#manage-api-keys).
    Credorax:
      description: Credorax gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantId:
                  type: string
                  description: ID of the Credorax merchant.
                merchantMd5Signature:
                  type: string
                  description: Credorax MD5 signature.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - merchantMd5Signature
    Cryptonator:
      description: Cryptonator gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Cryptonator credentials object.
              properties:
                merchant_id:
                  type: string
                  description: ID of the Cryptonator merchant.
                secret:
                  type: string
                  description: Cryptonator secret.
                  format: password
                  writeOnly: true
              required:
                - merchant_id
                - secret
    CyberSource:
      description: CyberSource gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: CyberSource credentials object.
              properties:
                accessKey:
                  type: string
                  description: CyberSource access key.
                profileId:
                  type: string
                  description: ID of the CyberSource profile.
                secretKey:
                  type: string
                  description: CyberSource secret key.
                  format: password
                  writeOnly: true
              required:
                - accessKey
                - profileId
                - secretKey
    DataCash:
      description: DataCash gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                client:
                  type: string
                  description: DataCash client.
                password:
                  type: string
                  description: DataCash password.
                  format: password
                  writeOnly: true
                reportGroup:
                  type: string
                  description: DataCash report group.
                reportUser:
                  type: string
                  description: DataCash report user.
                reportPassword:
                  type: string
                  description: DataCash report password.
                  format: password
                  writeOnly: true
                visaPayoutsClient:
                  type: string
                  description: >-
                    DataCash client for Visa OCT (Original Credit Transfer)
                    payouts.
                visaPayoutsPassword:
                  type: string
                  description: >-
                    DataCash password for Visa OCT (Original Credit Transfer)
                    payouts.
                  format: password
                  writeOnly: true
                masterCardPayoutsClient:
                  type: string
                  description: >-
                    DataCash client for MasterCard OCT (Original Credit
                    Transfer) payouts.
                masterCardPayoutsPassword:
                  type: string
                  description: >-
                    DataCash password for MasterCard OCT (Original Credit
                    Transfer) payouts.
                  format: password
                  writeOnly: true
              required:
                - client
                - password
            settings:
              type: object
              description: Datacash settings object.
              properties:
                policy:
                  type: integer
                  description: Policy.
                  minimum: 0
                  maximum: 7
                  default: 2
                delay:
                  type: integer
                  description: Automatic capture delay in hours.
                  minimum: 0
                  default: 0
    Dengi:
      description: Dengi gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                projectId:
                  type: string
                  description: ID of the Dengi project.
                publicKey:
                  type: string
                  description: Dengi public key.
                  format: password
                  writeOnly: true
                refundKey:
                  type: string
                  description: Dengi refund key.
                  format: password
                  writeOnly: true
              required:
                - projectId
                - publicKey
                - refundKey
    Dimoco:
      description: Dimoco gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantId:
                  type: string
                  description: ID of the Dimoc merchant.
                orderId:
                  type: string
                  description: ID of the Dimoc project.
                password:
                  type: string
                  format: password
                  description: ID of the Dimoc project.
                  writeOnly: true
              required:
                - merchantId
                - orderId
                - password
    dLocal:
      description: dLocal gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                xLogin:
                  type: string
                  description: dLocal login.
                xTransKey:
                  type: string
                  description: dLocal transKey.
                secretKey:
                  type: string
                  format: password
                  description: dLocal secret key.
                  writeOnly: true
                xPayoutLogin:
                  type: string
                  description: dLocal payout login.
                xPayoutTransKey:
                  type: string
                  description: dLocal payout transKey.
                payoutSecretKey:
                  type: string
                  format: password
                  description: dLocal payout secret key.
                  writeOnly: true
              required:
                - xLogin
                - xTransKey
                - secretKey
            settings:
              type: object
              description: dLocal settings object.
              properties:
                createInstallmentPlan:
                  type: boolean
                  default: false
                  description: >-
                    Specifies whether to create an installment plan and use it
                    for payment.
                customerDocumentCustomField:
                  type: string
                  description: >-
                    Name of the custom field which contains customer document.

                    Use this setting to skip the intermediate step of collecting
                    the customer document for payment card transactions.
    Dragonphoenix:
      description: Dragonphoenix gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Dragonphoenix credentials object.
              properties:
                sid:
                  type: string
                  description: ID of the Dragonphoenix site.
                rcode:
                  type: string
                  description: Dragonphoenix rcode.
                  format: password
                  writeOnly: true
              required:
                - sid
                - rcode
    Dropayment:
      description: Dropayment gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Dropayment credentials object.
              properties:
                login:
                  type: string
                  description: Dropayment login.
                endpointId:
                  type: string
                  description: ID of the Dropayment end point.
                secretKey:
                  type: string
                  description: Dropayment secret key.
                  format: password
                  writeOnly: true
              required:
                - login
                - endpointId
                - secretKey
    Directa24Banks:
      type: string
      enum:
        - AA
        - AL
        - AZ
        - B
        - BAB
        - BB
        - BC
        - BE
        - BL
        - BM
        - BN
        - BP
        - BQ
        - BU
        - BV
        - BW
        - BX
        - BZ
        - CA
        - CE
        - CI
        - CU
        - EF
        - EN
        - EY
        - FA
        - FB
        - FC
        - GC
        - GG
        - HC
        - I
        - IA
        - IB
        - JM
        - LC
        - LE
        - LL
        - MC
        - ME
        - MD
        - MP
        - MT
        - NB
        - OM
        - OX
        - PC
        - PH
        - PL
        - SB
        - SC
        - SE
        - SF
        - SM
        - SS
        - ST
        - SU
        - TC
        - TK
        - TG
        - TR
        - TY
        - RY
        - UB
        - UI
        - UL
        - US
        - VD
        - VI
        - WA
        - WP
        - WU
        - XA
    Directa24:
      description: Directa24 gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Directa24 credentials object.
              properties:
                x_login:
                  type: string
                  description: Directa24 login.
                x_tran_key:
                  type: string
                  description: Directa24 transaction key.
                  format: password
                  writeOnly: true
                secret_key:
                  type: string
                  description: Directa24 secret key.
                  format: password
                  writeOnly: true
                web_pay_login:
                  type: string
                  description: Directa24 web pay status login.
                web_pay_tran_key:
                  type: string
                  description: Directa24 web pay status password.
                  format: password
                  writeOnly: true
                cashout_login:
                  type: string
                  description: Directa24 cashout login.
                cashout_password:
                  type: string
                  description: Directa24 cashout password.
                  format: password
                  writeOnly: true
                chargebackAccessKey:
                  type: string
                  description: Directa24 chargeback access key (email).
                chargebackSecretKey:
                  type: string
                  description: Directa24 chargeback secret key.
                  format: password
                  writeOnly: true
              required:
                - x_login
                - x_tran_key
                - secret_key
                - web_pay_login
                - web_pay_tran_key
            settings:
              type: object
              description: Directa24 settings object.
              properties:
                banks:
                  type: array
                  description: List of banks that is displayed to customers.
                  items:
                    $ref: '#/components/schemas/Directa24Banks'
                skipStep:
                  type: boolean
                  description: >-
                    Specifies whether to skip the enter user personal
                    information step.
                useV3Api:
                  type: boolean
                  description: Specifies whether to use Directa24 API version 3.
                storeIdNumber:
                  type: boolean
                  description: >-
                    Specifies whether to store the customer ID number for future
                    use.
    EasyPayDirect:
      description: EasyPayDirect gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: EasyPayDirect credentials object.
              properties:
                secretKey:
                  type: string
                  description: API secret key of the EasyPayDirect account.
                  format: password
                  writeOnly: true
              required:
                - secretKey
    EBANX:
      description: EBANX gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: EBANX credentials object.
              properties:
                integrationKey:
                  type: string
                  description: EBANX integration key.
                  format: password
                  writeOnly: true
              required:
                - integrationKey
    EPG:
      description: EPG gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: EPG credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the merchant.
                productId:
                  type: string
                  description: ID of the product.
                  maxLength: 50
                  example: prod_0YV7DES3WPC5J8JD8QTVNZBZNZ
                merchantPassword:
                  type: string
                  description: Merchant password.
                  format: password
                  writeOnly: true
                merchantKey:
                  type: string
                  description: Merchant key.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - productId
                - merchantPassword
                - merchantKey
    EPro:
      description: EPro gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: EPro credentials object.
              properties:
                apiSecretKey:
                  type: string
                  description: EPro secret API key.
                  format: password
                  writeOnly: true
              required:
                - apiSecretKey
    EcorePay:
      description: EcorePay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                accountId:
                  type: string
                  description: ID of the EcorePay account.
                accountAuth:
                  type: string
                  description: EcorePay account authentication.
                  format: password
                  writeOnly: true
              required:
                - accountId
                - accountAuth
    Elavon:
      description: Elavon gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Elavon credentials object.
              properties:
                ssl_merchant_id:
                  type: string
                  description: ID of the Elavon merchant.
                ssl_user_id:
                  type: string
                  description: ID of the Elavon user.
                ssl_pin:
                  type: string
                  description: Elavon pin.
                  format: password
                  writeOnly: true
              required:
                - ssl_merchant_id
                - ssl_user_id
                - ssl_pin
    EMS:
      description: EMS e-Commerce (XML) API gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            settings:
              type: object
              description: EMS settings object.
              properties:
                delay:
                  type: integer
                  description: Automatic capture delay in hours.
            credentials:
              type: object
              description: EMS credentials object.
              properties:
                storeId:
                  type: string
                  description: ID of the EMS store.
                userId:
                  type: string
                  description: ID of the EMS account.
                password:
                  type: string
                  format: password
                  description: EMS password.
                  writeOnly: true
                privateKey:
                  type: string
                  format: password
                  description: Private key.
                  x-multiline: true
                  writeOnly: true
                privateKeyPassword:
                  type: string
                  format: password
                  description: Private key password.
                  writeOnly: true
                clientCertificate:
                  type: string
                  description: Client certificate.
                  x-multiline: true
                clientCertificatePassword:
                  type: string
                  format: password
                  description: Client certificate password.
                  writeOnly: true
                serverCertificate:
                  type: string
                  description: Server certificate.
                  x-multiline: true
                merchantName:
                  type: string
                  description: Merchant name for SFTP reconciliation.
                sftpPrivateKey:
                  type: string
                  format: password
                  description: SFTP reconciliation private key.
                  x-multiline: true
                  writeOnly: true
              required:
                - storeId
                - userId
                - password
                - privateKey
                - privateKeyPassword
                - clientCertificate
                - clientCertificatePassword
                - serverCertificate
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    ePay:
      description: ePay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: ePay credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the ePay merchant.
                secretKey:
                  type: string
                  format: password
                  description: ePay secret key.
                  writeOnly: true
              required:
                - merchantId
                - secretKey
    Euteller:
      description: Euteller gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Euteller credentials object.
              properties:
                username:
                  type: string
                  description: Euteller username.
                password:
                  type: string
                  format: password
                  description: Euteller password.
                  writeOnly: true
              required:
                - username
                - password
    Ezeebill:
      description: Ezeebill gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Ezeebill credentials object.
              properties:
                merchantId:
                  type: string
                  description: Merchant ID (MID) of the Ezeebill gateway.
                accessId:
                  type: string
                  description: Access ID of the Ezeebill gateway.
                  format: password
                  writeOnly: true
                terminalId:
                  type: string
                  description: Terminal ID of the Ezeebill gateway.
                operatorId:
                  type: string
                  description: Operator ID of the Ezeebill gateway.
                password:
                  type: string
                  description: API access operator password of the Ezeebill gateway.
                  format: password
                  writeOnly: true
                hashKey:
                  type: string
                  description: Hash key of the Ezeebill gateway.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - accessId
                - terminalId
                - operatorId
                - password
                - hashKey
    eZeeWallet:
      description: eZeeWallet gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: eZeeWallet credentials object.
              properties:
                apiUsername:
                  type: string
                  description: eZeeWallet API username.
                  format: password
                  writeOnly: true
                apiPassword:
                  type: string
                  description: eZeeWallet API password.
                  format: password
                  writeOnly: true
              required:
                - apiUsername
                - apiPassword
    ezyEFT:
      description: ezyEFT gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: ezyEFT credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the ezyEFT merchant.
                merchantToken:
                  type: string
                  format: password
                  description: ezyEFT merchant token.
                  writeOnly: true
              required:
                - merchantId
                - merchantToken
    FinTecSystems:
      description: FinTecSystems gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              description: FinTecSystems credentials object.
              properties:
                apiKey:
                  type: string
                  description: FinTecSystems API key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
            settings:
              type: object
              description: FinTecSystems settings object.
              properties:
                recipientIBAN:
                  type: string
                  description: IBAN of the recipient account.
                recipientBIC:
                  type: string
                  description: BIC of the recipient account.
                recipientCountry:
                  type: string
                  description: Two letter country code.
                  enum:
                    - AT
                    - CH
                    - DE
                recipientHolder:
                  type: string
                  description: Account holder of the recipient account.
              required:
                - recipientIBAN
                - recipientBIC
                - recipientHolder
                - recipientCountry
    Finrax:
      description: Finrax gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Finrax credentials object.
              properties:
                businessId:
                  type: string
                  description: ID of the Finrax business.
                apiKey:
                  type: string
                  description: Finrax API key.
                  format: password
                  writeOnly: true
                apiSecret:
                  type: string
                  description: Finrax API secret.
                  format: password
                  writeOnly: true
              required:
                - businessId
                - apiKey
                - apiSecret
            settings:
              type: object
              description: Finrax settings object.
              required:
                - tolerancePercentage
              properties:
                tolerancePercentage:
                  $ref: '#/components/schemas/AmountAdjustmentTolerance'
    Flexepin:
      description: Flexepin gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                apiKey:
                  type: string
                  description: Flexepin API key.
                apiSecret:
                  type: string
                  description: Flexepin API secret.
                  format: password
                  writeOnly: true
              required:
                - apiKey
                - apiSecret
            settings:
              type: object
              description: Flexepin settings object.
              properties:
                adjustAmountFromVoucher:
                  type: boolean
                  description: >-
                    Specifies whether to adjust the amount or currency based on
                    a Flexepin voucher.
                  default: false
                  example: false
    Forte:
      description: Forte gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                accountId:
                  type: string
                  description: ID of the Forte account.
                locationId:
                  type: string
                  description: ID of the Forte location.
                apiAccessId:
                  type: string
                  description: ID of the Forte API access.
                  format: password
                  writeOnly: true
                apiSecretKey:
                  type: string
                  description: Forte API secret key.
                  format: password
                  writeOnly: true
              required:
                - accountId
                - locationId
                - apiAccessId
                - apiSecretKey
    FundSend:
      description: FundSend gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                clientId:
                  type: string
                  description: ID of the FundSend client.
                secretWord:
                  type: string
                  description: FundSend secret word.
                  format: password
                  writeOnly: true
              required:
                - clientId
                - secretWord
    gate2way:
      description: gate2way gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: gate2way credentials object.
              properties:
                apiKey:
                  type: string
                  description: API key of gate2way account.
                  format: password
                  writeOnly: true
                apiSecret:
                  type: string
                  description: API secret of gate2way account.
                  format: password
                  writeOnly: true
              required:
                - apiKey
                - apiSecret
    GET:
      description: GET gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                accountId:
                  type: string
                  description: ID of the GET account.
              required:
                - accountId
    Gigadat:
      description: Gigadat gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Gigadat credentials object.
              properties:
                campaignId:
                  type: string
                  description: ID of the Gigadat campaign.
                accessToken:
                  type: string
                  description: Gigadat access token.
                  format: password
                  writeOnly: true
                securityToken:
                  type: string
                  description: Gigadat security token.
                  format: password
                  writeOnly: true
              required:
                - campaignId
                - accessToken
                - securityToken
            settings:
              type: object
              properties:
                sandbox:
                  type: boolean
                  description: Specifies if the gateway account is in sandbox mode.
                  default: false
              required:
                - sandbox
    GlobalOne:
      description: GlobalOne gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                terminalId:
                  type: string
                  description: ID of the GlobalOne terminal.
                sharedSecret:
                  type: string
                  description: GlobalOne shared secret.
                  format: password
                  writeOnly: true
              required:
                - terminalId
                - sharedSecret
    Gooney:
      description: Gooney gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Gooney credentials object.
              properties:
                apiUser:
                  type: string
                  description: Gooney API user.
                apiPassword:
                  type: string
                  description: Gooney API password.
                  format: password
                  writeOnly: true
                apiKey:
                  type: string
                  description: Gooney API key.
                apiSecret:
                  type: string
                  description: Gooney API secret.
                  format: password
                  writeOnly: true
              required:
                - username
                - password
                - apiKey
                - apiSecret
    Gpaysafe:
      description: Gpaysafe gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                apiKey:
                  type: string
                  description: Gpaysafe apiKey.
              required:
                - apiKey
    Greenbox:
      description: Greenbox gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Greenbox credentials object.
              properties:
                clientId:
                  type: string
                  description: ID of the Greenbox client.
                locationId:
                  type: string
                  description: ID of the Greenbox location.
                clientSecret:
                  type: string
                  description: Greenbox client secret.
                  format: password
                  writeOnly: true
              required:
                - clientId
                - clientSecret
                - locationId
    HiPay:
      description: HiPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: HiPay credentials object.
              properties:
                apiUsername:
                  type: string
                  description: HiPay API user name.
                apiPassword:
                  type: string
                  description: HiPay API password.
                  format: password
                  writeOnly: true
              required:
                - apiUsername
                - apiPassword
    ICEPAY:
      description: ICEPAY gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: ICEPAY credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the ICEPAY merchant.
                  format: password
                  writeOnly: true
                secretKey:
                  type: string
                  description: ICEPAY API secret key.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - secretKey
    INOVAPAY:
      description: INOVAPAY gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: INOVAPAY credentials object.
              properties:
                apiKey:
                  type: string
                  description: INOVAPAY API key.
                apiSecret:
                  type: string
                  description: INOVAPAY API secret.
                  format: password
                  writeOnly: true
              required:
                - apiKey
                - apiSecret
    Ilixium:
      description: Ilixium gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Ilixium credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the Ilixium merchant.
                accountId:
                  type: string
                  description: ID of the Ilixium account.
                digestPassword:
                  type: string
                  description: Ilixium digest password.
                  format: password
                  writeOnly: true
                sftpUsername:
                  type: string
                  description: SFTP username.
                sftpPrivateKey:
                  type: string
                  description: SFTP private key.
                  format: password
                  x-multiline: true
                  writeOnly: true
                sftpKeyPassphrase:
                  type: string
                  format: password
                  description: Passphrase of the SFTP private key.
                  writeOnly: true
              required:
                - merchantId
                - accountId
                - digestPassword
            settings:
              type: object
              description: Ilixium settings object.
              properties:
                useIpFrame:
                  type: boolean
                  description: >-
                    Specifies whether to force Ilixium to process using Ip
                    Frame.
                useCreditEndpoint:
                  type: boolean
                  description: >-
                    Specifies whether to use a previous approval credit endpoint
                    for payouts.
                useStandaloneCreditEndpoint:
                  type: boolean
                  description: >-
                    Specifies whether to use a standalone (token) credit
                    endpoint for payouts.
                platform:
                  type: string
                  description: Direct API platform.
                  default: itix
                  enum:
                    - itix
                    - tpg
            threeDSecureServer:
              type: object
              description: Ilixium 3DS server.
              properties:
                name:
                  description: Name of the merchant plug-in.
                  type: string
                  enum:
                    - Ilixium3dsServer
    Ingenico:
      description: Ingenico gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantId:
                  type: string
                  description: ID of the Ingenico merchant.
                apiKeyId:
                  type: string
                  description: ID of the Ingenico API key.
                apiSecretKey:
                  type: string
                  description: Ingenico API secret key.
                  format: password
                  writeOnly: true
                skipFraudService:
                  type: boolean
                  description: Ingenico skip fraud service.
              required:
                - merchantId
                - apiKeyId
                - apiSecretKey
    Inovio:
      description: Inovio gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              description: Inovio credentials object.
              properties:
                username:
                  type: string
                  description: Inovio username.
                password:
                  type: string
                  description: Inovio password.
                  format: password
                  writeOnly: true
              required:
                - username
                - password
            settings:
              type: object
              description: Inovio settings object.
              properties:
                websiteId:
                  type: string
                  description: ID of the Inovio website.
                  maxLength: 50
                  example: web_0YV7DE4Z26DQSA1AC92FBJ7SEG
                merchantAccountId:
                  type: string
                  description: ID of the Inovio merchant account.
                productId:
                  type: string
                  description: ID of the Inovio product.
                  maxLength: 50
                  example: prod_0YV7DES3WPC5J8JD8QTVNZBZNZ
              required:
                - websiteId
                - merchantAccountId
                - productId
    InstaDebit:
      description: InstaDebit gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: InstaDebit credentials object.
              properties:
                merchantId:
                  type: string
                  description: InstaDebit merchant account number.
                password:
                  type: string
                  description: InstaDebit merchant account password.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - password
            settings:
              type: object
              properties:
                merchantSubId:
                  type: integer
                  description: Sub ID of the merchant or organization.
    Intuit:
      description: Intuit gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                clientId:
                  type: string
                  description: Intuit client_id key.
                clientSecret:
                  type: string
                  description: Intuit client_secret key.
                  format: password
                  writeOnly: true
              required:
                - clientId
                - clientSecret
    IpayOptions:
      description: Ipay Options gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              description: Ipay Options credentials object.
              properties:
                sid:
                  type: string
                  description: ID of the Ipay Options website.
                rcode:
                  type: string
                  description: Ipay Options rcode.
                  format: password
                  writeOnly: true
              required:
                - sid
                - rcode
            settings:
              type: object
              description: Ipay Options settings object.
              properties:
                extraStep:
                  type: boolean
                  description: >-
                    Specifies whether to display an extra step where the user
                    must enter their email and DNI number.
                subdomain:
                  type: string
                  description: Subdomain to use when sending request to IpayOptions.
                  enum:
                    - miglite
                    - w88asiapay
                platform:
                  type: string
                  description: Platform which IpayOptions processes.
                  enum:
                    - SOAP
                    - TxHandler
                    - SecureHosted
                cardType:
                  type: string
                  description: Manually set the card_type for iDEAL.
                  enum:
                    - ideal
                    - idealqr
                    - sofort
    JetPay:
      description: JetPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                TerminalID:
                  type: string
                  description: ID of the JetPay terminal.
              required:
                - TerminalID
    Jeton:
      description: Jeton gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                apiKey:
                  type: string
                  description: Jeton API key.
                  format: password
                  writeOnly: true
                secret:
                  type: string
                  description: Jeton secret.
                  format: password
                  writeOnly: true
              required:
                - apiKey
            settings:
              type: object
              properties:
                method:
                  type: string
                  description: Jeton method.
                  enum:
                    - CHECKOUT
                    - DIRECT
                    - QR
                    - JETGO
              required:
                - method
    JPMOrbital:
      description: JPMOrbital gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantId:
                  type: string
                  description: ID of the JPMOrbital merchant.
                username:
                  type: string
                  description: Username of the JPMOrbital merchant.
                password:
                  type: string
                  description: Password of the JPMOrbital merchant.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - username
                - password
    Khelocard:
      description: Khelocard gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Credentials object.
              required:
                - merchantId
                - referrer
                - apiKey
                - apiSecret
              properties:
                merchantId:
                  type: string
                  description: ID of the Khelocard merchant.
                referrer:
                  type: string
                  description: Referrer URL registered at Khelocard.
                  format: uri
                apiKey:
                  type: string
                  description: Khelocard API key.
                  format: password
                  writeOnly: true
                apiSecret:
                  type: string
                  description: Khelocard API secret.
                  format: password
                  writeOnly: true
    Klarna:
      description: Klarna gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              description: Credentials object.
              required:
                - username
                - password
              properties:
                username:
                  type: string
                  description: Klarna API username.
                password:
                  type: string
                  description: Klarna API password.
                  format: password
                  writeOnly: true
            settings:
              type: object
              description: Settings object.
              required:
                - region
              properties:
                region:
                  type: string
                  description: Klarna API region.
                  enum:
                    - EU
                    - NA
                    - OC
                usePayNowStandalone:
                  type: boolean
                  description: >-
                    Specifies whether to use the Klarna Pay Now Standalone
                    method.
                  default: false
                  example: false
    Konnektive:
      description: Konnektive gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              description: Credentials object.
              required:
                - loginId
                - password
              properties:
                loginId:
                  type: string
                  description: ID of the Konnektive API login.
                password:
                  type: string
                  description: Konnektive API password.
                  format: password
                  writeOnly: true
            settings:
              type: object
              description: Settings object.
              required:
                - campaignId
                - productId
              properties:
                campaignId:
                  type: string
                  description: Konnektive campaign ID for which the order is being placed.
                productId:
                  type: string
                  description: >-
                    Konnektive campaign product ID for which the order is being
                    placed.
                  maxLength: 50
                  example: prod_0YV7DES3WPC5J8JD8QTVNZBZNZ
    LaCore:
      description: LaCore gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: LaCore credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the LaCore merchant.
                username:
                  type: string
                  description: Username of the LaCore merchant.
                password:
                  type: string
                  description: Password of the LaCore merchant.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - username
                - password
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    loonie:
      description: loonie gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: loonie credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the loonie merchant.
                merchantToken:
                  type: string
                  format: password
                  description: loonie merchant token.
                  writeOnly: true
              required:
                - merchantId
                - merchantToken
    LPG:
      description: LPG gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: LPG credentials object.
              properties:
                publicKey:
                  type: string
                  description: LPG public API key.
                secureKey:
                  type: string
                  description: LPG secure API key.
                  format: password
                  writeOnly: true
                payoutUsername:
                  type: string
                  description: LPG payout account username.
                  format: password
                  writeOnly: true
                payoutPassword:
                  type: string
                  description: LPG payout account password.
                  format: password
                  writeOnly: true
              required:
                - publicKey
                - secureKey
    MaxiCash:
      description: MaxiCash gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: MaxiCash credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the MaxiCash API merchant.
                password:
                  type: string
                  description: MaxiCash API password.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - password
    MercadoPago:
      description: MercadoPago gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: MercadoPago credentials object.
              properties:
                publicKey:
                  type: string
                  description: MercadoPago public key.
                accessToken:
                  type: string
                  description: MercadoPago access token.
                  format: password
                  writeOnly: true
              required:
                - publicKey
                - accessToken
            settings:
              type: object
              description: Settings object.
              properties:
                collectDeviceId:
                  type: boolean
                  description: Specifies collect and send device ID to MercadoPago.
                  default: false
                  example: false
    MiFinity:
      description: MiFinity gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: MiFinity credentials object.
              properties:
                apiKey:
                  type: string
                  format: password
                  description: MiFinity API key.
                  writeOnly: true
                mifinityAccountNumber:
                  type: string
                  format: password
                  description: MiFinity account number.
                  writeOnly: true
                accountHolderId:
                  type: string
                  description: ID of the MiFinity account holder.
                brandId:
                  type: string
                  description: >-
                    Three-digit ID provided by MiFinity which indicates through
                    which brand the call made.
              required:
                - apiKey
                - mifinityAccountNumber
                - accountHolderId
    MobilePay:
      description: MobilePay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantSerialNumber:
                  type: string
                  description: Serial number of the MobilePay merchant.
                subscriptionKey:
                  type: string
                  description: Subscription key of the MobilePay merchant.
                clientId:
                  type: string
                  description: ID of the MobilePay client.
                clientSecret:
                  type: string
                  description: MobilePay client secret.
                  format: password
                  writeOnly: true
              required:
                - merchantSerialNumber
                - subscriptionKey
                - clientId
                - clientSecret
    Moneris:
      description: Moneris gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                apiToken:
                  type: string
                  description: Moneris API token.
                  format: password
                  writeOnly: true
                storeId:
                  type: string
                  description: ID of the Moneris store.
              required:
                - storeId
                - apiToken
    Monolo:
      description: Monolo gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Monolo credentials object.
              properties:
                businessId:
                  type: string
                  description: ID of the Monolo merchant account.
                apiKey:
                  type: string
                  description: Monolo API key.
                  format: password
                  writeOnly: true
                secret:
                  type: string
                  description: Monolo secret.
                  format: password
                  writeOnly: true
              required:
                - businessId
                - apiKey
                - secret
            settings:
              type: object
              description: Monolo settings object.
              properties:
                payoutCurrency:
                  type: string
                  description: Cryptocurrency of the payout.
                payoutNetwork:
                  type: string
                  description: Blockchain network to use for the payout.
    MtaPay:
      description: MTA Pay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              properties:
                accountId:
                  type: string
                  description: ID of the MTA Pay account.
                partyId:
                  type: string
                  description: ID of the MTA Pay party.
                md5key:
                  type: string
                  description: MTA Pay MD5 key.
                  format: password
                  writeOnly: true
              required:
                - accountId
                - partyId
                - md5key
            settings:
              type: object
              description: MTA Pay settings object.
              properties:
                goods:
                  type: string
                  description: MTA Pay goods.
                mobilePay:
                  type: string
                  description: MTA Pay mobile pay parameter.
              required:
                - mobilePay
                - goods
    MuchBetter:
      description: MuchBetter gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: MuchBetter credentials object.
              properties:
                merchantAccountId:
                  type: string
                  description: ID of the MuchBetter merchant account.
                apiKey:
                  type: string
                  description: MuchBetter API key.
                  format: password
                  writeOnly: true
              required:
                - merchantAccountId
                - apiKey
            settings:
              type: object
              description: MuchBetter settings object.
              properties:
                brandName:
                  type: string
                  description: MuchBetter brand name used for reporting and logo.
                hasPhoneNumberRequest:
                  type: boolean
                  description: >-
                    Specifies whether to request phone a number before
                    submitting the request to MuchBetter.
                  default: false
    MuchBetterGateway:
      description: MuchBetterGateway gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: MuchBetterGateway credentials object.
              properties:
                apiKey:
                  type: string
                  description: MuchBetterGateway API key.
                  format: password
                  writeOnly: true
                secretKey:
                  type: string
                  description: MuchBetterGateway secret key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
                - secretKey
    MyFatoorah:
      description: MyFatoorah gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: MyFatoorah credentials object.
              properties:
                apiKey:
                  type: string
                  description: MyFatoorah API key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
    Neosurf:
      description: Neosurf gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Neosurf credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the Neosurf merchant.
                secretKey:
                  type: string
                  description: Neosurf API secret key.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - secretKey
    NMI:
      description: NMI gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                username:
                  type: string
                  description: NMI API token.
                password:
                  type: string
                  description: ID of the NMI store.
                  format: password
                  writeOnly: true
              required:
                - username
                - password
            settings:
              type: object
              properties:
                disableStoredCredentials:
                  description: >-
                    Specifies whether to disable NMI stored credentials for
                    Customer Initiated Transactions (CIT) and Merchant Initiated
                    Transactions (MIT).
                  type: boolean
                  default: false
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    Netbanking:
      description: Netbanking gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Netbanking credentials object.
              properties:
                midcode:
                  type: string
                  description: Netbanking Merchant Identification (MID) code.
                midsecret:
                  type: string
                  description: Netbanking Merchant Identification (MID) secret key.
                  format: password
                  writeOnly: true
              required:
                - midcode
                - midsecret
    Neteller:
      description: Neteller gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Neteller credentials object.
              properties:
                paysafePaymentsApiUsername:
                  type: string
                  description: Neteller Paysafe Payments API username for a private key.
                paysafePaymentsApiPassword:
                  type: string
                  description: Neteller Paysafe Payments API password for a private key.
                  format: password
                  writeOnly: true
              required:
                - paysafePaymentsApiUsername
                - paysafePaymentsApiPassword
            settings:
              type: object
              properties:
                populateCustomerEmail:
                  type: boolean
                  description: Specifies whether to the populate customer email at payment.
    NGenius:
      description: NGenius gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: NGenius credentials object.
              properties:
                outletId:
                  type: string
                  description: ID of the NGenius outlet.
                apiKey:
                  type: string
                  description: NGenius API key.
                  format: password
                  writeOnly: true
              required:
                - outletId
                - apiKey
    NinjaWallet:
      description: NinjaWallet gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: NinjaWallet credentials object.
              properties:
                apiKey:
                  type: string
                  description: NinjaWallet API key.
                  format: password
                  writeOnly: true
                secret:
                  type: string
                  description: NinjaWallet secret.
                  format: password
                  writeOnly: true
                passphrase:
                  type: string
                  description: NinjaWallet passphrase.
                  format: password
                  writeOnly: true
              required:
                - apiKey
                - secret
                - passphrase
    NordikCoin:
      description: NordikCoin gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: NordikCoin credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the NordikCoin merchant.
                secret:
                  type: string
                  description: NordikCoin secret key.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - secret
    NOWPayments:
      description: NOWPayments gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: NOWPayments credentials object.
              properties:
                apiKey:
                  type: string
                  format: password
                  writeOnly: true
                ipnSecret:
                  type: string
                  format: password
                  writeOnly: true
              required:
                - apiKey
                - ipnSecret
            settings:
              type: object
              description: NOWPayments settings object.
              required:
                - tolerancePercentage
              properties:
                tolerancePercentage:
                  $ref: '#/components/schemas/AmountAdjustmentTolerance'
    NuaPay:
      description: NuaPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: NuaPay credentials object.
              properties:
                nuaPayCommonName:
                  type: string
                  description: NuaPay common name.
                nuaPaySerialNumber:
                  type: string
                  description: NuaPay serial number.
                nuaPayAccountId:
                  type: string
                  description: ID of the NuaPay account.
                nuaPayOriginatorIban:
                  type: string
                  description: NuaPay origiantor IBAN.
                  format: password
                  writeOnly: true
                nuaPayApiKey:
                  type: string
                  description: NuaPay API key.
                  format: password
                  writeOnly: true
                nuaPayPrivateKey:
                  type: string
                  description: NuaPay private key.
                  format: password
                  x-multiline: true
                  writeOnly: true
              required:
                - nuaPayCommonName
                - nuaPaySerialNumber
                - nuaPayAccountId
                - nuaPayOriginatorIban
                - nuaPayApiKey
                - nuaPayPrivateKey
    OchaPay:
      description: OchaPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                apiUsername:
                  type: string
                  description: OchaPay username.
                apiPassword:
                  type: string
                  description: OchaPay API password.
                  format: password
                  writeOnly: true
                secretWord:
                  type: string
                  description: OchaPay secret word.
                  format: password
                  writeOnly: true
              required:
                - apiUsername
                - apiPassword
                - secretWord
    Onlineueberweisen:
      description: Onlineueberweisen gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              description: Onlineueberweisen credentials object.
              properties:
                apiKey:
                  type: string
                  description: Onlineueberweisen API key.
                  format: password
                  writeOnly: true
                nuaPayApiKey:
                  type: string
                  description: NuaPay API key for reconciliation.
                  format: password
                  writeOnly: true
                nuaPayAccountId:
                  type: string
                  description: NuaPay account ID for reconciliation.
              required:
                - apiKey
            settings:
              type: object
              description: Onlineueberweisen settings object.
              properties:
                payformCode:
                  type: string
                  description: Onlineueberweisen code to use a customized PayForm template.
                  default: default
    OnRamp:
      description: OnRamp gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: OnRamp credentials object.
              properties:
                apiKey:
                  type: string
                  format: password
                  writeOnly: true
              required:
                - apiKey
            settings:
              type: object
              description: OnRamp settings object.
              properties:
                useServerToServerApi:
                  type: boolean
                  description: Specifies whether to use OnRamp server to server API.
                  default: false
                logoUrl:
                  type: string
                  description: Set this value to use a custom logo.
                  format: url
    Orbital:
      description: Orbital gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Orbital credentials object.
              properties:
                apiKey:
                  type: string
                  description: Orbital API key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
            settings:
              type: object
              description: Orbital settings object.
              properties:
                targetCurrency:
                  description: Currency to which the received cryptocurrency is converted.
                  type: string
                  enum:
                    - USD
                    - EUR
                    - GBP
                mainCryptoCurrency:
                  description: Blockchain network to be used.
                  type: string
                  enum:
                    - ETH
                    - SOL
                    - TRX
                logoImageUrl:
                  description: >-
                    Logo image in PNG or SVG format to be displayed on the
                    deposit screen.
                  type: string
                productImageUrl:
                  description: >-
                    Product image in JPEG format to be displayed on the deposit
                    screen.
                  type: string
    Pagadito:
      description: Pagadito gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Pagadito credentials object.
              properties:
                uid:
                  type: string
                  format: password
                  description: Pagadito UID.
                  writeOnly: true
                wsk:
                  type: string
                  format: password
                  description: Pagadito WSK.
                  writeOnly: true
              required:
                - uid
                - wsk
            settings:
              type: object
              properties:
                useRecurringApi:
                  type: boolean
                  default: false
                  description: >-
                    Specifies whether to use the Pagadito API for reoccurring
                    payments.
    Pagsmile:
      description: Pagsmile gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantId:
                  type: string
                  description: ID of the Pagsmile merchant.
                appId:
                  type: string
                  description: ID of the Pagsmile application.
                secretKey:
                  type: string
                  description: Pagsmile MD5 key.
                  format: password
                  writeOnly: true
                apiSecretKey:
                  type: string
                  description: >-
                    Pagsmile secret key for the Trade Pay API. The key starts
                    with `Pagsmile_sk`.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - appId
                - secretKey
            settings:
              type: object
              description: Pagsmile settings object.
              properties:
                useTradePay:
                  type: boolean
                  description: Specifies whether to use the Trade Pay API.
                  default: false
                  example: false
    Panamerican:
      description: Panamerican gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              description: Panamerican credentials object.
              properties:
                key:
                  type: string
                  description: Panamerican key.
                password:
                  type: string
                  description: Panamerican password.
                  format: password
                  writeOnly: true
              required:
                - key
                - password
            settings:
              type: object
              description: Panamerican settings object.
              properties:
                extraStep:
                  type: boolean
                  description: >-
                    Specifies whether to display a step where the user must
                    enter their ID number.
                convertToAscii:
                  type: boolean
                  description: Specifies whether to convert all chars to ascii.
              required:
                - extraStep
    PandaGateway:
      description: Panda gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantCode:
                  type: string
                  description: Panda merchant code.
                apiCode:
                  type: string
                  description: Panda API code.
                signKey:
                  type: string
                  description: Panda sign key.
                  format: password
                  writeOnly: true
              required:
                - merchantCode
                - apiCode
                - signKey
    ParamountCommerce:
      description: ParamountCommerce gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: ParamountCommerce credentials object.
              properties:
                merchantId:
                  type: string
                  description: ParamountCommerce merchant ID.
                appId:
                  type: string
                  description: ParamountCommerce application ID.
                clientId:
                  type: string
                  description: ParamountCommerce client ID.
                clientSecret:
                  type: string
                  description: ParamountCommerce client secret.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - appId
                - clientId
                - clientSecret
            settings:
              type: object
              properties:
                merchantSubId:
                  type: string
                  description: ParamountCommerce merchant sub ID.
                merchantTransactionType:
                  type: string
                  description: ParamountCommerce merchant transaction type.
                  enum:
                    - POKER
                    - CASINO
                    - BINGO
                    - SPORTS_BETTING
                    - DIGITAL_REMITTANCE
                    - E_SPORTS
                useDirectDeposit:
                  type: boolean
                  description: Specifies whether to use One-Click Payments.
                  default: false
                  example: false
              required:
                - merchantSubId
                - merchantTransactionType
    ParamountEft:
      description: Paramount gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Paramount credentials object.
              properties:
                merchant_id:
                  type: string
                  description: ID of the merchant account.
                merchant_pass:
                  type: string
                  description: Merchant account password.
                  format: password
                  writeOnly: true
                payee:
                  type: string
                  description: Merchant name or descriptor.
              required:
                - merchant_id
                - merchant_pass
                - payee
    ParamountInterac:
      description: ParamountInterac gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: ParamountInterac credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the ParamountInterac merchant.
                encryptionKey:
                  type: string
                  description: ParamountInterac encryption key.
                  format: password
                  writeOnly: true
                password:
                  type: string
                  description: ParamountInterac password for query.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - encryptionKey
                - password
            settings:
              type: object
              properties:
                sandbox:
                  type: boolean
                  description: Specifies if the gateway account is in sandbox mode.
                  default: false
                merchantSubId:
                  type: integer
                  description: Sub ID of the merchant or organization.
                autodepositLookup:
                  type: boolean
                  description: >-
                    Perform Interac e-Transfer Autodeposit lookup before a
                    payout. Execute the payout if Autodeposit is enabled and the
                    customer account name matches the provided customer name.
                  default: false
                autodepositLookupDay:
                  type: integer
                  description: >-
                    Number of days to suppress Interac e-Transfer Autodeposit
                    lookup.
    Pay4Fun:
      description: Pay4Fun gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Pay4Fun credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the Pay4Fun merchant.
                merchantSecret:
                  type: string
                  description: Pay4Fun merchant secret.
                  format: password
                  writeOnly: true
                merchantKey:
                  type: string
                  description: Pay4Fun merchant key.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - merchantSecret
                - merchantKey
    PayCash:
      description: PayCash gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PayCash credentials object.
              properties:
                emisor:
                  type: string
                  description: PayCash merchant identifier.
                token:
                  type: string
                  description: PayCash token.
                  format: password
                  writeOnly: true
              required:
                - emisor
                - token
    PayClub:
      description: PayClub gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PayClub credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the PayClub merchant.
                accountNumber:
                  type: string
                  description: PayClub account number.
                signKey:
                  type: string
                  format: password
                  description: PayClub sign key.
                  writeOnly: true
              required:
                - apiKey
                - accountNumber
                - signKey
            settings:
              type: object
              properties:
                use3DSChannel:
                  type: boolean
                  description: Specifies whether to use a 3DS channel.
    PayEcards:
      description: PayEcards gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PayEcards credentials object.
              properties:
                clientKey:
                  type: string
                  description: Client key of the PayEcards gateway.
                password:
                  type: string
                  description: Password of the PayEcards gateway.
                  format: password
                  writeOnly: true
                paymentUrl:
                  type: string
                  description: Payment URL of the PayEcards gateway for S2S integration.
              required:
                - clientKey
                - password
                - paymentUrl
    Paynote:
      description: Paynote gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                publicKey:
                  type: string
                  description: Paynote public key.
                secretKey:
                  type: string
                  format: password
                  description: Paynote secret key.
                  writeOnly: true
              required:
                - publicKey
                - secretKey
    PayPal:
      description: PayPal gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - settings
          properties:
            credentials:
              type: object
              description: >-
                PayPal credentials object.

                This object specifies the PayPal Partner account from which a
                gateway account is registered.
              properties:
                partnerId:
                  type: string
                  description: ID of the PayPal Partner account.
                partnerClientId:
                  type: string
                  description: ID of the PayPal Partner account API client.
                partnerSecret:
                  type: string
                  description: Secret key for the PayPal Partner account API client.
                  format: password
                  writeOnly: true
                partnerBnCode:
                  type: string
                  description: |-
                    BN Code for the PayPal Partner account.
                    This unique code tracks the source of API requests.
            settings:
              type: object
              description: PayPal settings object.
              required:
                - redirectUrl
              properties:
                redirectUrl:
                  type: string
                  description: >-
                    URL where the user is redirected after authorizing the
                    account on PayPal.
                  format: url
                enableGuestCheckout:
                  type: boolean
                  default: false
                  description: >-
                    Specifies whether to allow users without PayPal accounts to
                    pay using credit or debit cards.
                useHostedCheckoutForm:
                  type: boolean
                  default: false
                  description: >-
                    Specifies whether to use a Rebilly hosted PayPal form
                    instead of redirecting customers to PayPal.

                    For more information, see [Create a payment form using the
                    Rebilly
                    API](https://www.rebilly.com/docs/dev-docs/create-a-hosted-payment-form/).
                forceGuestCheckout:
                  type: boolean
                  default: false
                  description: >-
                    Specifies whether to suppress the PayPal payment method when
                    a guest checkout is available.

                    This option is only applicable when `useHostedCheckoutForm`
                    is enabled.
                enableAlternativePaymentMethods:
                  type: boolean
                  default: false
                  description: >-
                    Specifies whether to allow customers to pay using the
                    alternative payment options supported by PayPal.

                    When enabled, customers must manually approve all payments.
    Payeezy:
      description: Payeezy gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantId:
                  type: string
                  description: ID of the Payeezy merchant.
                merchantToken:
                  type: string
                  description: Merchant token.
                  format: password
                  writeOnly: true
                apiKey:
                  type: string
                  description: API key.
                apiSecret:
                  type: string
                  description: API secret.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - merchantToken
                - apiKey
                - apiSecret
    Payflow:
      description: Payflow gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Payflow credentials object.
              properties:
                user:
                  type: string
                  description: >-
                    Payflow user.

                    If you set up one or more additional users on the account,

                    this value is the ID of the user that is authorized to
                    process transactions.

                    If do not set up additional users on the account,

                    `user` has the same value as `vendor`.
                vendor:
                  type: string
                  description: ID of the Payflow merchant login.
                password:
                  type: string
                  description: Payflow merchant password.
                  format: password
                  writeOnly: true
              required:
                - user
                - vendor
                - password
    PaymentAsia:
      description: PaymentAsia gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PaymentAsia credentials object.
              properties:
                apiKey:
                  type: string
                  format: password
                  description: PaymentAsia API key.
                  writeOnly: true
              required:
                - apiKey
    PaymenTechnologies:
      description: PaymenTechnologies gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                authenticateId:
                  type: string
                  description: ID of the PaymenTechnologies authenticate.
                authenticatePw:
                  type: string
                  description: PaymenTechnologies authenticate password.
                  format: password
                  writeOnly: true
                publicKey:
                  type: string
                  description: PaymenTechnologies API public key.
                secretKey:
                  type: string
                  description: PaymenTechnologies API secret key.
                  format: password
                  writeOnly: true
                apiKey:
                  type: string
                  description: PaymenTechnologies API key required for query operations.
                  format: password
                  writeOnly: true
              required:
                - authenticateId
                - authenticatePw
                - publicKey
                - secretKey
                - apiKey
            settings:
              type: object
              properties:
                use3DSEndpoint:
                  type: boolean
                  description: Specifies whether to use a 3DS endpoint.
    PaymentsOS:
      description: PaymentsOS gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                appId:
                  type: string
                  description: ID of the PaymentsOS application.
                publicKey:
                  type: string
                  description: PaymentsOS public key.
                privateKey:
                  type: string
                  format: password
                  description: PaymentsOS private key.
                  writeOnly: true
              required:
                - appId
                - privateKey
                - publicKey
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    Paymero:
      description: Paymero gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Paymero credentials object.
              properties:
                apiKey:
                  type: string
                  description: Paymero API key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
            settings:
              type: object
              description: Paymero settings object.
              properties:
                targetCurrency:
                  description: Currency to which the received cryptocurrency is converted.
                  type: string
                  minLength: 3
                  maxLength: 3
                  example: USD
                mainCurrency:
                  description: Blockchain on which the currency is processed.
                  type: string
                  enum:
                    - TRX
                    - ETH
                amountExceeded:
                  description: >-
                    Specifies whether to decline transactions when the amount
                    received exceeds the amount requested.
                  type: boolean
                  default: false
    Payper:
      description: Payper gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Payper credentials object.
              required:
                - secretKey
              properties:
                secretKey:
                  type: string
                  format: password
                  description: Payper secret key.
                  writeOnly: true
    Payr:
      description: Payr gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                clientId:
                  type: string
                  description: ID of the Payr client.
                secretWord:
                  type: string
                  description: Payr secret word.
                  format: password
                  writeOnly: true
                apiUserId:
                  type: string
                  description: |-
                    Username for the Alliance API.
                    This API is used for transaction reporting.
                apiSecurityToken:
                  type: string
                  description: |-
                    Hash of the password for the Alliance API.
                    This API is used for transaction reporting.
                  format: password
                  writeOnly: true
              required:
                - clientId
                - secretWord
    PayRedeem:
      description: PayRedeem gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PayRedeem credentials object.
              properties:
                apiUser:
                  type: string
                  description: PayRedeem API user.
                apiPassword:
                  type: string
                  description: PayRedeem API password.
                  format: password
                  writeOnly: true
                apiKey:
                  type: string
                  description: PayRedeem API key.
                  format: password
                  writeOnly: true
              required:
                - apiUser
                - apiPassword
                - apiKey
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    PayRetailers:
      description: PayRetailers gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PayRetailers credentials object.
              properties:
                shopId:
                  type: string
                  description: ID of the PayRetailers shop.
                secretKey:
                  type: string
                  description: Secret key value of the PayRetailers API.
                  format: password
                  writeOnly: true
              required:
                - shopId
                - secretKey
    Paysafe:
      description: Paysafe gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                storeId:
                  type: string
                  description: ID of the Paysafe store.
                storePwd:
                  type: string
                  description: Paysafe store password.
                  format: password
                  writeOnly: true
                accountNum:
                  type: string
                  description: Paysafe account number.
              required:
                - storeId
                - storePwd
                - accountNum
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    Paysafecard:
      description: Paysafecard gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                apiKey:
                  type: string
                  description: Paysafecard API key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
    Paysafecash:
      description: Paysafecash gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                apiKey:
                  type: string
                  description: Paysafecash API key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
    PayTabs:
      description: PayTabs gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PayTabs credentials object.
              properties:
                profileId:
                  type: string
                  description: ID of the PayTabs profile.
                clientKey:
                  type: string
                  description: PayTabs client key.
                serverKey:
                  type: string
                  format: password
                  description: PayTabs server key.
                  writeOnly: true
              required:
                - profileId
                - clientKey
                - serverKey
    PayU:
      description: PayU gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PayU credentials object.
              properties:
                merchantKey:
                  type: string
                  description: Merchant key of the PayU merchant.
                merchantSalt:
                  type: string
                  description: Merchant salt of the PayU merchant.
                  format: password
                  writeOnly: true
              required:
                - merchantKey
                - merchantSalt
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    PayULatam:
      description: PayULatam gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PayULatam credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the PayULatam merchant.
                accountId:
                  type: string
                  description: ID of the PayULatam account.
                apiLogin:
                  type: string
                  description: PayULatam API login.
                apiKey:
                  type: string
                  description: PayULatam API key.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - accountId
                - apiLogin
                - apiKey
    Payvision:
      description: Payvision gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                memberId:
                  type: string
                  description: ID of the Payvision member.
                memberGuid:
                  type: string
                  description: Payvision member guid.
                  format: password
                  writeOnly: true
              required:
                - memberId
                - memberGuid
            settings:
              type: object
              description: Payvision settings object.
              properties:
                avs:
                  type: boolean
                  description: Specifies whether to use Payvision AVS.
                delay:
                  type: integer
                  description: Automatic capture delay in hours.
                merchantAccountType:
                  type: integer
                  description: Payvision merchant account type.
              required:
                - merchantAccountType
    PharosPayments:
      description: PharosPayments gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PharosPayments credentials object.
              properties:
                username:
                  type: string
                  description: Authentication username.
                password:
                  description: Authentication password.
                  type: string
                  format: password
                merchantCode:
                  type: string
                  description: Merchant code.
                terminalCode:
                  type: string
                  description: Terminal code.
              required:
                - username
                - password
                - merchantCode
                - terminalCode
    Piastrix:
      description: Piastrix gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Piastrix credentials object.
              properties:
                shopId:
                  type: string
                  description: ID of the Piastrix shop.
                secretKey:
                  type: string
                  description: Piastrix secret key.
                  format: password
                  writeOnly: true
              required:
                - shopId
                - secretKey
            settings:
              type: object
              description: Piastrix settings object.
              properties:
                tolerancePercentage:
                  type: integer
                  description: Tolerance percentage for settled amounts.
                  minimum: 0
                  maximum: 5
                  example: 5
    Pin4Pay:
      description: Pin4Pay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Credentials object.
              required:
                - username
                - requestOrigin
                - codigoCliente
                - keyValue
              properties:
                username:
                  type: string
                  description: Pin4Pay API username.
                requestOrigin:
                  type: string
                  description: Pin4Pay API request origin.
                codigoCliente:
                  type: string
                  description: Pin4Pay API codigo cliente.
                keyValue:
                  type: string
                  description: Pin4Pay API password.
                  format: password
                  writeOnly: true
    Plugnpay:
      description: Plugnpay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                publisher-name:
                  type: string
                  description: ID of the Plugnpay member.
                publisher-password:
                  type: string
                  description: Plugnpay AVS.
                  format: password
                  writeOnly: true
              required:
                - publisher-name
                - publisher-password
    PostFinance:
      description: PostFinance gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PostFinance credentials object.
              properties:
                pspId:
                  type: string
                  description: ID of the PostFinance PSP.
                merchantId:
                  type: string
                  description: ID of the PostFinance merchant.
                sftpUsername:
                  type: string
                  description: PostFinance SFTP username.
                publicKey:
                  type: string
                  x-multiline: true
                  description: PostFinance public key.
                privateKey:
                  type: string
                  format: password
                  x-multiline: true
                  description: PostFinance private key.
                  writeOnly: true
                keyPassphrase:
                  type: string
                  format: password
                  description: PostFinance key passphrase.
                  writeOnly: true
                sftpPrivateKey:
                  type: string
                  format: password
                  x-multiline: true
                  description: PostFinance SFTP private key.
                  writeOnly: true
                sftpKeyPassphrase:
                  type: string
                  format: password
                  description: PostFinance SFTP key passphrase.
                  writeOnly: true
              required:
                - pspId
                - merchantId
                - sftpUsername
                - publicKey
                - privateKey
                - keyPassphrase
                - sftpPrivateKey
                - sftpKeyPassphrase
            settings:
              type: object
              properties:
                skipPaymentFileUpload:
                  type: boolean
                  default: false
                  description: Specifies whether to skip the payment file upload screen.
                enableAliasAuthentication:
                  type: boolean
                  default: false
                  description: Specifies whether to enable alias authentication.
    PSiGate:
      description: PSiGate gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                username:
                  type: string
                  description: Username or store name.
                password:
                  type: string
                  description: Password of the PSiGate gateway account.
                  format: password
                  writeOnly: true
                clientId:
                  type: string
                  description: Client ID.
                clientApiKey:
                  type: string
                  description: Client API key.
                  format: password
                  writeOnly: true
                disputeUsername:
                  type: string
                  description: Username for fetching disputes.
                disputePassword:
                  type: string
                  description: Password for fetching disputes.
                  format: password
                  writeOnly: true
              required:
                - username
                - password
                - clientId
                - clientApiKey
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    PPRO:
      description: PPRO gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: PPRO credentials object.
              properties:
                login:
                  type: string
                  description: PPRO merchant API username.
                password:
                  type: string
                  description: PPRO merchant API password.
                  format: password
                  writeOnly: true
                contractId:
                  type: string
                  description: |-
                    ID of the PPRO contract.
                    This value is used for API credentials.
                privateKey:
                  type: string
                  format: password
                  description: PPRO private key.
                  x-multiline: true
                  writeOnly: true
                privateKeyPassword:
                  type: string
                  format: password
                  description: PPRO private key password.
                  writeOnly: true
                clientCertificate:
                  type: string
                  description: Public key.
                  x-multiline: true
                serverCertificate:
                  type: string
                  description: PPRO CA certificate.
                  x-multiline: true
                notificationSecret:
                  type: string
                  format: password
                  description: Secret used for IPN URLs.
                  writeOnly: true
                sharedSecret:
                  type: string
                  format: password
                  description: Secret used for redirect URLs.
                  writeOnly: true
              required:
                - login
                - password
                - contractId
                - privateKey
                - privateKeyPassword
                - clientCertificate
                - serverCertificate
                - notificationSecret
                - sharedSecret
    Prosa:
      description: Prosa gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Prosa credentials object.
              properties:
                entityId:
                  type: string
                  description: ID of the Prosa entity.
                accessToken:
                  type: string
                  format: password
                  description: Prosa access token.
                  writeOnly: true
              required:
                - entityId
                - accessToken
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    Rapyd:
      description: Rapyd gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Rapyd credentials object.
              properties:
                accessKey:
                  type: string
                  description: Rapyd access key.
                secretKey:
                  type: string
                  format: password
                  description: Rapyd secret key.
                  writeOnly: true
              required:
                - accessKey
                - secretKey
            settings:
              type: object
              description: Rapyd settings object.
              properties:
                ipnUrl:
                  type: string
                  description: |-
                    Instant Payment Notification (IPN) URL configured on Rapyd.
                    This value is used to calculate the signature.
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    RPN:
      description: RPN gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                mid:
                  type: string
                  description: RPN merchant identifier.
                key:
                  type: string
                  description: RPN key.
                  format: password
                  writeOnly: true
              required:
                - mid
                - key
    Realex:
      description: Realex gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantId:
                  type: string
                  description: ID of the Realex merchant.
                secretKey:
                  type: string
                  description: Realex secret key.
                  format: password
                  writeOnly: true
                rebatePassword:
                  type: string
                  description: Realex rebate password.
                  format: password
                  writeOnly: true
                account:
                  type: string
                  description: Realex account.
              required:
                - merchantId
                - secretKey
                - rebatePassword
                - account
    Realtime:
      description: Realtime gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                clientId:
                  type: string
                  description: ID of the Realtime client.
                secretWord:
                  type: string
                  description: Realtime secret word.
                  format: password
                  writeOnly: true
              required:
                - clientId
                - secretWord
    Redsys:
      description: Redsys gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantCode:
                  type: string
                  description: Redsys merchant code.
                  format: password
                  writeOnly: true
                secretCode:
                  type: string
                  description: Redsys secret code.
                  format: password
                  writeOnly: true
              required:
                - merchantCode
                - secretCode
            settings:
              type: object
              description: Redsys settings object.
              properties:
                terminal:
                  type: string
                  description: Redsys terminal.
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    Rotessa:
      description: Rotessa gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              description: Rotessa credentials object.
              properties:
                apiKey:
                  type: string
                  description: Rotessa API key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
            settings:
              type: object
              description: Rotessa settings object.
              properties:
                delay:
                  type: integer
                  description: Automatic capture delay.
              required:
                - delay
    Safecharge:
      description: Safecharge gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Safecharge credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the Safecharge merchant.
                siteId:
                  type: string
                  description: ID of the Safecharge site.
                secretKey:
                  type: string
                  description: Safecharge secret key.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - secretKey
                - siteId
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    SaltarPay:
      description: SaltarPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: SaltarPay credentials object.
              properties:
                apiKey:
                  type: string
                  description: SaltarPay API key.
                  format: password
                  writeOnly: true
                secretKey:
                  type: string
                  description: SaltarPay secret key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
                - secretKey
    SMSVoucher:
      description: SMSVoucher gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                AppId:
                  type: string
                  description: ID of the SMSVoucher application.
              required:
                - AppId
    Sofort:
      description: Sofort gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Sofort credentials object.
              properties:
                configKey:
                  type: string
                  description: Sofort configuration key.
                  format: password
                  writeOnly: true
                nuaPayApiKey:
                  type: string
                  description: NuaPay API key for reconciliation.
                  format: password
                  writeOnly: true
                nuaPayAccountId:
                  type: string
                  description: NuaPay account ID for reconciliation.
              required:
                - configKey
    Sagepay:
      description: Sagepay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                M_ID:
                  type: string
                  description: ID of the Sagepay merchant.
                M_KEY:
                  type: string
                  description: Sagepay merchant key.
                  format: password
                  writeOnly: true
              required:
                - M_ID
                - M_KEY
    SeamlessChex:
      description: SeamlessChex gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: SeamlessChex credentials object.
              properties:
                publicKey:
                  type: string
                  description: SeamlessChex publishable key.
                secretKey:
                  type: string
                  description: SeamlessChex secret key.
                  format: password
                  writeOnly: true
              required:
                - publicKey
                - secretKey
    SecureTrading:
      description: SecureTrading gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: SecureTrading credentials object.
              properties:
                websiteId:
                  type: string
                  description: ID of the SecureTrading website.
                  maxLength: 50
                  example: web_0YV7DE4Z26DQSA1AC92FBJ7SEG
                username:
                  type: string
                  description: SecureTrading web service username.
                password:
                  type: string
                  description: SecureTrading web service password.
                  format: password
                  writeOnly: true
                notificationPassword:
                  type: string
                  description: |-
                    SecureTrading notification password.
                    This password is used to authenticate webhook requests.
                  format: password
                  writeOnly: true
              required:
                - websiteId
                - username
                - password
            settings:
              type: object
              description: SecureTrading settings object.
              properties:
                enableRecurring:
                  type: boolean
                  description: Enables recurring payments.
                  default: false
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    SecurionPay:
      description: SecurionPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: SecurionPay credentials object.
              properties:
                secretApiKey:
                  type: string
                  format: password
                  description: SecurionPay secret API key.
                  writeOnly: true
              required:
                - secretApiKey
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    Skrill:
      description: Skrill gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Skrill credentials object.
              properties:
                accountEmail:
                  type: string
                  description: Email address of your Skrill merchant account.
                secretWord:
                  type: string
                  description: Secret word used for MD5 signature verifications.
                  format: password
                  writeOnly: true
                mqiPassword:
                  type: string
                  description: Password used during MQI or API requests.
                  format: password
                  writeOnly: true
                currencyAccountIds:
                  type: string
                  description: Comma-separated list of currency account IDs.
              required:
                - accountEmail
                - secretWord
            settings:
              type: object
              properties:
                merchantFields:
                  type: string
                  description: |-
                    Comma-separated list of name-value merchant field pairs.
                    Example: `key1:value1,key2:value2`.
                useSPX:
                  type: boolean
                  description: Specifies whether to use SPX code for PIX payment method.
                  default: false
    SmartInvoice:
      description: SmartInvoice gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: SmartInvoice credentials object.
              properties:
                merchantId:
                  type: string
                  description: SmartInvoice merchant account UID.
                applicationId:
                  type: string
                  description: SmartInvoice application UID.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - applicationId
    SparkPay:
      description: SparkPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: SparkPay credentials object.
              properties:
                shopId:
                  type: string
                  description: ID of the SparkPay shop.
                secretKey:
                  type: string
                  description: SparkPay secret key.
                  format: password
                  writeOnly: true
              required:
                - shopId
                - secretKey
    StaticGateway:
      description: StaticGateway gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
    STPMexicoBanks:
      type: integer
      enum:
        - 37006
        - 37009
        - 37019
        - 37135
        - 37166
        - 37168
        - 40002
        - 40012
        - 40014
        - 40021
        - 40030
        - 40036
        - 40037
        - 40042
        - 40044
        - 40058
        - 40059
        - 40060
        - 40062
        - 40072
        - 40102
        - 40103
        - 40106
        - 40108
        - 40110
        - 40112
        - 40113
        - 40124
        - 40126
        - 40127
        - 40128
        - 40129
        - 40130
        - 40131
        - 40132
        - 40133
        - 40136
        - 40137
        - 40138
        - 40140
        - 40141
        - 40143
        - 40145
        - 40147
        - 40148
        - 40150
        - 40151
        - 40152
        - 40154
        - 40155
        - 40156
        - 40158
        - 90600
        - 90601
        - 90602
        - 90605
        - 90606
        - 90608
        - 90613
        - 90614
        - 90616
        - 90617
        - 90620
        - 90621
        - 90623
        - 90626
        - 90627
        - 90628
        - 90630
        - 90631
        - 90634
        - 90636
        - 90637
        - 90638
        - 90640
        - 90642
        - 90646
        - 90648
        - 90649
        - 90652
        - 90653
        - 90655
        - 90656
        - 90659
        - 90670
        - 90671
        - 90674
        - 90677
        - 90678
        - 90679
        - 90680
        - 90681
        - 90683
        - 90684
        - 90685
        - 90686
        - 90687
        - 90689
        - 90901
        - 90902
    STPMexico:
      description: STP Mexico gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: STP Mexico credentials object.
              properties:
                companyName:
                  type: string
                  description: STP Mexico account company name.
                beneficiaryName:
                  type: string
                  description: Name of the bank account holder that is receiving payments.
                bankId:
                  description: >-
                    ID of the bank receiving payments.

                    A list of bank IDs can be found in STP Mexico integration
                    documentation.
                  $ref: '#/components/schemas/STPMexicoBanks'
                bankAccountNumber:
                  type: string
                  description: Bank account number of the payments recipient.
                privateKey:
                  type: string
                  description: STP Mexico private key.
                  format: password
                  x-multiline: true
                  writeOnly: true
                keyPassphrase:
                  type: string
                  description: Passphrase for the private key.
                  format: password
                  writeOnly: true
              required:
                - companyName
                - beneficiaryName
                - bankId
                - bankAccountNumber
                - privateKey
                - keyPassphrase
    Stripe:
      description: Stripe gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - settings
          properties:
            credentials:
              type: object
              description: >-
                Stripe Connect credentials object.

                The credentials object may be provided to control the Stripe
                Connect account to which the gateway account is connected.
              properties:
                stripeClientId:
                  type: string
                  description: ID of the Stripe account client.
                stripeSecret:
                  type: string
                  description: Stripe Connect account secret key account.
                  format: password
                  writeOnly: true
            settings:
              type: object
              description: Stripe settings object.
              required:
                - redirectUrl
              properties:
                redirectUrl:
                  type: string
                  description: >-
                    URL where the user is redirected after authorizing the
                    account on Stripe.
                  format: url
                disablePaymentIntents:
                  type: boolean
                  description: >-
                    Specifies whether to use the Charges API instead of the
                    PaymentIntents API.
                  default: false
                enforceOffSession:
                  type: boolean
                  description: >-
                    Specifies if the `off_session` parameter is set to `true` in
                    Stripe requests.
                  default: false
                copyCredentialsFrom:
                  type: string
                  description: >-
                    ID of an existing Stripe gateway account from which
                    credentials are copied in order to skip the onboarding
                    process.
                setupFutureUsage:
                  type: string
                  description: >-
                    Indicates intent to make future payments with this payment
                    method.

                    - `on_session`: Reuse the payment method when the customer
                    is present.

                    - `off_session`: Reuse the payment method when the customer
                    may or may not be present.
                  enum:
                    - off_session
                    - on_session
            threeDSecureServer:
              type: object
              required:
                - name
              description: Stripe Integrated.
              properties:
                name:
                  type: string
                  description: Name of the Stripe 3DS server.
                  enum:
                    - Stripe3dsServer
                enforceThreeDSecure:
                  type: boolean
                  description: >-
                    Specifies if Stripe must perform 3D Secure. This option
                    overrides any [dynamic 3D Secure Radar
                    rules](https://stripe.com/docs/radar/rules#request-3ds).
    Telr:
      description: Telr gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Telr credentials object.
              properties:
                storeId:
                  type: string
                  description: Hosted payment page V2 store identifier.
                hostedPageAuthenticationKey:
                  type: string
                  description: Hosted payment page V2 authentication key.
                  format: password
                  writeOnly: true
                merchantId:
                  type: string
                  description: Service API merchant identifier.
                serviceApiKey:
                  type: string
                  description: Service API key.
                  format: password
                  writeOnly: true
                remoteApiKey:
                  type: string
                  description: Remote API key.
                  format: password
                  writeOnly: true
              required:
                - storeId
                - hostedPageAuthenticationKey
                - merchantId
                - serviceApiKey
            settings:
              type: object
              description: Telr settings object.
              properties:
                transactionDescription:
                  type: string
                  description: |-
                    Default transaction description.
                    Leave this field blank to use website URL.
    TestProcessor3dsServer:
      type: object
      description: TestProcessor Integrated.
      required:
        - name
      properties:
        name:
          type: string
          description: Name of the TestProcessor plug-in.
          enum:
            - TestSandbox3dsServer
    TestProcessor3dsServers:
      description: TestProcessor3dsServers 3DS servers.
      discriminator:
        propertyName: name
        mapping:
          TestSandbox3dsServer: '#/components/schemas/TestProcessor3dsServer'
          ThreeDSecureIO3dsServer: '#/components/schemas/ThreeDSecureIO3dsServer'
      anyOf:
        - $ref: '#/components/schemas/TestProcessor3dsServer'
        - $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    TestProcessor:
      description: TestProcessor gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          properties:
            threeDSecureServer:
              $ref: '#/components/schemas/TestProcessor3dsServers'
    ToditoCash:
      description: ToditoCash gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: ToditoCash credentials object.
              properties:
                apiKey:
                  type: string
                  description: ToditoCash API key.
                  format: password
                  writeOnly: true
              required:
                - apiKey
    Truevo:
      description: Truevo gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Truevo credentials object.
              properties:
                mid:
                  type: string
                  description: Truevo merchant identifier.
                tid:
                  type: string
                  description: Truevo terminal identifier.
                token:
                  type: string
                  description: Truevo authentication token.
                  format: password
                  writeOnly: true
                merchantName:
                  type: string
                  description: Merchant name for SFTP reconciliation.
                sftpUsername:
                  type: string
                  description: SFTP reconciliation username.
                sftpPrivateKey:
                  type: string
                  format: password
                  description: SFTP reconciliation private key.
                  x-multiline: true
                  writeOnly: true
                sftpKeyPassphrase:
                  type: string
                  format: password
                  description: Passphrase of the SFTP reconciliation private key.
                  writeOnly: true
              required:
                - mid
                - tid
                - token
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    TrustsPay:
      description: TrustsPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: TrustsPay credentials object.
              required:
                - merchantNo
                - gatewayNo
                - signkey
              properties:
                merchantNo:
                  type: string
                  description: TrustsPay merchant number.
                gatewayNo:
                  type: string
                  description: TrustsPay gateway number.
                signkey:
                  type: string
                  format: password
                  description: TrustsPay sign key.
                  writeOnly: true
    Trustly:
      description: Trustly gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Trustly credentials object.
              properties:
                username:
                  type: string
                  description: Trustly username.
                password:
                  type: string
                  description: Trustly password.
                  format: password
                  writeOnly: true
                publicKey:
                  type: string
                  description: Trustly public key.
                  x-multiline: true
                privateKey:
                  type: string
                  description: Trustly private key.
                  format: password
                  x-multiline: true
                  writeOnly: true
              required:
                - usernmae
                - password
                - publicKey
                - privateKey
    TWINT:
      description: TWINT gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            credentials:
              type: object
              description: TWINT credentials object.
              properties:
                storeUuid:
                  type: string
                  description: TWINT store UUID.
                cashRegisterId:
                  type: string
                  description: ID of the cash register.
                publicKey:
                  type: string
                  description: TWINT public key.
                  x-multiline: true
                privateKey:
                  type: string
                  description: TWINT private key.
                  format: password
                  x-multiline: true
                  writeOnly: true
                keyPassphrase:
                  type: string
                  description: TWINT key passphrase.
                  format: password
                  writeOnly: true
              required:
                - storeUuid
                - cashRegisterId
                - publicKey
                - privateKey
                - keyPassphrase
            settings:
              type: object
              description: TWINT settings object.
              properties:
                cashRegisterType:
                  type: string
                  description: TWINT cash register type.
              required:
                - cashRegisterType
    Unlimit:
      description: Unlimit gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Unlimit credentials object.
              properties:
                terminalId:
                  type: string
                  description: ID of the Unlimit terminal.
                password:
                  type: string
                  description: Password of the Unlimit terminal merchant.
                  format: password
                  writeOnly: true
                ipnSecret:
                  type: string
                  description: IPN secrect of the Unlimit merchant.
                  format: password
                  writeOnly: true
              required:
                - terminalId
                - password
                - ipnSecret
    UPayCard:
      description: UPayCard gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                receiver_account:
                  type: string
                  description: UPayCard merchant receiver account.
                key:
                  type: string
                  description: UPayCard merchant key.
                  format: password
                  writeOnly: true
                secret:
                  type: string
                  description: UPayCard merchant secret.
                  format: password
                  writeOnly: true
              required:
                - receiver_account
                - key
                - secret
            settings:
              type: object
              description: UpayCard settings object.
              required:
                - tolerancePercentage
              properties:
                tolerancePercentage:
                  $ref: '#/components/schemas/AmountAdjustmentTolerance'
    USAePay:
      description: USAePay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                sourceKey:
                  type: string
                  description: USAePay source key.
                  format: password
                  writeOnly: true
                pin:
                  type: string
                  description: USAePay pin.
                  format: password
                  writeOnly: true
              required:
                - sourceKey
                - pin
    VantivLitle:
      description: VantivLitle gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                username:
                  type: string
                  description: VantivLitle username.
                password:
                  type: string
                  description: VantivLitle password.
                  format: password
                  writeOnly: true
                merchantId:
                  type: string
                  description: ID of the VantivLitle merchant.
              required:
                - username
                - password
                - merchantId
    VCreditos:
      description: VCreditos gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: VCreditos credentials object.
              properties:
                publicKey:
                  type: string
                  description: VCreditos API public key.
                secretKey:
                  type: string
                  description: VCreditos API secret key.
                  format: password
                  writeOnly: true
              required:
                - publicKey
                - secretKey
            settings:
              type: object
              description: VCreditos settings object.
              properties:
                merchantWebsiteLoginLabel:
                  type: string
                  description: Label caption for a merchant website login input.
                merchantWebsiteLoginDescription:
                  type: string
                  description: Description block for a merchant website login input.
    VegaWallet:
      description: VegaWallet gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: VegaWallet credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the VegaWallet merchant.
                password:
                  type: string
                  description: VegaWallet merchant password.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - password
    Wallet88:
      description: Wallet88 gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Wallet88 credentials object.
              properties:
                sid:
                  type: string
                  description: ID of the Wallet88 API site.
                rcode:
                  type: string
                  description: Wallet88 API rcode.
                  format: password
                  writeOnly: true
              required:
                - sid
                - rcode
            settings:
              type: object
              description: Wallet88 settings object.
              properties:
                paymentCardMethod:
                  description: Method to send for payment card.
                  type: string
                  enum:
                    - creditcard
                    - mastercard
                  default: creditcard
    Walpay:
      description: Walpay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantName:
                  type: string
                  description: Walpay merchant name.
                merchantPin:
                  type: string
                  description: Walpay merchant pin.
                  format: password
                  writeOnly: true
              required:
                - merchantName
                - merchantPin
    WesternUnion:
      description: WesternUnion gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: WesternUnion credentials object.
              properties:
                clientId:
                  type: string
                  description: ID of the WesternUnion client.
                certificateCommonName:
                  type: string
                  description: WesternUnion certificate Common Name (CN).
                certificateSerialNumber:
                  type: string
                  description: WesternUnion certificate Serial Number (SN).
              required:
                - clientId
                - certificateCommonName
                - certificateSerialNumber
    Wirecard:
      description: Wirecard gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantUsername:
                  type: string
                  description: Wirecard merchant username.
                merchantPassword:
                  type: string
                  description: Wirecard merchant password.
                  format: password
                  writeOnly: true
                businessSignature:
                  type: string
                  description: Wirecard merchant business case signature.
                  format: password
                  writeOnly: true
                delay:
                  type: integer
                  description: Automatic capture delay.
                sftpUsername:
                  type: string
                  description: Wirecard SFTP username.
                sftpPrivateKey:
                  type: string
                  description: Wirecard SFTP private key.
                  format: password
                  x-multiline: true
                  writeOnly: true
              required:
                - merchantUsername
                - merchantPassword
                - businessSignature
                - delay
    WorldlineAtosFrankfurt:
      description: WorldlineAtosFrankfurt gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
            - settings
          properties:
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
            credentials:
              type: object
              description: WorldlineAtosFrankfurt credentials.
              properties:
                cardAcceptorIdCode:
                  type: string
                  description: Card acceptor ID Code.
                acquiringInstitutionIdentificationCode:
                  type: string
                  description: Identification code of the acquiring institution.
              required:
                - cardAcceptorIdCode
                - acquiringInstitutionIdentificationCode
            settings:
              type: object
              description: WorldlineAtosFrankfurt settings.
              properties:
                cardAcceptorName:
                  type: string
                  description: Name of the card acceptor.
                cardAcceptorLocation:
                  type: string
                  description: Location of the card acceptor.
                cardAcceptorCountryCode:
                  type: string
                  description: Country code of the card acceptor.
                terminalIds:
                  type: string
                  description: Comma-separated list of terminal IDs.
              required:
                - cardAcceptorName
                - cardAcceptorLocation
                - cardAcceptorCountryCode
    Worldpay:
      description: Worldpay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                merchantCode:
                  type: string
                  description: Worldpay merchant code.
                  format: password
                  writeOnly: true
                merchantPassword:
                  type: string
                  description: Worldpay merchant password.
                  format: password
                  writeOnly: true
                payoutMerchantCode:
                  type: string
                  description: Optional alternate merchant code for payouts.
                  format: password
                  writeOnly: true
                payoutMerchantPassword:
                  type: string
                  description: Optional alternate merchant password for payouts.
                  format: password
                  writeOnly: true
                alternativePaymentsUsername:
                  type: string
                  description: Optional API username for an alternative payments platform.
                alternativePaymentsPassword:
                  type: string
                  description: Optional API password for an alternative payments platform.
                  format: password
                  writeOnly: true
                sftpUsername:
                  type: string
                  description: SFTP username.
                sftpPrivateKey:
                  type: string
                  description: SFTP private key.
                  format: password
                  x-multiline: true
                  writeOnly: true
                sftpKeyPassphrase:
                  type: string
                  format: password
                  description: Passphrase of the SFTP private key.
                  writeOnly: true
              required:
                - merchantCode
                - merchantPassword
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
            settings:
              type: object
              properties:
                delay:
                  type: integer
                  description: Automatic capture delay in hours.
                  minimum: 0
                  default: 0
                enforceStoredCredentials:
                  type: string
                  description: >-
                    Specifies whether to enforce stored credentials.

                    `mit-enabled` means that stored credentials are sent only on
                    merchant initiated transactions. This is the expected usage.

                    `always-enabled` means that stored credentials are also
                    used, if available, for customer facing transactions.
                  enum:
                    - disabled
                    - mit-enabled
                    - always-enabled
                  default: disabled
                merchantInitiatedReason:
                  type: string
                  description: Value to send with merchant-initiated transactions.
                  enum:
                    - UNSCHEDULED
                    - RECURRING
                    - INSTALMENT
                    - REAUTH
                    - DELAYED
                    - INCREMENTAL
                    - RESUBMISSION
                    - NOSHOW
                  default: UNSCHEDULED
    Zotapay:
      description: Zotapay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                endpointId:
                  type: string
                  description: ID of the Zotapay endpoint.
                merchantId:
                  type: string
                  description: ID of the Zotapay merchant.
                merchantSecretKey:
                  type: string
                  description: Zotapay merchant secret key.
                  format: password
                  writeOnly: true
              required:
                - endpointId
                - merchantId
                - merchantSecretKey
    eMerchantPay:
      description: eMerchantPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                clientId:
                  type: string
                  description: ID of the eMerchantPay client.
                apiKey:
                  type: string
                  description: eMerchantPay API key.
                  format: password
                  writeOnly: true
                username:
                  type: string
                  description: eMerchantPay username for the Genesis platform.
                token:
                  type: string
                  description: eMerchantPay token for the Genesis platform.
                password:
                  type: string
                  description: eMerchantPay password for the Genesis platform.
                  format: password
                  writeOnly: true
            settings:
              type: object
              description: eMerchantPay settings object.
              properties:
                useGenesisPlatform:
                  type: boolean
                  description: >-
                    Specifies whether to use the Genesis platform on
                    eMerchantPay.
                  default: false
            threeDSecureServer:
              $ref: '#/components/schemas/ThreeDSecureIO3dsServer'
    ecoPayz:
      description: ecoPayz gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: ecoPayz credentials object.
              properties:
                paymentPageId:
                  type: string
                  description: ID of the ecoPayz payment page.
                merchantAccountNumber:
                  type: string
                  description: ecoPayz merchant account number.
                merchantPassword:
                  type: string
                  description: ecoPayz merchant password.
                  format: password
                  writeOnly: true
              required:
                - paymentPageId
                - merchantAccountNumber
                - merchantPassword
            settings:
              type: object
              description: ecoPayz settings object.
              properties:
                validCurrency:
                  type: string
                  description: Three letter currency code in ISO 4217 format.
                  enum:
                    - CAD
                    - EUR
                    - GBP
                    - USD
              required:
                - validCurrency
    iCanPay:
      description: iCanPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                authenticateId:
                  type: string
                  description: Authenticate ID of the iCanPay account.
                authenticatePw:
                  type: string
                  description: iCanPay authenticate password.
                  format: password
                  writeOnly: true
                publicKey:
                  type: string
                  description: iCanPay API public key.
                secretKey:
                  type: string
                  description: iCanPay API secret key.
                  format: password
                  writeOnly: true
              required:
                - authenticateId
                - authenticatePw
                - publicKey
                - secretKey
            settings:
              type: object
              properties:
                use3DSEndpoint:
                  type: boolean
                  description: Specifies whether to use a 3DS endpoint.
    iCheque:
      description: iCheque gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                clientId:
                  type: string
                  description: ID of the iCheque client.
                secretWord:
                  type: string
                  description: iCheque secret word.
                  format: password
                  writeOnly: true
                apiUserId:
                  type: string
                  description: >-
                    Username for the Alliance API that is used for transaction
                    reporting.
                apiSecurityToken:
                  type: string
                  description: >-
                    Hash of the password for the Alliance API that is used for
                    transaction reporting.
                  format: password
                  writeOnly: true
              required:
                - clientId
                - secretWord
    iDebit:
      description: iDebit gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: iDebit credentials object.
              properties:
                merchantId:
                  type: string
                  description: iDebit merchant account number.
                password:
                  type: string
                  description: iDebit merchant account password.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - password
            settings:
              type: object
              properties:
                merchantSubId:
                  type: integer
                  description: ID of the merchant or organization.
    vegaaH:
      description: vegaaH gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              properties:
                terminalId:
                  type: string
                  description: ID of the vegaaH terminal.
                password:
                  type: string
                  description: vegaaH password.
                  format: password
                  writeOnly: true
              required:
                - terminalId
                - password
    XPay:
      description: XPay gateway configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: XPay credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the XPay merchant.
                encryptionKey:
                  type: string
                  format: password
                  writeOnly: true
                  description: XPay encryption key.
              required:
                - merchantId
                - encryptionKey
    Zimpler:
      description: Zimpler configuration.
      allOf:
        - $ref: '#/components/schemas/GatewayAccount'
        - type: object
          required:
            - credentials
          properties:
            credentials:
              type: object
              description: Zimpler credentials object.
              properties:
                merchantId:
                  type: string
                  description: ID of the Zimpler merchant.
                apiKey:
                  type: string
                  description: Zimpler API key.
                  format: password
                  writeOnly: true
              required:
                - merchantId
                - apiKey
    DigitalWallets:
      type: object
      description: Configure which digital wallets are enabled.
      title: Digital Wallets
      properties:
        applePay:
          type: object
          description: |-
            Apple Pay digital wallet configuration. If not using Apple Pay,
            do not use this field.
          required:
            - isEnabled
          properties:
            isEnabled:
              type: boolean
              description: Specifies if Apple Pay is enabled.
              default: false
            displayName:
              description: >-
                String of 64, or fewer, UTF-8 characters containing the
                canonical name for your store,

                which is suitable for display.

                Do not localize this name.
              type:
                - string
                - 'null'
              example: Test merchant
            country:
              $ref: '#/components/schemas/Country'
        googlePay:
          type: object
          description: |-
            Google Pay™ digital wallet configuration. If not using Google Pay™,
            do not use this field.
          required:
            - isEnabled
          properties:
            isEnabled:
              type: boolean
              description: Specifies if Google Pay™ is enabled.
              default: false
            merchantName:
              description: Merchant name in Google Pay™.
              type:
                - string
                - 'null'
              example: Test merchant
            merchantOrigin:
              description: >-
                Merchant origin in Google Pay™. This uses the fully qualified
                domain name.
              type:
                - string
                - 'null'
              example: www.example.com
            country:
              $ref: '#/components/schemas/Country'
    ValidationErrorExtensions:
      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
    InvalidError:
      description: Invalid data sent.
      allOf:
        - $ref: '#/components/schemas/Error'
        - $ref: '#/components/schemas/ValidationErrorExtensions'
    GatewayAccountDowntimeSchedule:
      type: object
      required:
        - startTime
        - endTime
      properties:
        id:
          type: string
          description: ID of the gateway account downtime schedule.
          readOnly: true
          maxLength: 50
          example: gw_dwn_0YVCXRK9TKCC6AMAPFB9M4RXDP
        status:
          description: Status of the gateway account downtime schedule.
          readOnly: true
          type: string
          enum:
            - pending
            - ongoing
            - finished
        reason:
          description: Reason for the gateway account downtime schedule.
          readOnly: true
          type: string
          enum:
            - scheduled-maintenance
            - daily-limit-reached
            - monthly-limit-reached
        startTime:
          description: Date and time when the gateway account scheduled downtime starts.
          type: string
          format: date-time
        endTime:
          description: Date and time when the gateway account scheduled downtime ends.
          type: string
          format: date-time
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    GatewayAccountLimit:
      description: Gateway account limit details.
      type: object
      required:
        - cap
      properties:
        id:
          description: ID of the gateway account limit.
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        status:
          description: Status of the gateway account limit.
          readOnly: true
          type: string
          enum:
            - monitoring
            - reached
        startTime:
          description: Date and time when the gateway account limit starts.
          type: string
          format: date-time
          readOnly: true
        endTime:
          description: |-
            Date and time when the gateway account limit ends.
            When a gateway account limit ends the limit resets.
          type: string
          format: date-time
          readOnly: true
        frequency:
          description: Frequency at which the gateway account limit period resets.
          type: string
          readOnly: true
          enum:
            - daily
            - monthly
        type:
          description: Type of gateway account limit.
          type: string
          readOnly: true
          enum:
            - money
            - count
          x-enumDescriptions:
            money: >-
              Limits the amount of money that a transaction can process on a
              gateway account. If `money` is chosen, the currency is the report
              currency.
            count: >-
              Limits the total number of transaction can be processed on a
              gateway account.
        cap:
          description: >-
            Limits the maximum allowed value.

            If `type` is set to `money`, the currency is the report currency.

            `cap` only applies to approved transactions of type `authorize` or
            `sale`.
          type: integer
          example: 1000
        usage:
          description: Usage of the gateway account limit during this period.
          type: integer
          example: 375
          readOnly: true
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    GatewayAccountTimeline:
      type: object
      properties:
        id:
          type: string
          description: ID of the timeline message.
          readOnly: true
          maxLength: 50
          example: tmln_0YV8Q9WEF5DTA8HFXS27D1G6GC
        type:
          description: Type of timeline message.
          type: string
          readOnly: true
          enum:
            - gateway-account-created
            - gateway-account-changed
            - gateway-account-enabled
            - gateway-account-disabled
            - gateway-account-down
            - gateway-account-up
            - gateway-account-closed
            - gateway-account-limit-reached
            - gateway-account-limit-reset
            - gateway-account-onboarding-completed
            - gateway-account-onboarding-failed
        triggeredBy:
          description: Specifies who, or what, triggered the timeline event.
          type: string
          readOnly: true
          enum:
            - rebilly
            - app
            - direct-api
        message:
          description: Contents of the timeline message.
          type: string
        extraData:
          $ref: '#/components/schemas/TimelineExtraData'
        occurredTime:
          description: Date and time when the timeline message occurred.
          readOnly: true
          $ref: '#/components/schemas/ServerTimestamp'
        _links:
          $ref: '#/components/schemas/SelfLink'
    GatewayAccountFinancialSettings:
      type: object
      description: Financial settings.
      required:
        - settlementSettings
      properties:
        settlementSettings:
          $ref: '#/components/schemas/SettlementSettings'
        riskReserveSettings:
          description: |-
            Risk reserve settings.
            Use these settings to set up funds reserves before settlement.
          type: array
          items:
            type: object
            required:
              - filter
              - bips
              - period
            properties:
              filter:
                description: >-
                  Filter that is based on the properties of the transaction and
                  used to determine when to apply the settings.
                minLength: 1
                maxLength: 255
                example: paymentInstrument.method:payment-card
                type: string
              bips:
                $ref: '#/components/schemas/Bips'
              period:
                description: Instruction for calculating the reserve release time.
                $ref: '#/components/schemas/SchedulingMethodDateInterval'
    DigitalWalletOnboardingApplePay:
      type: object
      description: Register a domain with Apple Pay and associate it with Rebilly.
      required:
        - domain
      properties:
        domain:
          description: Domain to register.
          type: string
        status:
          description: Status of Apple Pay domain registration.
          type: string
          readOnly: true
          enum:
            - failed
            - registered
            - already-registered
    GridSegment:
      type: object
      required:
        - data
        - owner
        - scope
      properties:
        id:
          type: string
          description: ID of the segment.
          readOnly: true
          maxLength: 50
          example: grd_seg_0YVCNRJW0ADV49TN8BD9X91XB5
        owner:
          description: Creator of segment.
          readOnly: true
          type: object
          properties:
            id:
              description: User ID of the creator.
              type: string
              $ref: '#/components/schemas/ResourceId'
            name:
              description: First and last name of the creator.
              type: string
        data:
          description: >-
            Object that contains a schema that is used to set up the UI for the
            segment.

            This schema is built and consumed by the frontend.

            It includes information such as: segment name, UI settings, and so
            on.
          type: object
        isStarred:
          description: |-
            Specifies if this segment is starred by the current user.
            Starring a segment marks it as a favorite segment,
            and also adds the segment to a starred folder in the UI.
          type: boolean
        isVisible:
          description: Specifies if the segment is visible to the current user.
          type: boolean
        userIds:
          type: array
          uniqueItems: true
          writeOnly: true
          description: |-
            List of user IDs with which the segment is shared.
            This field is used when the `scope` field is set to `shared`.
          items:
            description: ID of the user.
            $ref: '#/components/schemas/ResourceId'
        users:
          type: array
          uniqueItems: true
          description: List of user details with which this segment is shared.
          readOnly: true
          items:
            type: object
            description: User details.
            properties:
              id:
                description: ID of the user.
                type: string
                $ref: '#/components/schemas/ResourceId'
              name:
                description: First and last name.
                type: string
        scope:
          description: Controls the visibility of the segment.
          type: string
          enum:
            - private
            - public
            - shared
          x-enumDescriptions:
            private: Visible only to the owner the segment.
            public: Visible to all in the owner's organization.
            shared: >-
              Visible to a specific group of users that are specified in the
              `userIds` field.
        systemId:
          description: >-
            If the segment is derived from a system segment,

            this field contains the ID of the related system segment.

            To provide this field in a request, the `scope` field must be set to
            `private` .
          writeOnly: true
          type: string
    Integration:
      type: object
      properties:
        service:
          readOnly: true
          description: Name of the integration service.
          type: string
          enum:
            - google-sheets
            - keap-infusionsoft
            - intuit-quickbooks
        count:
          readOnly: true
          type: integer
          minimum: 0
          description: Total number of available rule sets.
        configurations:
          readOnly: true
          type: array
          minItems: 0
          description: List of configurations.
          items:
            type: object
            properties:
              labels:
                description: Labels of the configuration.
                type: array
                minItems: 0
                items:
                  type: string
              eventType:
                $ref: '#/components/schemas/EventType'
              title:
                type: string
                description: Title of the configuration.
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - oauth2Connect
    ValueList:
      type: object
      required:
        - description
        - values
      properties:
        id:
          type: string
          description: ID of the list.
          readOnly: true
          maxLength: 50
          example: lst_0YVCXVQH84DEF93D8VBTJQ9TGK
        version:
          description: Version of the list.
          type: integer
          readOnly: true
          minimum: 1
        description:
          description: Description of the list.
          type: string
        values:
          description: Values in the list.
          type: array
          items:
            type: string
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    Membership:
      type: object
      required:
        - organization
        - user
      properties:
        organization:
          description: Organization membership.
          readOnly: true
          type: object
          properties:
            id:
              description: ID of the organization.
              type: string
              $ref: '#/components/schemas/ResourceId'
            name:
              description: Name of the organization.
              type: string
            createdTime:
              $ref: '#/components/schemas/CreatedTime'
            updatedTime:
              $ref: '#/components/schemas/UpdatedTime'
        user:
          description: Membership user.
          readOnly: true
          type: object
          properties:
            id:
              type: string
              description: ID of the user.
              maxLength: 50
              example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
            name:
              description: First and last name of the user.
              type: string
            email:
              description: Email address of the user.
              type: string
              format: email
              maxLength: 100
        allowedIps:
          $ref: '#/components/schemas/AllowedIps'
        permissions:
          description: |-
            Permissions that the user has within the organization.
            Use the wildcard character `*` for full access.
          $ref: '#/components/schemas/AclPermissions'
        isOwner:
          description: Specifies if the user is the owner of the organization.
          type: boolean
        isDefault:
          description: >-
            Specifies if the organization is the default organization for the
            user.
          type: boolean
          readOnly: true
        roleIds:
          type: array
          description: >-
            Role IDs associated with the user.

            Role IDs specify the roles that the user performs within the
            organization.

            For example, the user may be an organization admin.
          items:
            type: string
        acl:
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/Acl'
        _links:
          $ref: '#/components/schemas/SelfLink'
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            roles:
              type: array
    Organization:
      type: object
      required:
        - name
        - country
      properties:
        id:
          type: string
          description: >-
            Unique organization identifier.

            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).
          readOnly: true
          maxLength: 50
          example: org_0YVDM8RC7GDADADSBSMW124JA8
        name:
          description: Name of the organization.
          type: string
          maxLength: 60
          x-sortable: true
        website:
          description: |-
            Website URL of the organization.
            This value must begin with `https://` or `http://`.
          type: string
          maxLength: 65
          writeOnly: true
          format: url
          example: https://example.com
        address:
          description: Street address of the organization.
          type:
            - string
            - 'null'
          maxLength: 60
          x-sortable: true
        address2:
          description: Second line of the street address.
          type:
            - string
            - 'null'
          maxLength: 60
          x-sortable: true
        city:
          description: City where the organization is located.
          type:
            - string
            - 'null'
          maxLength: 45
          x-sortable: true
        region:
          description: Region or state where the organization is located.
          type:
            - string
            - 'null'
          maxLength: 45
          x-sortable: true
        country:
          description: >-
            Country where the organization is located, in [ISO Alpha-2 code
            format](https://www.iso.org/obp/ui/#search/code/).
          type:
            - string
            - 'null'
          pattern: ^[A-Z]{2}$
          x-sortable: true
        postalCode:
          description: Postal code of the organization.
          type: string
          maxLength: 10
          x-sortable: true
        phoneNumbers:
          $ref: '#/components/schemas/ContactPhoneNumbers'
        emails:
          $ref: '#/components/schemas/ContactEmails'
        taxDescriptor:
          description: >-
            Tax label of the organization. This information is displayed on the
            invoice.
          type:
            - string
            - 'null'
          maxLength: 255
        invoiceTimeZone:
          description: >-
            Specifies the time zone to display on an invoice. UTC is used by
            default.
          type: string
          maxLength: 50
          example: America/New_York
        reportCurrency:
          description: |-
            Currency to use for conversion in reports.
            This value cannot be changed.
          type: string
          pattern: ^[A-Z]{3}$
          example: USD
        questionnaire:
          type:
            - object
            - 'null'
          description: Organization questionnaire.
          properties:
            role:
              type:
                - string
                - 'null'
              description: Role of the owner.
            monthlyTransactions:
              type:
                - string
                - 'null'
              description: Amount of monthly processed transactions.
            products:
              type:
                - array
                - 'null'
              description: List of products the organization is interested in.
              items:
                type: string
            integrationType:
              type:
                - string
                - 'null'
              description: Type of integration the organization would like.
            launchTiming:
              type:
                - string
                - 'null'
              description: When the organization would like to go live.
        settings:
          type: object
          description: Organization settings.
          properties:
            defaultTaxCalculator:
              type: object
              description: Tax calculation settings.
              required:
                - type
              properties:
                type:
                  type: string
                  description: Type of tax calculator.
                  enum:
                    - taxjar
                    - avalara
                    - flat
                rate:
                  type:
                    - number
                    - 'null'
                  format: float
                  description: Rate for flat tax calculation.
            billing:
              description: Global organization settings for billing.
              type:
                - object
                - 'null'
              properties:
                pendingOrderTtl:
                  description: >-
                    Length of time, in ISO-8601 durations format, before which a
                    pending order is automatically abandoned.
                  type:
                    - string
                    - 'null'
                  example: P7D
                  default: null
                orderDelinquencyPeriod:
                  description: >-
                    Length of time, in ISO-8601 durations format,

                    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 the provided value is `null`, the order does not change
                    state.
                  type:
                    - string
                    - 'null'
                  example: P7D
                  default: null
            taxLocations:
              type: array
              description: >-
                Additional organization addresses where a merchant may want to
                collect taxes using the `taxjar` tax calculator.


                Available only for US-based organizations.
              items:
                type: object
                required:
                  - country
                properties:
                  address:
                    description: Street address of the tax location.
                    type:
                      - string
                      - 'null'
                    maxLength: 60
                  city:
                    description: City of the tax location.
                    type:
                      - string
                      - 'null'
                    maxLength: 45
                  region:
                    description: Region or state of the tax location.
                    type:
                      - string
                      - 'null'
                    maxLength: 45
                  country:
                    description: >-
                      Country of the tax location, in [ISO Alpha-2 code
                      format](https://www.iso.org/obp/ui/#search/code/).
                    type: string
                    pattern: ^[A-Z]{2}$
                  postalCode:
                    description: Postal code of the tax location.
                    type:
                      - string
                      - 'null'
                    maxLength: 10
            notifications:
              description: Organization access-related notification settings.
              type: object
              properties:
                notifyOnUserAccessChanges:
                  description: >-
                    Specifies whether to send notifications when users are
                    created or updated.
                  type: boolean
                  default: false
                notifyOnApiKeyAccessChanges:
                  description: >-
                    Specifies whether to send notifications when API keys are
                    created or updated.
                  type: boolean
                  default: false
                notificationEmailAddresses:
                  description: List of email addresses to send notifications to.
                  type: array
                  items:
                    type: string
                    format: email
                  default: []
        taxNumbers:
          type:
            - array
            - 'null'
          description: Tax numbers of the organization.
          items:
            $ref: '#/components/schemas/TaxNumber'
        features:
          type: array
          description: Organization features.
          readOnly: true
          items:
            type: object
            properties:
              name:
                description: Name of the feature.
                type: string
              description:
                description: Description of the feature.
                type: string
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - attachments
    CountriesUnrestrictedMetadata:
      type: object
      title: Unrestricted
      required:
        - mode
      properties:
        mode:
          type: string
          enum:
            - unknown
            - all
        values:
          description: List of supported countries.
          type: array
          uniqueItems: true
          items:
            type: string
            minLength: 2
            maxLength: 2
            pattern: ^[A-Z]{2}$
    CountriesSubsetMetadata:
      type: object
      title: Subset
      required:
        - mode
        - values
      properties:
        mode:
          type: string
          enum:
            - subset
        values:
          description: List of supported countries.
          type: array
          minItems: 1
          uniqueItems: true
          items:
            type: string
            minLength: 2
            maxLength: 2
            pattern: ^[A-Z]{2}$
    CountriesMetadata:
      type: object
      description: Countries metadata.
      discriminator:
        propertyName: mode
        mapping:
          unknown: '#/components/schemas/CountriesUnrestrictedMetadata'
          all: '#/components/schemas/CountriesUnrestrictedMetadata'
          subset: '#/components/schemas/CountriesSubsetMetadata'
      anyOf:
        - $ref: '#/components/schemas/CountriesUnrestrictedMetadata'
        - $ref: '#/components/schemas/CountriesSubsetMetadata'
    PaymentMethodMetadata:
      type: object
      additionalProperties: false
      required:
        - apiName
        - name
        - summary
        - description
        - countries
      properties:
        apiName:
          description: Name of the payment method returned in the API response.
          type: string
          pattern: ^[\w\. -]+$
        name:
          description: Name of the payment method.
          type: string
          pattern: ^[\w\. -]+$
        landscapeLogo:
          description: URL for the payment method logo optimized for landscape orientation.
          type:
            - string
            - 'null'
          format: uri
        portraitLogo:
          description: URL for the payment method logo optimized for portrait orientation.
          type:
            - string
            - 'null'
          format: uri
        summary:
          description: |-
            Short description of the payment method.
            This field supports Markdown.
          type: string
        description:
          description: |-
            Detailed information about the payment method.
            This field supports Markdown.
          type: string
        countries:
          $ref: '#/components/schemas/CountriesMetadata'
        storefrontEnabled:
          type: boolean
          default: false
        _links:
          $ref: '#/components/schemas/SelfLink'
    PaymentGatewayMetadata:
      type: object
      additionalProperties: false
      required:
        - apiName
        - logo
        - paymentMethods
        - merchantCountries
        - currencies
      properties:
        apiName:
          description: Name of the payment gateway returned in the API response.
          type: string
          pattern: ^[\w\. -]+$
        otherNames:
          description: |-
            List of former names associated with the payment gateway.
            Gateways may change their names or may also be known by other names.
            Tracking this list may help customer support and developers.
          type: array
          items:
            type: object
            additionalProperties: false
            required:
              - name
            properties:
              name:
                description: Alternative or former name of the payment gateway.
                type: string
              description:
                description: Short description about this name.
                type: string
              logo:
                description: URL for the logo used with this name.
                type: string
                format: uri
        logo:
          description: URL for the logo of the gateway.
          type: string
          format: uri
        summary:
          description: |-
            Short description of the payment gateway.
            This field supports Markdown.
          type:
            - string
            - 'null'
        homepage:
          description: URL of the payment gateway home page.
          type:
            - string
            - 'null'
          format: uri
        externalDocs:
          description: >-
            List of links to the documentation of the payment gateway.

            For example, online API guides provided by gateways or a link to the
            documents in Google Drive.
          type: array
          items:
            type: object
            additionalProperties: false
            required:
              - url
            properties:
              url:
                description: |-
                  URL of the target documentation.
                  This value must be in URL format.
                type: string
                format: uri
              description:
                description: Short description of the target documentation.
                type: string
        publishedPricing:
          description: >-
            Pricing description for the payment gateway, if pricing is
            published.
          type:
            - string
            - 'null'
        setupInstructions:
          description: >-
            Special gateway account set up instructions for merchants.

            For example: After adding this gateway account,

            set the IPN to `//example.com/ipns/{gateway-name}/{organization-id}`
            by contacting your account rep.
          type:
            - string
            - 'null'
        paymentMethods:
          description: >-
            Array of supported payment methods. For example, `payment-card` and
            `bitcoin`.
          type: array
          items:
            description: Name of the payment method returned in the API response.
            type: string
            pattern: ^[\w\. -]+$
          minLength: 1
        cardBrands:
          description: |-
            Array of supported card-brands.
            If the payment gateway supports payment cards.
          type: array
          items:
            $ref: '#/components/schemas/PaymentCardBrand'
        merchantCountries:
          $ref: '#/components/schemas/CountriesMetadata'
        currencies:
          type: object
          description: Currencies metadata.
          required:
            - mode
          oneOf:
            - title: Unrestricted
              properties:
                mode:
                  description: Specifies how the currencies are compared.
                  type: string
                  enum:
                    - unknown
                    - all
            - title: Subset
              required:
                - values
              properties:
                mode:
                  description: Specifies how the currencies are compared.
                  type: string
                  enum:
                    - subset
                values:
                  description: List of supported currencies.
                  type: array
                  minItems: 1
                  uniqueItems: true
                  items:
                    $ref: '#/components/schemas/CurrencyCode'
        operations:
          description: Array of operations that are supported by the payment gateway.
          type: array
          items:
            type: string
            enum:
              - verify
              - auth
              - capture
              - sale
              - refund
              - query
              - credit
              - 3DS1
              - 3DS2
              - checkCredentials
        supported3dsServers:
          description: Array of supported 3DS-servers.
          type: array
          items:
            type: string
        supportedPaymentInstrumentSetupInstructions:
          description: >-
            Array of set up instructions that are supported by the payment
            gateway.
          type: array
          items:
            type: string
            enum:
              - do-nothing
              - authorize
              - authorize-and-void
              - sca
            x-enumDescriptions:
              authorize: >-
                Creates an `authorize` transaction in the amount or currency of
                the request.

                This is used when a gateway account is configured for Strong
                Customer Authentication (SCA).
              authorize-and-void: >-
                Creates an `authorize` transaction in the amount and currency of
                the request,

                followed by a `void`, if the `authorize` is approved.

                This is used when a gateway account is configured for Strong
                Customer Authentication (SCA).
              sca: >-
                Uses Strong Customer Authentication (SCA) without an `authorize`
                transaction.

                SCA includes 3DS, and specific wallet behavior,

                such as setting up a billing agreement with PayPal.
              do-nothing: |-
                Does nothing except return an approved `setup` transaction.
                This is the default behavior.
        reconciliationSupport:
          description: Specifies whether transactions can be reconciled.
          type: boolean
          default: false
        disputeSupport:
          description: >-
            Specifies whether dispute data entry can be automated with an API or
            SFTP access.

            For example, chargeback, retrieval, or TC-40 disputes.
          type: boolean
          default: false
        offsite:
          description: |-
            Specifies whether offsite interaction is required.
            For example, 3DS, PayPal login, or completing something in a store.
          type: boolean
          default: false
        ipn:
          type:
            - object
            - 'null'
          description: >-
            Describes the Instant Payment Notification (IPN) that a payment
            gateway supports.

            If this value is null, IPN is not supported.
          required:
            - type
          properties:
            type:
              description: |-
                Type of supported Instant Payment Notification (IPN).
                If this value is null, IPN is not supported.
              type: string
              enum:
                - static
                - dynamic
            verificationMethod:
              description: >-
                Method used to verify that the data in the IPN call can be
                trusted.
              type: string
              enum:
                - query
                - signature
              default: query
        recommendedWaitingApprovalTtl:
          description: Recommended Time To Live (TTL) before abandoning the transaction.
          type: integer
          default: 3600
          minimum: 299
          maximum: 16777216
        _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
              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
    Session:
      type: object
      required:
        - permissions
      properties:
        id:
          type: string
          description: ID of the session.
          readOnly: true
          maxLength: 50
          example: jwt_0YV7DEJX80CDRAKVTV478ZNJDR
        token:
          description: Authentication token of the session.
          type: string
        permissions:
          description: |-
            Permissions of the session.
            See the format in example.
            Use wildcard `*` for full access.
          $ref: '#/components/schemas/AclPermissions'
        userId:
          type: string
          description: ID of the user.
          readOnly: true
          maxLength: 50
          example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        expiredTime:
          description: Date and time when the session expired. Defaults to one hour.
          type: string
          format: date-time
        _links:
          $ref: '#/components/schemas/SelfLink'
    OrderPreview:
      type: object
      required:
        - websiteId
        - items
      properties:
        websiteId:
          writeOnly: true
          allOf:
            - $ref: '#/components/schemas/WebsiteId'
        items:
          description: Items details.
          type: array
          writeOnly: true
          minItems: 1
          items:
            type: object
            required:
              - 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'
    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
        - nsf-response-received
        - 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
    GlobalWebhook:
      type: object
      required:
        - method
        - url
        - credentialHash
      properties:
        id:
          type: string
          description: ID of the webhook.
          readOnly: true
          maxLength: 50
          example: hook_0YVBG8S0K0DG59J6S3RMN9K452
        eventsFilter:
          description: Array of system event types.
          type: array
          default: []
          items:
            $ref: '#/components/schemas/GlobalEventType'
        status:
          x-basic: true
          type: string
          default: active
          enum:
            - active
            - inactive
        method:
          type: string
          x-basic: true
          enum:
            - GET
            - POST
            - PUT
            - PATCH
            - DELETE
        url:
          description: URL that triggers when a specified event occurs.
          type: string
          format: uri
        headers:
          description: Webhook headers.
          type: array
          items:
            type: object
            description: Webhook headers.
            properties:
              name:
                description: Name of the property.
                type: string
              status:
                description: Status of the property.
                type: string
                default: active
                enum:
                  - active
                  - inactive
              value:
                description: Value of the property.
                type: string
                example: value1
            required:
              - name
              - value
        credentialHash:
          type: string
          description: >-
            Hash from credentials to use for authentication by the specified
            URL.
        body:
          description: >-
            Webhook request body.

            If this value is `null`,

            the default payload for the specified event is used.

            Template placeholders are permitted.


            Invalid placeholders render as an empty strings.

            For example, `Hello {{invalid.placeholder}}!` is rendered as `Hello
            !`.


            For more information,

            see
            [Placeholders](https://www.rebilly.com/docs/automations/email-notifications/#placeholders).
          type:
            - string
            - 'null'
        filter:
          description: >-
            Filter that determines whether to send the webhook.

            This field requires a special format.

            Use `,` for multiple allowed values.

            Use `;` for multiple fields.


            For more information,

            see [Using
            filters](https://www.rebilly.com/docs/dev-docs/search-filters).
          type:
            - string
            - 'null'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          x-label: Last update time
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    Profile:
      type: object
      properties:
        id:
          description: ID of the user.
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        email:
          description: Email address of the user.
          readOnly: true
          type: string
          format: email
          maxLength: 100
        firstName:
          description: User's first name.
          readOnly: true
          type: string
        lastName:
          description: User's last name.
          readOnly: true
          type: string
        businessPhone:
          description: User's business phone number.
          readOnly: true
          type:
            - string
            - 'null'
        mobilePhone:
          description: User's mobile phone number.
          readOnly: true
          type:
            - string
            - 'null'
        permissions:
          description: |-
            Permissions that the user has within organizations.
            Use the wildcard character `*` for full access.
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/AclPermissions'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        availableCurrencies:
          type: array
          description: Array of reporting currencies that are enabled for the merchant.
          readOnly: true
          items:
            type: string
        reportingCurrency:
          description: |-
            User's currency code in ISO 4217 format.
            This value is used for reports.
          type: string
          readOnly: true
        loginTime:
          description: Date and time when the user last logged in.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        status:
          description: Status of the user account.
          type: string
          enum:
            - active
            - inactive
            - pending-confirmation
          readOnly: true
        country:
          description: >-
            User's country of residence in ISO 3166 alpha-2 country code.

            For examples, see
            [ISO.org](https://www.iso.org/obp/ui/#search/code/).
          readOnly: true
          type: string
        preferences:
          description: |-
            User preferences, such as: timezone, language, and more.
            This is an object with custom properties.
          type:
            - object
            - 'null'
        hasPermissionsEmulation:
          type: boolean
          description: >-
            Specifies if the current user session has permissions emulation
            enabled.
          readOnly: true
        displayName:
          type: string
          description: User's full display name.
          readOnly: true
        hash:
          type: string
          description: Unique hash value that represents the user.
          readOnly: true
        _links:
          $ref: '#/components/schemas/SelfLink'
    ProfileMfa:
      type: object
      properties:
        status:
          description: Status of Multi-Factor Authentication (MFA) enrollment.
          type: string
          enum:
            - active
            - inactive
        type:
          description: >-
            Type of MFA enrollment.

            Type `duo` cannot be updated or deleted.

            If you need to reset your Duo MFA, [Contact
            support](https://www.rebilly.com/support/).
          type:
            - string
            - 'null'
          enum:
            - duo
            - guardian
            - null
        lastAuthTime:
          description: >-
            Date and time when MFA verification is most recently passed.

            To disable MFA, no more than 10 minutes must elapse between this
            value and the request to disable MFA.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - enrollment
    Role:
      type: object
      required:
        - name
        - acl
      properties:
        id:
          type: string
          readOnly: true
          description: ID of the role.
          maxLength: 50
          example: role_0YVDN2J11HDMX9N8X7DCB4CMX2
        name:
          type: string
          description: Name of the user role.
        description:
          type:
            - string
            - 'null'
          description: Description of the role.
        acl:
          $ref: '#/components/schemas/Acl'
        allowedIps:
          $ref: '#/components/schemas/AllowedIps'
        seniorIds:
          type: array
          description: >-
            List of role IDs where this role is used.

            For example, a role called `user` may be used in the `admin` and
            `manager` roles.
          readOnly: true
          items:
            type: string
        juniorIds:
          type: array
          description: >-
            List of role IDs that are included in this role.

            For example, a role called `admin` may include the `user` and
            `manager` roles.
          items:
            type: string
        usersCount:
          type: integer
          readOnly: true
          description: Number of users assigned to this role.
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - seniorRoles
                  - juniorRoles
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            juniorRoles:
              type: object
    SendThroughAttribution:
      type: object
      description: Email notification sent through attribution.
      readOnly: true
      properties:
        eventType:
          $ref: '#/components/schemas/EventType'
        actionId:
          type: string
          format: uuid
          description: Action ID of the email notification.
        versionId:
          type: string
          format: uuid
          description: Version ID of the email notification.
        sent:
          type: integer
          minimum: 0
          description: Number of email notifications that have been sent.
        goal:
          type: integer
          minimum: 0
          description: Target number of email notifications to send.
    Status:
      type: object
      properties:
        status:
          description: |-
            Status of the Rebilly API.
            If the API is operational, this value is `ok`.
          type: string
          readOnly: true
          enum:
            - ok
        time:
          description: Current date and time.
          $ref: '#/components/schemas/ServerTimestamp'
        release:
          description: Current release version of the API.
          type: string
    ApiTracking:
      type: object
      description: API request tracking.
      readOnly: true
      properties:
        id:
          $ref: '#/components/schemas/ResourceId'
        status:
          type: integer
          x-sortable: true
          description: Response code of the HTTP request.
        url:
          type: string
          x-basic: true
          x-sortable: true
          description: URL of the HTTP request.
        route:
          type: string
          x-sortable: true
          description: API request route.
          example: /customers/{param}
        method:
          type: string
          description: HTTP method of the API request.
          enum:
            - HEAD
            - GET
            - POST
            - PUT
            - DELETE
            - PATCH
          x-basic: true
        request:
          type: string
          x-sortable: true
          description: Request body of the HTTP request.
        response:
          type: string
          x-sortable: true
          description: Response body of the HTTP request.
        requestHeaders:
          $ref: '#/components/schemas/HttpHeaders'
        responseHeaders:
          $ref: '#/components/schemas/HttpHeaders'
        user:
          type: object
          description: User who made the request.
          readOnly: true
          properties:
            userId:
              x-sortable: true
              type: string
              description: ID of the user.
              maxLength: 50
              example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
            apiKeyId:
              type: string
              description: ID of the API tracking log.
              maxLength: 50
              example: api_key_0YV7JQMY6ED2FBE58BMFHBWBZH
            email:
              description: Email address of the user.
              type: string
              format: email
              x-sortable: true
            firstName:
              description: First name of the user.
              type: string
              x-sortable: true
            lastName:
              description: Last name of the user.
              type: string
              x-sortable: true
            ipAddress:
              type: string
              x-sortable: true
              deprecated: true
              description: Client IP address.
              format: ipv4
            userAgent:
              description: Software that is acting on behalf of the user.
              type: string
              x-sortable: true
            fingerprint:
              description: >-
                User's device fingerprint hash.

                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.
              type: string
              x-sortable: true
            isSupport:
              description: >-
                Specifies if the API request is completed by a Rebilly Support
                Team member.
              type: boolean
              x-sortable: true
        ipAddress:
          type: string
          x-basic: true
          description: Client IP address.
        relatedResourceIds:
          type: array
          description: IDs of related resources.
          readOnly: true
          items:
            type: string
          example:
            - in_0YVF9605RKC62BP14NE2R7V2XT
            - cus_0YV7DDSDD1C8DA64KHH2W33CPF
        duration:
          type: integer
          x-sortable: true
          x-basic: true
          description: Request duration in milliseconds.
        organizationId:
          $ref: '#/components/schemas/OrganizationId'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            organization:
              type: object
    TaxTracking:
      type: object
      description: Tax service tracking logs.
      readOnly: true
      properties:
        id:
          $ref: '#/components/schemas/ResourceId'
        status:
          type: integer
          x-sortable: true
          description: Response code of the HTTP request.
        duration:
          type: integer
          x-sortable: true
          description: Duration of the HTTP request in milliseconds.
        initiatedTime:
          description: Date and time the HTTP request is initiated.
          x-sortable: true
          $ref: '#/components/schemas/ServerTimestamp'
        url:
          type: string
          x-sortable: true
          description: URL of the tax service endpoint.
        method:
          type: string
          x-sortable: true
          description: Method of the HTTP request.
          example: POST
        request:
          type: string
          description: Request body of the HTTP request.
        response:
          type: string
          description: Response body of the HTTP request.
        requestHeaders:
          $ref: '#/components/schemas/HttpHeaders'
        responseHeaders:
          $ref: '#/components/schemas/HttpHeaders'
        entityId:
          type: string
          x-sortable: true
          description: ID of the resource associated with the tax service request.
        organizationId:
          x-sortable: true
          allOf:
            - $ref: '#/components/schemas/OrganizationId'
        taxService:
          type: string
          x-sortable: true
          description: Name of the tax service used for the request.
          enum:
            - taxjar
            - avalara
        taxServiceCredentialSource:
          type: string
          x-sortable: true
          description: Source of the credentials that are used to send or retrieve data.
          enum:
            - default
            - merchant
        customerId:
          type: string
          description: ID of the customer associated with the tax service request.
        _links:
          $ref: '#/components/schemas/SelfLink'
    WebhookTracking:
      type: object
      description: Webhook tracking logs.
      readOnly: true
      properties:
        id:
          type: string
          description: ID of the webhook tracking log.
          maxLength: 50
          example: hook_log_01HXC7HJ1V2FNJD1R396WCG2HB
        status:
          type: integer
          x-sortable: true
          description: Response code of the webhook request.
        duration:
          type: integer
          x-sortable: true
          description: Duration of the webhook request in milliseconds.
        initiatedTime:
          description: Date and time when the webhook is initiated.
          x-sortable: true
          $ref: '#/components/schemas/ServerTimestamp'
        url:
          type: string
          x-sortable: true
          description: URL where webhook is sent.
        method:
          type: string
          x-sortable: true
          description: HTTP method used to send webhook.
          example: POST
        request:
          type: string
          description: Webhook payload.
        response:
          type: string
          description: Response body received.
        requestHeaders:
          $ref: '#/components/schemas/HttpHeaders'
        responseHeaders:
          $ref: '#/components/schemas/HttpHeaders'
        entityId:
          type: string
          x-sortable: true
          description: ID of the main entity related to the event type.
        organizationId:
          x-sortable: true
          allOf:
            - $ref: '#/components/schemas/OrganizationId'
        eventType:
          x-sortable: true
          allOf:
            - $ref: '#/components/schemas/EventType'
        source:
          type: string
          x-sortable: true
          description: Webhook source.
          enum:
            - webhooks
            - rules
        attempt:
          type: integer
          x-sortable: true
          description: Webhook attempt number.
        sentTime:
          x-sortable: true
          description: Date and time when the webhook is sent.
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          x-sortable: true
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          x-sortable: true
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    User:
      type: object
      required:
        - email
        - firstName
        - lastName
      properties:
        id:
          type: string
          description: ID of the user.
          readOnly: true
          maxLength: 50
          example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        email:
          description: Email address of the user.
          type: string
          format: email
          maxLength: 100
        firstName:
          description: User's first name.
          type: string
        lastName:
          description: User's last name.
          type: string
        businessPhone:
          description: User's business phone number.
          type:
            - string
            - 'null'
        mobilePhone:
          description: User's mobile phone number.
          type:
            - string
            - 'null'
        permissions:
          description: |-
            Permissions that the user has within organizations.
            Use the wildcard character `*` for full access.
          $ref: '#/components/schemas/AclPermissions'
        computedPermissions:
          description: >-
            All user permissions and roles. Use these permissions to emulate the
            user.
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/AclPermissions'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        loginTime:
          description: Date and time when the user last logged in.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
        reportingCurrency:
          description: |-
            User's currency code in ISO 4217 format.
            This value is used for reports.
          readOnly: true
          type: string
        availableCurrencies:
          type: array
          description: Array of reporting currencies that are enabled for the merchant.
          readOnly: true
          items:
            type: string
        status:
          description: Status of the user's account.
          type: string
          enum:
            - active
            - inactive
            - pending-confirmation
          readOnly: true
        country:
          description: >-
            User's country of residence in ISO 3166 alpha-2 country code.

            For examples, see
            [ISO.org](https://www.iso.org/obp/ui/#search/code/).
          type: string
        preferences:
          description: |-
            User preferences, such as: timezone, language, and more.
            This is an object with custom properties.
          type:
            - object
            - 'null'
        roleIds:
          type: array
          description: >-
            Role IDs associated with the user.

            Role IDs specify the roles that the user performs within the
            organization.

            For example, the user may be an organization admin.
          items:
            type: string
        allowedIps:
          $ref: '#/components/schemas/AllowedIps'
        _links:
          $ref: '#/components/schemas/SelfLink'
    Website:
      type: object
      required:
        - name
        - url
        - servicePhone
        - serviceEmail
      properties:
        id:
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/WebsiteId'
        name:
          description: Name of the website.
          type: string
        url:
          description: Domain address of the website.
          type: string
        servicePhone:
          description: Customer service phone number of the website.
          type: string
        serviceEmail:
          description: Customer service email address of the website.
          type: string
          format: email
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        settings:
          type: object
          description: Website settings.
          properties:
            depositForm:
              type: object
              description: Deposit form settings.
              properties:
                theme:
                  description: Theme settings that are used in the deposit form.
                  type:
                    - object
                    - 'null'
                  properties:
                    colorPrimary:
                      description: >-
                        Primary color for the deposit form in hexadecimal
                        format.
                      type:
                        - string
                        - 'null'
                      maxLength: 6
                      example: 0044d4
                    colorSecondary:
                      description: >-
                        Secondary color for the deposit form in hexadecimal
                        format.
                      type:
                        - string
                        - 'null'
                      maxLength: 6
                      example: ffffff
                    buttonTemplate:
                      description: >-
                        Submit button template. `{{amount}}` can be used as a
                        placeholder for amount and currency.
                      type:
                        - string
                        - 'null'
                      maxLength: 100
                      example: Pay {{amount}}
            paymentForm:
              type: object
              description: Payment form settings.
              properties:
                css:
                  description: >-
                    Hosted payment form [CSS
                    options](https://www.rebilly.com/docs/content/concepts-and-features/tutorial/customize-style-rebilly-instruments/#2-use-css-property-to-override-any-styles).
                  type:
                    - string
                    - 'null'
                theme:
                  description: >-
                    Hosted payment form [theme
                    options](https://www.rebilly.com/docs/content/concepts-and-features/tutorial/customize-style-rebilly-instruments/#adjust-the-default-style).
                  type:
                    - object
                    - 'null'
                  additionalProperties:
                    type: string
                  example:
                    colorPrimary: '#504CCA'
                features:
                  description: Hosted payment form features.
                  type:
                    - object
                    - 'null'
                  properties:
                    showCoupons:
                      type:
                        - array
                        - 'null'
                      items:
                        type: string
                    fullPageRedirect:
                      type:
                        - boolean
                        - 'null'
                      description: >-
                        Specifies whether the hosted payment form uses a full
                        page redirect, or the default iframe modal, for approval
                        URL redirects.
                      default: false
                    skipRedirectOnPaymentComplete:
                      type:
                        - boolean
                        - 'null'
                      description: >-
                        Specifies whether the hosted payment form skips the
                        redirect to the website URL when the payment is
                        completed.
                      default: false
                    hideZeroAmountSummaryItems:
                      type:
                        - boolean
                        - 'null'
                      description: >-
                        Specifies whether the hosted payment form displays 0
                        amount line items in the summary.
                      default: false
        logoId:
          type:
            - string
            - 'null'
          description: ID of the linked file object.
          maxLength: 50
          example: 4f6cf35x-2c4y-483z-a0a9-158621f77a21
        organizationId:
          deprecated: true
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/OrganizationId'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - logoUrl
    CustomerInformation:
      type: object
      properties:
        currency:
          description: Currency code in ISO 4217 format.
          minLength: 3
          maxLength: 3
          example: USD
          readOnly: true
          type: string
        refundsAmount:
          description: Total amount of all refunded transactions.
          readOnly: true
          type: number
          format: double
        revenueAmount:
          description: Total amount of all approved sales and captures.
          readOnly: true
          type: number
          format: double
        disputesAmount:
          description: Total amount of all disputed transactions.
          readOnly: true
          type: number
          format: double
    DataExportArguments:
      type: object
      description: >-
        Export request arguments used to filter and sort the result set.

        For more information, see
        [Arguments](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation/#arguments).
      properties:
        filter:
          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](#section/Using-filter-with-collections).
          type: string
        sort:
          type: string
          description: |-
            Sorts and orders the collection of items.
            To sort in descending order, prefix with `-`.
        q:
          type: string
          description: Use this field to perform a partial search of text fields.
    DataExportRecurring:
      description: Recurring export schedule.
      type: object
      required:
        - instruction
      properties:
        instruction:
          type: string
          description: >-
            Schedule instruction in [Recurrence Rule RFC
            5545](https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html)
            format.
        start:
          type: string
          format: date-time
          description: |-
            Date and time when the first scheduled recurring export occurs.
            The default value is now.
    DataExportDateRange:
      type: object
      description: >-
        Date range of the data export.

        If this value is not set, all data is included.

        For more information, see [Date
        ranges](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation/#date-ranges).
      properties:
        start:
          type: string
          description: >-
            Start date of the data export.

            This field accepts any argument in [datetime
            format](http://php.net/manual/en/datetime.formats.php).
          example: yesterday
        end:
          type: string
          description: >-
            End date of the data export.

            This field accepts any argument in [datetime
            format](http://php.net/manual/en/datetime.formats.php).
          example: today
        field:
          type: string
          description: Field to which the date range is applied.
      required:
        - start
        - end
    CustomersDataExport:
      type: object
      description: Customer resource to export.
      required:
        - name
        - format
        - resource
      properties:
        id:
          type: string
          description: ID of the export.
          readOnly: true
          maxLength: 50
          example: exp_0YVCNQ2C1AD1RA3HXKP492GNZB
        name:
          description: Name of the export.
          type: string
        resource:
          description: Type of resource to export.
          type: string
          enum:
            - customers
        format:
          description: Output format of the export.
          type: string
          enum:
            - csv
            - json
            - json-api
            - xml
        arguments:
          $ref: '#/components/schemas/DataExportArguments'
        emailNotification:
          description: List of email addresses to notify when an export is completed.
          type: array
          items:
            type: string
            format: email
        fields:
          description: >-
            List of fields to include in the export.

            For more information, see
            [Arguments](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation/#fields).
          type: array
          items:
            type: string
        recurring:
          $ref: '#/components/schemas/DataExportRecurring'
        userId:
          description: ID of the user who requested the data export.
          readOnly: true
          type: string
          maxLength: 50
          example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        fileId:
          type:
            - string
            - 'null'
          description: ID of the data export file.
          readOnly: true
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        recordCount:
          description: Total number of records in the export, excluding the header row.
          readOnly: true
          type: integer
        scheduledTime:
          description: Date and time when the data export is scheduled to generate a file.
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        status:
          description: Status of export request.
          readOnly: true
          type: string
          enum:
            - pending
            - queued
            - processing
            - completed
        dateRange:
          allOf:
            - $ref: '#/components/schemas/DataExportDateRange'
            - type: object
              properties:
                field:
                  type: string
                  default: createdTime
                  example: createdTime
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - user
                  - download
                  - signedLink
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            file:
              type: object
            user:
              type: object
    SubscriptionsDataExport:
      type: object
      description: Order resource to export.
      required:
        - name
        - format
        - resource
      properties:
        id:
          type: string
          description: ID of the export.
          readOnly: true
          maxLength: 50
          example: exp_0YVCNQ2C1AD1RA3HXKP492GNZB
        name:
          description: Name of the export.
          type: string
        resource:
          description: Type of resource to export.
          type: string
          enum:
            - subscriptions
        format:
          description: Output format of the export.
          type: string
          enum:
            - csv
            - json
            - json-api
            - xml
        arguments:
          $ref: '#/components/schemas/DataExportArguments'
        emailNotification:
          description: List of email addresses to notify when an export is completed.
          type: array
          items:
            type: string
            format: email
        fields:
          description: >-
            List of fields to include in the export.

            For more information, see
            [Arguments](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation/#fields).
          type: array
          items:
            type: string
        recurring:
          $ref: '#/components/schemas/DataExportRecurring'
        userId:
          description: ID of the user who requested the data export.
          readOnly: true
          type: string
          maxLength: 50
          example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        fileId:
          type:
            - string
            - 'null'
          description: ID of the data export file.
          readOnly: true
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        recordCount:
          description: Total number of records in the export, excluding the header row.
          readOnly: true
          type: integer
        scheduledTime:
          description: Date and time when the data export is scheduled to generate a file.
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        status:
          description: Status of export request.
          readOnly: true
          type: string
          enum:
            - pending
            - queued
            - processing
            - completed
        dateRange:
          allOf:
            - $ref: '#/components/schemas/DataExportDateRange'
            - type: object
              properties:
                field:
                  type: string
                  default: createdTime
                  example: createdTime
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - user
                  - download
                  - signedLink
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            file:
              type: object
            user:
              type: object
    TransactionsDataExport:
      type: object
      description: Transaction resource to export.
      required:
        - name
        - format
        - resource
      properties:
        id:
          type: string
          description: ID of the export.
          readOnly: true
          maxLength: 50
          example: exp_0YVCNQ2C1AD1RA3HXKP492GNZB
        name:
          description: Name of the export.
          type: string
        resource:
          description: Type of resource to export.
          type: string
          enum:
            - transactions
        format:
          description: Output format of the export.
          type: string
          enum:
            - csv
            - json
            - json-api
            - xml
        arguments:
          $ref: '#/components/schemas/DataExportArguments'
        emailNotification:
          description: List of email addresses to notify when an export is completed.
          type: array
          items:
            type: string
            format: email
        fields:
          description: >-
            List of fields to include in the export.

            For more information, see
            [Arguments](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation/#fields).
          type: array
          items:
            type: string
        recurring:
          $ref: '#/components/schemas/DataExportRecurring'
        userId:
          description: ID of the user who requested the data export.
          readOnly: true
          type: string
          maxLength: 50
          example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        fileId:
          type:
            - string
            - 'null'
          description: ID of the data export file.
          readOnly: true
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        recordCount:
          description: Total number of records in the export, excluding the header row.
          readOnly: true
          type: integer
        scheduledTime:
          description: Date and time when the data export is scheduled to generate a file.
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        status:
          description: Status of export request.
          readOnly: true
          type: string
          enum:
            - pending
            - queued
            - processing
            - completed
        dateRange:
          allOf:
            - $ref: '#/components/schemas/DataExportDateRange'
            - type: object
              properties:
                field:
                  x-sortable: true
                  type: string
                  default: processedTime
                  example: processedTime
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - user
                  - download
                  - signedLink
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            file:
              type: object
            user:
              type: object
    InvoicesDataExport:
      type: object
      description: Invoice resource to export.
      required:
        - name
        - format
        - resource
      properties:
        id:
          type: string
          description: ID of the export.
          readOnly: true
          maxLength: 50
          example: exp_0YVCNQ2C1AD1RA3HXKP492GNZB
        name:
          description: Name of the export.
          type: string
        resource:
          description: Type of resource to export.
          type: string
          enum:
            - invoices
        format:
          description: Output format of the export.
          type: string
          enum:
            - csv
            - json
            - json-api
            - xml
            - pdf
        arguments:
          $ref: '#/components/schemas/DataExportArguments'
        emailNotification:
          description: List of email addresses to notify when an export is completed.
          type: array
          items:
            type: string
            format: email
        fields:
          description: >-
            List of fields to include in the export.

            For more information, see
            [Arguments](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation/#fields).
          type: array
          items:
            type: string
        recurring:
          $ref: '#/components/schemas/DataExportRecurring'
        userId:
          description: ID of the user who requested the data export.
          readOnly: true
          type: string
          maxLength: 50
          example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        fileId:
          type:
            - string
            - 'null'
          description: ID of the data export file.
          readOnly: true
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        recordCount:
          description: Total number of records in the export, excluding the header row.
          readOnly: true
          type: integer
        scheduledTime:
          description: Date and time when the data export is scheduled to generate a file.
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        status:
          description: Status of export request.
          readOnly: true
          type: string
          enum:
            - pending
            - queued
            - processing
            - completed
        dateRange:
          allOf:
            - $ref: '#/components/schemas/DataExportDateRange'
            - type: object
              properties:
                field:
                  type: string
                  default: issuedTime
                  example: issuedTime
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - user
                  - download
                  - signedLink
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            file:
              type: object
            user:
              type: object
    InvoiceItemsDataExport:
      type: object
      description: Invoice item resource to export.
      required:
        - name
        - format
        - resource
      properties:
        id:
          type: string
          description: ID of the export.
          readOnly: true
          maxLength: 50
          example: exp_0YVCNQ2C1AD1RA3HXKP492GNZB
        name:
          description: Name of the export.
          type: string
        resource:
          description: Type of resource to export.
          type: string
          enum:
            - invoiceItems
        format:
          description: Output format of the export.
          type: string
          enum:
            - csv
            - json
            - json-api
            - xml
        arguments:
          $ref: '#/components/schemas/DataExportArguments'
        emailNotification:
          description: List of email addresses to notify when an export is completed.
          type: array
          items:
            type: string
            format: email
        fields:
          description: >-
            List of fields to include in the export.

            For more information, see
            [Arguments](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation/#fields).
          type: array
          items:
            type: string
        recurring:
          $ref: '#/components/schemas/DataExportRecurring'
        userId:
          description: ID of the user who requested the data export.
          readOnly: true
          type: string
          maxLength: 50
          example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        fileId:
          type:
            - string
            - 'null'
          description: ID of the data export file.
          readOnly: true
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        recordCount:
          description: Total number of records in the export, excluding the header row.
          readOnly: true
          type: integer
        scheduledTime:
          description: Date and time when the data export is scheduled to generate a file.
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        status:
          description: Status of export request.
          readOnly: true
          type: string
          enum:
            - pending
            - queued
            - processing
            - completed
        dateRange:
          allOf:
            - $ref: '#/components/schemas/DataExportDateRange'
            - type: object
              properties:
                field:
                  type: string
                  default: issuedTime
                  example: issuedTime
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - user
                  - download
                  - signedLink
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            file:
              type: object
            user:
              type: object
    RevenueAuditDataExport:
      type: object
      description: Revenue audit resource to export.
      required:
        - name
        - format
        - resource
      properties:
        id:
          type: string
          description: ID of the export.
          readOnly: true
          maxLength: 50
          example: exp_0YVCNQ2C1AD1RA3HXKP492GNZB
        name:
          description: Name of the export.
          type: string
        resource:
          description: Type of resource to export.
          type: string
          enum:
            - revenueAudit
        format:
          description: Output format of the export.
          type: string
          enum:
            - csv
            - json
            - json-api
            - xml
        arguments:
          $ref: '#/components/schemas/DataExportArguments'
        emailNotification:
          description: List of email addresses to notify when an export is completed.
          type: array
          items:
            type: string
            format: email
        fields:
          description: >-
            List of fields to include in the export.

            For more information, see
            [Arguments](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation/#fields).
          type: array
          items:
            type: string
        recurring:
          $ref: '#/components/schemas/DataExportRecurring'
        userId:
          description: ID of the user who requested the data export.
          readOnly: true
          type: string
          maxLength: 50
          example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        fileId:
          type:
            - string
            - 'null'
          description: ID of the data export file.
          readOnly: true
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        recordCount:
          description: Total number of records in the export, excluding the header row.
          readOnly: true
          type: integer
        scheduledTime:
          description: Date and time when the data export is scheduled to generate a file.
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        status:
          description: Status of export request.
          readOnly: true
          type: string
          enum:
            - pending
            - queued
            - processing
            - completed
        dateRange:
          allOf:
            - $ref: '#/components/schemas/DataExportDateRange'
            - type: object
              properties:
                field:
                  x-sortable: true
                  type: string
                  default: scheduledTime
                  example: scheduledTime
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - user
                  - download
                  - signedLink
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            file:
              type: object
            user:
              type: object
    AmlChecksDataExport:
      type: object
      description: AML checks resource to export.
      required:
        - name
        - format
        - resource
      properties:
        id:
          type: string
          description: ID of the export.
          readOnly: true
          maxLength: 50
          example: exp_0YVCNQ2C1AD1RA3HXKP492GNZB
        name:
          description: Name of the export.
          type: string
        resource:
          description: Type of resource to export.
          type: string
          enum:
            - amlChecks
        format:
          description: Output format of the export.
          type: string
          enum:
            - csv
            - json
            - json-api
            - xml
        arguments:
          $ref: '#/components/schemas/DataExportArguments'
        emailNotification:
          description: List of email addresses to notify when an export is completed.
          type: array
          items:
            type: string
            format: email
        fields:
          description: >-
            List of fields to include in the export.

            For more information, see
            [Arguments](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation/#fields).
          type: array
          items:
            type: string
        recurring:
          $ref: '#/components/schemas/DataExportRecurring'
        userId:
          description: ID of the user who requested the data export.
          readOnly: true
          type: string
          maxLength: 50
          example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        fileId:
          type:
            - string
            - 'null'
          description: ID of the data export file.
          readOnly: true
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        recordCount:
          description: Total number of records in the export, excluding the header row.
          readOnly: true
          type: integer
        scheduledTime:
          description: Date and time when the data export is scheduled to generate a file.
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        status:
          description: Status of export request.
          readOnly: true
          type: string
          enum:
            - pending
            - queued
            - processing
            - completed
        dateRange:
          allOf:
            - $ref: '#/components/schemas/DataExportDateRange'
            - type: object
              properties:
                field:
                  type: string
                  default: createdTime
                  example: createdTime
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - user
                  - download
                  - signedLink
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            file:
              type: object
            user:
              type: object
    DisputesDataExport:
      type: object
      description: Dispute resource to export.
      required:
        - name
        - format
        - resource
      properties:
        id:
          type: string
          description: ID of the export.
          readOnly: true
          maxLength: 50
          example: exp_0YVCNQ2C1AD1RA3HXKP492GNZB
        name:
          description: Name of the export.
          type: string
        resource:
          description: Type of resource to export.
          type: string
          enum:
            - disputes
        format:
          description: Output format of the export.
          type: string
          enum:
            - csv
            - json
            - json-api
            - xml
        arguments:
          $ref: '#/components/schemas/DataExportArguments'
        emailNotification:
          description: List of email addresses to notify when an export is completed.
          type: array
          items:
            type: string
            format: email
        fields:
          description: >-
            List of fields to include in the export.

            For more information, see
            [Arguments](https://www.rebilly.com/docs/dev-docs/transaction-reconciliation/#fields).
          type: array
          items:
            type: string
        recurring:
          $ref: '#/components/schemas/DataExportRecurring'
        userId:
          description: ID of the user who requested the data export.
          readOnly: true
          type: string
          maxLength: 50
          example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        fileId:
          type:
            - string
            - 'null'
          description: ID of the data export file.
          readOnly: true
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        recordCount:
          description: Total number of records in the export, excluding the header row.
          readOnly: true
          type: integer
        scheduledTime:
          description: Date and time when the data export is scheduled to generate a file.
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        status:
          description: Status of the export request.
          readOnly: true
          type: string
          enum:
            - pending
            - queued
            - processing
            - completed
        dateRange:
          allOf:
            - $ref: '#/components/schemas/DataExportDateRange'
            - type: object
              properties:
                field:
                  type: string
                  default: createdTime
                  example: createdTime
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - user
                  - download
                  - signedLink
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            file:
              type: object
            user:
              type: object
    DataExport:
      type: object
      discriminator:
        propertyName: resource
        mapping:
          customers: '#/components/schemas/CustomersDataExport'
          subscriptions: '#/components/schemas/SubscriptionsDataExport'
          transactions: '#/components/schemas/TransactionsDataExport'
          invoices: '#/components/schemas/InvoicesDataExport'
          invoiceItems: '#/components/schemas/InvoiceItemsDataExport'
          revenueAudit: '#/components/schemas/RevenueAuditDataExport'
          amlChecks: '#/components/schemas/AmlChecksDataExport'
          disputes: '#/components/schemas/DisputesDataExport'
      oneOf:
        - $ref: '#/components/schemas/CustomersDataExport'
        - $ref: '#/components/schemas/SubscriptionsDataExport'
        - $ref: '#/components/schemas/TransactionsDataExport'
        - $ref: '#/components/schemas/InvoicesDataExport'
        - $ref: '#/components/schemas/InvoiceItemsDataExport'
        - $ref: '#/components/schemas/RevenueAuditDataExport'
        - $ref: '#/components/schemas/AmlChecksDataExport'
        - $ref: '#/components/schemas/DisputesDataExport'
    OrganizationExport:
      type: object
      properties:
        id:
          readOnly: true
          type: string
          description: Unique resource ID.
          maxLength: 50
          example: org_exp_01HXC7MKK4GCS6WRRXY4X9CRMK
        userId:
          description: ID of the user who requested the organization data export.
          readOnly: true
          type: string
          maxLength: 50
          example: usr_0YVCEENYJ3D7Q9EN6BN16HA0G4
        fileId:
          type:
            - string
            - 'null'
          description: ID of the linked file object.
          readOnly: true
          maxLength: 50
          example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
        status:
          description: Status of organization data export request.
          readOnly: true
          type: string
          enum:
            - pending
            - processing
            - completed
            - queued
            - failed
            - expired
        resources:
          description: Organization data export resources array.
          readOnly: true
          type: array
          items:
            type: object
            properties:
              type:
                description: Exported resource.
                readOnly: true
                type: string
                enum:
                  - customers
                  - users
                  - payment-instruments
                  - invoices
                  - orders
                  - transactions
                  - disputes
                  - gateway-accounts
                  - blocklists
                  - lists
                  - webhooks
                  - products
                  - websites
                  - plans
                  - credit-memos
                  - files
                  - email-notifications
                x-enumDescriptions:
                  customers: All customers of the organization.
                  users: All users of the organization.
                  payment-instruments: All payment instruments of the organization.
                  invoices: All invoices of the organization.
                  orders: All orders of the organization.
                  transactions: All transactions of the organization.
                  disputes: All disputes of the organization.
                  gateway-accounts: All gateway accounts of the organization.
                  blocklists: All blocklists of the organization.
                  lists: All lists of the organization.
                  webhooks: All webhooks of the organization.
                  products: All products of the organization.
                  websites: All websites of the organization.
                  plans: All plans of the organization.
                  credit-memos: All credit-memos of the organization.
                  files: All files of the organization.
                  email-notifications: All email-notifications of the organization.
              recordCount:
                description: Number of exported resources.
                readOnly: true
                type: integer
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        retentionTime:
          description: |-
            Date and time when retention ends.
            After this date, files are removed.
          readOnly: true
          type:
            - string
            - 'null'
          format: date-time
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - user
                  - signedLink
    HistogramData:
      title: Histogram data
      type: object
      properties:
        data:
          description: Histogram data.
          type: array
          items:
            type: object
            readOnly: true
            properties:
              date:
                type: string
                description: Date and time of data entry.
              value:
                type: number
                description: Data entry value.
    ApiLogSummary:
      type: object
      properties:
        data:
          description: API log summary data.
          type: array
          items:
            type: object
            description: Number of requests for each method.
            readOnly: true
            properties:
              route:
                type: string
                description: Route string pattern.
              total:
                type: integer
                description: Total number of requests.
              get:
                type: integer
                description: Total number of `GET` requests.
              post:
                type: integer
                description: Total number of `POST` requests.
              put:
                type: integer
                description: Total number of `PUT` requests.
              patch:
                type: integer
                description: Total number of `PATCH` requests.
              delete:
                type: integer
                description: Total number of `DELETE` requests.
              head:
                type: integer
                description: Total number of `HEAD` requests.
              options:
                type: integer
                description: Total number of `OPTIONS` requests.
    CumulativeSubscriptions:
      type: object
      properties:
        data:
          description: Cumulative subscription data.
          type: array
          items:
            type: object
            description: Contains an aggregation.
            readOnly: true
            properties:
              aggregationValue:
                type: string
                description: >-
                  Date in `YYYY-MM` format for monthly aggregation, or
                  `YYYY-MM-DD` for daily aggregation.
              newCount:
                type: integer
                description: Number of new subscriptions within the aggregation.
              canceledCount:
                type: integer
                description: Number of canceled subscriptions within the aggregation.
              cumulativeCount:
                type: integer
                description: >-
                  Total number of cumulative subscriptions.


                  This field is calculated based on: the number of cumulative
                  subscriptions from the previous aggregation period +
                  `newCount` - `canceledCount`.
    DashboardResponse:
      type: array
      items:
        type: object
        properties:
          metric:
            type: string
            description: Type of metric.
            enum:
              - approvalRate
              - salesCount
              - salesValue
              - refundsValue
              - chargebacksCount
              - chargebacksValue
              - transactionsCount
              - redeemedCouponsCount
              - newLeadsCount
              - newCustomersCount
              - appliedCouponsCount
              - trialConversionsCount
              - trialConversionsRate
              - renewalSuccessRate
              - renewalsCount
              - newTrialsCount
              - reactivationsCount
              - successfulRetriesCount
              - invoicedRevenue
              - churnCount
              - churnRate
              - cancellationsCount
              - cancellationsRate
              - activeSubscriptionsCount
              - newSubscriptionsCount
              - upgradesCount
              - downgradesCount
              - monthlyRecurringRevenue
              - averageRevenuePerCustomer
              - customerLifetimeValue
              - addressProofAcceptanceRate
              - identityProofAcceptanceRate
              - fundsProofAcceptanceRate
              - purchaseProofAcceptanceRate
              - creditFileProofAcceptanceRate
              - kycRejectionRate
              - kycAccuracyRate
              - addressProofAccuracyRate
              - identityProofAccuracyRate
              - creditFileProofAccuracyRate
              - kycRequestCount
              - kycRequestAbandonmentRate
              - kycRequestAttemptedRate
              - kycRequestFailureRate
              - kycRequestFulfillmentRate
              - kycRequestExpirationRate
          humanName:
            type: string
            description: Display name of the metric.
          increaseIsGood:
            type: boolean
            description: >-
              Specifies whether a higher value is a positive result for the
              merchant.
          segments:
            type: array
            description: Segment data.
            items:
              type: object
              properties:
                name:
                  type: string
                  description: Name of the segment.
                value:
                  type:
                    - number
                    - 'null'
                  format: double
                  description: Segment value for the specified date range.
                previousValue:
                  type:
                    - number
                    - 'null'
                  format: double
                  description: |-
                    Segment value for the previous date range.
                    This value is relative to the specified date range.
                humanValue:
                  type:
                    - string
                    - 'null'
                  description: |-
                    Human readable segment value.
                    This field is formatted with a currency sign.
                changeRatio:
                  type:
                    - number
                    - 'null'
                  format: double
                  description: |-
                    Ratio of the current value for each previous value.
                    A null value represents infinity.
                humanChangeRatio:
                  type:
                    - string
                    - 'null'
                  description: |-
                    Human readable change ratio.
                    This field is formatted percentage sign.
                    A null value represents infinity.
                timeseries:
                  description: Time series.
                  type: array
                  items:
                    type: object
                    description: Chart data.
                    readOnly: true
                    properties:
                      date:
                        type: string
                        description: Entry date-time.
                      value:
                        type:
                          - number
                          - 'null'
                        description: Entry value.
    DccMarkup:
      type: object
      properties:
        data:
          description: Aggregation data.
          type: array
          items:
            type: object
            description: Contains an aggregation.
            readOnly: true
            properties:
              aggregationValue:
                type: string
                description: |-
                  Value by which the report provides aggregated data.
                  Date values are displayed as follows:

                    - Day: `YYYY-MM-DD`.
                    - Month: `YYYY-MM`.
              selectedCount:
                type: integer
                description: Number of selected offers in the aggregation.
              selectedSum:
                type: number
                format: double
                description: Amount of selected offers in the aggregation.
              rejectedCount:
                type: integer
                description: Number of rejected offers in the aggregation.
              rejectedSum:
                type: number
                format: double
                description: Amount of rejected offers in the aggregation.
              unknownCount:
                type: integer
                description: >-
                  Number of offers in the aggregation which are not selected nor
                  rejected.
              unknownSum:
                type: number
                format: double
                description: >-
                  Amount of offers in the aggregation which are not selected nor
                  rejected.
    ReportDeclinedTransactions:
      type: object
      properties:
        data:
          type: array
          items:
            type: object
            properties:
              message:
                description: >-
                  Description or message related to the declined transactions
                  report.
                type: string
                example: error
              count:
                description: Number of declined transactions.
                type: integer
                example: 500
              percentage:
                description: Percentage of declined transactions.
                type: number
                format: double
                example: 25
    ReportDisputes:
      type: object
      properties:
        data:
          type: array
          description: Disputes data.
          items:
            type: object
            properties:
              aggregationValue:
                description: >-
                  Aggregation field value.

                  This value is defined in the `aggregationField` parameter by
                  using a query.

                  For example, this value could be: website or country.
                type: string
              countVisa:
                description: Total number of disputed Visa transactions.
                type: integer
              ratioCountVisa:
                description: >-
                  Ratio of the total number of disputed Visa transactions versus
                  the total number of settled Visa transactions.
                type: number
                format: double
              ratioAmountVisa:
                description: >-
                  Ratio of disputed Visa transaction amounts versus settled Visa
                  transaction amounts.
                type: number
                format: double
              countMastercard:
                description: Total number of disputed Mastercard transactions.
                type: integer
              ratioCountMastercard:
                description: >-
                  Ratio of the total number of disputed Mastercard transactions
                  versus the total number of settled Mastercard transactions.
                type: number
                format: double
              ratioAmountMastercard:
                description: >-
                  Ratio of disputed Mastercard transaction amounts versus
                  settled Mastercard transaction amounts.
                type: number
                format: double
    ReportEventsTriggeredSummary:
      type: object
      properties:
        data:
          type: array
          description: Event data.
          items:
            type: object
            properties:
              eventName:
                description: Name of the system event.
                type: string
                enum:
                  - dispute-created
                  - gateway-account-requested
                  - transaction-processed
                  - subscription-canceled
                  - subscription-renewed
                  - payment-card-expired
                  - payment-declined
                  - transaction-process-requested
                  - risk-score-changed
              count:
                description: Total number of times this event is triggered.
                type: integer
    ReportRulesMatchedSummary:
      type: object
      properties:
        data:
          description: Matched rule data.
          type: array
          items:
            type: object
            properties:
              rule:
                description: Name of the matched rule.
                type: string
              count:
                description: Total number of times this rule is matched.
                type: integer
              approvalRate:
                description: Rate of transaction approval by rule.
                type: number
                format: double
    FutureRenewals:
      type: object
      properties:
        data:
          description: Future renewals data.
          type: array
          items:
            type: object
            description: Contains an aggregation.
            readOnly: true
            properties:
              date:
                type: string
                description: Date in `YYYY-MM` format.
              sum:
                type: number
                format: double
                description: >-
                  Total amount of future renewals in the user's reporting
                  currency.
              plansCount:
                type: array
                description: Plan within the aggregation.
                items:
                  type: object
                  readOnly: true
                  properties:
                    planId:
                      type: string
                      description: ID of the plan.
                      maxLength: 50
                      example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
                    count:
                      type: integer
                      description: Total number of future renewals of a plan.
    ReportJournal:
      type: object
      properties:
        aggregationField:
          type: string
          description: Report data grouped by aggregation field.
          enum:
            - product.accountingCode
            - product.id
            - plan.id
        currency:
          $ref: '#/components/schemas/CurrencyCode'
        bookedFrom:
          type: string
          description: >-
            Year and month when revenue is booked.

            If this value is omitted, booked revenue is recorded from the first
            booked amount.
          pattern: ^\d{4}-\d{2}$
          example: 2022-01
        bookedTo:
          type: string
          description: >-
            Year and month when revenue is booked until.

            If this value is omitted, booked revenue is recorded until the most
            recently booked amount.
          pattern: ^\d{4}-\d{2}$
          example: 2022-01
        recognizedAt:
          type: string
          description: Year and month when revenue is recognized.
          pattern: ^\d{4}-\d{2}$
          example: 2022-01
        data:
          description: Revenue data.
          type: array
          items:
            type: object
            properties:
              aggregationValue:
                description: Aggregation field value.
                type: string
              bookedMonth:
                description: Month when revenue is booked.
                type: string
                pattern: ^\d{4}-\d{2}$
                example: 2022-02
              bookedAmount:
                description: Revenue amount which is booked for recognition.
                type: number
                format: double
                example: 25
              recognizedAmount:
                description: Amount of recognized revenue.
                type: number
                format: double
                example: 20
              remainingAmount:
                description: Remaining revenue amount to be recognized.
                type: number
                format: double
                example: 5
    ReportKycRejections:
      type: object
      properties:
        data:
          description: Rejection data.
          type: array
          items:
            type: object
            properties:
              documentType:
                $ref: '#/components/schemas/KycDocumentTypes'
              rejectionReasons:
                type: array
                description: Rejection reasons.
                items:
                  type: object
                  properties:
                    rejectionReason:
                      $ref: '#/components/schemas/KycDocumentRejectionReasonTypes'
                    count:
                      type: integer
                      format: integer
                      minimum: 0
                      description: Total number of related KYC documents.
    KycDocumentRequestStatuses:
      description: Reason the document is rejected.
      type: string
      enum:
        - abandoned
        - expired
        - failed
        - fulfilled
        - pending-review
    ReportKycRequests:
      type: object
      properties:
        data:
          description: Request data.
          type: array
          items:
            type: object
            properties:
              rejectionReason:
                $ref: '#/components/schemas/KycDocumentRequestStatuses'
              count:
                type: integer
                format: integer
                minimum: 0
                description: Number of related KYC requests.
    ReportMonthlyRecurringRevenue:
      type: object
      properties:
        data:
          description: Monthly Recurring Revenue (MRR) data.
          type: array
          items:
            type: object
            properties:
              period:
                description: Revenue month.
                type: string
                pattern: ^\d{4}-\d{2}$
                example: 2022-06
              total:
                description: Total Monthly Recurring Revenue (MRR) amount.
                type: number
                format: double
                example: 245
              breakdown:
                description: >-
                  MRR categories are described below.

                  The difference between the current period MRR and the previous
                  period MRR is equal to:

                  `new` + `reactivation` + `expansion` - `contraction` -
                  `churned`.
                type: object
                properties:
                  new:
                    description: |-
                      Occurs when new customers sign up.
                      New MRR is the amount of the new customer's subscription.

                      Example: A new customer signs up to a $40 per month plan.
                      This is a new MRR amount of $40.
                    type: number
                    format: double
                    example: 40
                  reactivation:
                    description: >-
                      Occurs when a customer stops being a customer for a period
                      but later signs up again.

                      Reactivation MRR is the amount of the customer's new
                      subscription.


                      Example: A customer cancels their subscription, but signs
                      up again and purchases a $25 per month plan.

                      This is a reactivation MRR amount of $25.
                    type: number
                    format: double
                    example: 25
                  churned:
                    description: >-
                      Occurs when a subscription is churned.

                      Churn occurs when the paid service period on a
                      subscription order expires.

                      Churned MRR is the amount that is lost as a result of the
                      churned subscription.


                      Example: When a subscription is churned, the value of a
                      subscription goes from $80 per month to $0 per month.

                      This is a churned MRR amount of $80.
                    type: number
                    format: double
                    example: 80
                  contraction:
                    description: >-
                      Occurs when an existing customer changes items which
                      result in a smaller MRR.

                      Contraction MRR is the amount before the change minus the
                      amount and after the change.


                      Example: A customer downgrades from a plan that is $100
                      per month to plan that is $80 per month.

                      This is a contraction MRR amount of $20.
                    type: number
                    format: double
                    example: 20
                  expansion:
                    description: >-
                      Occurs when existing customers change items which result
                      in a bigger MRR.

                      Expansion MRR is the amount after the change minus the
                      amount and before the change.


                      Example: A customer upgrades from a plan that is $40 per
                      month to a plan that is $100 per month.

                      This is an expansion MRR amount of $60.
                    type: number
                    format: double
                    example: 60
    RenewalSales:
      type: object
      properties:
        data:
          description: Renewal sales data.
          type: array
          items:
            type: object
            description: Contains an aggregation.
            readOnly: true
            properties:
              aggregationValue:
                type: string
                description: Date in `YYYY-MM` format.
              newSales:
                type: number
                format: double
                description: Total amount of new sales.
              newRefunds:
                type: number
                format: double
                description: Total amount of new refunds.
              renewalSales:
                type: number
                format: double
                description: Total amount of renewal sales.
              renewalRefunds:
                type: number
                format: double
                description: Total amount of renewal refunds.
    ReportRetentionPercentage:
      type: object
      properties:
        data:
          description: Retention data.
          type: array
          items:
            type: object
            description: Contains an aggregation.
            readOnly: true
            properties:
              aggregationValue:
                type: string
                description: >-
                  Value by which the report provides retention periods and
                  percentages.


                  Date values are displayed as follows:


                  - Day: `YYYY-MM-DD`;

                  - Month: `YYYY-MM`;

                  - Quarter: `YYYY-MM`/`YYYY-MM`;

                  - Year: `YYYY`.
              subscriptionsCount:
                type: integer
                description: Number of subscriptions created within the aggregation.
              periods:
                description: Periods of the specified aggregation.
                type: array
                items:
                  type: object
                  properties:
                    period:
                      type: integer
                      description: >-
                        Retention period number.

                        This value is measured from the beginning boundary of
                        the aggregation.

                        Periods are numbered as follows:
                          - `0`: First period.
                          - `1`: Second period.
                          - `2`: Third period, and so on.
                    retentionRatio:
                      type: number
                      format: double
                      description: >-
                        Ratio percentage of active, non-cancelled, subscriptions
                        in the retention period versus all subscriptions created
                        in the aggregation period.
                    canceledSubscriptionsCount:
                      type: integer
                      description: >-
                        Number of canceled subscriptions within the specified
                        retention period.
    ReportRetentionValue:
      type: object
      properties:
        data:
          description: Retention value data.
          type: array
          items:
            type: object
            description: Contains an aggregation.
            readOnly: true
            properties:
              aggregationValue:
                type: string
                description: >-
                  Value by which the report provides retention periods and
                  values.

                  Date values are displayed as follows:


                  - Day: `YYYY-MM-DD`.

                  - Month: `YYYY-MM`.

                  - Quarter: `YYYY-MM`/`YYYY-MM`.

                  - Year: `YYYY`.
              customersCount:
                type: integer
                description: >-
                  Number of customers within the aggregation who make their
                  first payment.
              periods:
                description: Periods of the specified aggregation.
                type: array
                items:
                  type: object
                  properties:
                    period:
                      type: integer
                      description: >-
                        Retention period number.

                        This value is measured from the beginning boundary of
                        the aggregation.
                          - `0`: First period.
                          - `1`: Second period.
                          - `2`: Third period, and so on.
                    retentionAverage:
                      type: number
                      format: double
                      description: >-
                        Summary amount of all transactions for all periods up to
                        the current period divided by the aggregation customer
                        number.
                    transactionsCount:
                      type: integer
                      description: >-
                        Number of transactions that occurred within the
                        retention period.

                        For example, in 3 rebills.
                    transactionsValue:
                      type: number
                      format: double
                      description: >-
                        Total value of transactions.

                        This value is calculated based on: `income transactions`
                        minus `loss transactions`.
    ReportRevenueWaterfall:
      type: array
      items:
        type: object
        properties:
          issuedMonth:
            description: Month when the revenue invoice is issued.
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2022-02
          booked:
            description: Month when the revenue amount is booked.
            type: number
            format: double
            example: 25
          recognized:
            description: >-
              Amount of recognized revenue amount up to, and including, the
              `recognizedTo` month.
            type: number
            format: double
            example: 20
          remaining:
            description: >-
              Amount of revenue that remains to be recognized after the
              `recognizedTo` month.
            type: number
            format: double
            example: 5
          waterfall:
            type: array
            description: Recognized revenue waterfall for each month.
            items:
              type: object
              properties:
                recognizedMonth:
                  description: Month when revenue is recognized.
                  type: string
                  pattern: ^\d{4}-\d{2}$
                  example: 2022-04
                amount:
                  description: Amount of revenue recognized at the `recognizedMonth`.
                  type: number
                  format: double
            example:
              - recognizedMonth: 2022-02
                amount: 4.4
              - recognizedMonth: 2022-03
                amount: 8.33
              - recognizedMonth: 2022-04
                amount: 7.27
    RevenueEntry:
      type: object
      readOnly: true
      properties:
        customerId:
          $ref: '#/components/schemas/CustomerId'
        invoiceId:
          type: string
          description: >-
            ID of the invoice that contains the item which generated the
            revenue.
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        invoiceItemId:
          type: string
          description: ID of the invoice item which generated the revenue.
          maxLength: 50
          example: ii_0YVFDEQS2KCFTBN9HXWJFY55GV
        productId:
          description: ID of the product related to the invoice item.
          type:
            - string
            - 'null'
          maxLength: 50
          example: prod_0YV7DES3WPC5J8JD8QTVNZBZNZ
        planId:
          description: ID of the plan related to the invoice item.
          type:
            - string
            - 'null'
          maxLength: 50
          example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
        accountingCode:
          description: Product accounting code.
          type: string
          example: '4010'
        currency:
          $ref: '#/components/schemas/CurrencyCode'
        status:
          description: Entry recognition status.
          readOnly: true
          type: string
          enum:
            - scheduled
            - recognized
          x-enumDescriptions:
            scheduled: The amount is recognized at the end of the month.
            recognized: The amount is recognized and final.
        estimatedAmount:
          description: >-
            Estimated amount of recognized revenue unless it changes before
            recognition time.
          type: number
          x-type: Money
          format: double
        recognizedAmount:
          description: Recognized amount.
          type: number
          x-type: Money
          format: double
        scheduledTime:
          description: Date and time when the entry is created.
          type: string
          format: date-time
          readOnly: true
        issuedTime:
          description: Date and time when the related invoice is issued.
          type: string
          format: date-time
          readOnly: true
        recognizedTime:
          description: Date and time when the entry is recognized.
          type:
            - string
            - 'null'
          format: date-time
          readOnly: true
    SubscriptionCancellationReport:
      type: object
      properties:
        data:
          description: Subscription cancellation data.
          type: array
          items:
            type: object
            description: Contains an aggregation.
            readOnly: true
            properties:
              aggregationValue:
                type: string
                description: Aggregation value.
              count:
                type: integer
                description: Total number of canceled subscriptions.
              averageLength:
                type: number
                format: double
                description: >-
                  Average length of canceled subscription from start to end
                  within the aggregation in seconds.
              medianLength:
                type: number
                format: double
                description: >-
                  Median length of canceled subscription from start to end
                  within the aggregation in seconds.
    SubscriptionRenewal:
      type: object
      properties:
        data:
          description: Subscription renewal data.
          type: array
          items:
            type: object
            description: Contains an aggregation.
            readOnly: true
            properties:
              planId:
                type: string
                description: Plan ID for which subscriptions are counted.
                maxLength: 50
                example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
              allRenewalCount:
                type: integer
                description: Total number of renewed subscriptions.
              allDunningCount:
                type: integer
                description: >-
                  Total number of dunned subscriptions.

                  Dunning is the process of retrying unsuccessful payment
                  transactions.
              abandonedCount:
                type: integer
                description: Total number of abandoned subscriptions.
              paidRenewalCount:
                type: integer
                description: |-
                  Total number of paid renewed subscriptions.
                  To determine the renewal rate,
                  divide the value of this field by the `allRenewalCount` value.
              paidDunningCount:
                type: integer
                description: |-
                  Total number of paid dunned subscriptions.
                  To determine the dunning success rate,
                  divide the value of this field by the `allDunningCount` value.
              refundedRenewalCount:
                type: integer
                description: |-
                  Total number of paid renewed subscriptions.
                  To determine the renewal refund rate,
                  divide the value of this field by the `allRenewalCount` value.
              refundedDunningCount:
                type: integer
                description: |-
                  Total number of paid dunned subscriptions.
                  To determine the dunning refund rate,
                  divide the value of this field by the `allDunningCount` value.
              chargebackRenewalCount:
                type: integer
                description: |-
                  Total number of paid renewed subscriptions.
                  To determine the renewal chargeback rate,
                  divide the value of this field by the `allRenewalCount` value.
              chargebackDunningCount:
                type: integer
                description: |-
                  Total number of paid dunned subscriptions.
                  To determine the dunning chargeback rate,
                  divide the value of this field by the `allDunningCount` value.
    ReportTax:
      type: object
      properties:
        data:
          description: Tax data.
          type: array
          items:
            type: object
            properties:
              country:
                description: >-
                  Country to which the tax is owed, in [ISO Alpha-2 code
                  format](https://www.iso.org/obp/ui/#search/code/).
                type: string
                example: US
              state:
                description: >-
                  Postal abbreviated state name for the state to which the tax
                  is owed.
                type: string
                example: TX
              county:
                description: Name of county to which the tax is owed.
                type: string
                example: TRAVIS
              city:
                description: Name of city to which the tax is owed.
                type: string
                example: AUSTIN
              stateRate:
                description: Percentage rate of state tax.
                type: number
                format: double
              stateAmount:
                description: Amount of state tax.
                type: number
                format: double
              countyRate:
                description: Percentage rate of county tax.
                type: number
                format: double
              countyAmount:
                description: Amount of county tax.
                type: number
                format: double
              cityRate:
                description: Percentage rate of city tax.
                type: number
                format: double
              cityAmount:
                description: Amount of city tax.
                type: number
                format: double
              specialDistrictRate:
                description: Percentage rate of special district tax.
                type: number
                format: double
              specialDistrictAmount:
                description: Amount of special district tax.
                type: number
                format: double
              taxableSalesAmount:
                description: Amount of taxable sales.
                type: number
                format: double
              nontaxableSalesAmount:
                description: Amount of nontaxable sales.
                type: number
                format: double
    TimeSeriesTransaction:
      type: object
      properties:
        data:
          description: Time series data.
          type: array
          items:
            type: object
            description: Contains an aggregation.
            readOnly: true
            properties:
              date:
                type: string
                description: Date in `YYYY-MM-DD` format .
              total:
                type: number
                format: double
                description: Total number of all transactions within the aggregation.
              subaggregates:
                type: object
                description: Subaggregates that have transactions within the range.
                properties:
                  subaggregate:
                    type: string
                    description: ID of the subaggregate.
                  value:
                    type: number
                    format: double
                    description: >-
                      Total number of all subaggregate transactions within the
                      aggregation.
    ReportDisputeDelays:
      type: object
      properties:
        data:
          description: Dispute delay data.
          type: array
          items:
            type: object
            properties:
              aggregationFieldValue:
                description: >-
                  Aggregation field value.

                  This value is defined in the `aggregationField` parameter by
                  using a query.

                  For example, this value could be: website or country.
                type: string
              25th:
                description: >-
                  Delay between dispute and transaction time at the 25th
                  percentile.
                type: integer
              50th:
                description: >-
                  Delay between dispute and transaction time at the 50th
                  percentile.
                type: integer
              75th:
                description: >-
                  Delay between dispute and transaction time at the 75th
                  percentile.
                type: integer
    ReportTransactions:
      type: object
      properties:
        data:
          description: Transaction data.
          type: array
          readOnly: true
          items:
            type: object
            properties:
              aggregationFieldValue:
                description: Aggregation field value.
                type: string
              authApprovedThroughput:
                description: Percentage of approved authentication transactions.
                type: number
                format: double
              approvedThroughput:
                description: Percentage of approved sale transactions.
                type: number
                format: double
              authApprovalCount:
                description: Total number of approved authentication transactions.
                type: integer
              disputesRate:
                description: Percentage of disputed sale and capture transactions.
                type: number
                format: double
              disputesCount:
                description: Total number of disputed sale and capture transactions.
                type: integer
              salesCount:
                description: Total number of sales.
                type: integer
              salesValue:
                description: Total sales value.
                type: number
                format: double
              salesAverage:
                description: Average sales value.
                type: number
                format: double
              refundsCount:
                description: Total number of refunds.
                type: integer
              refundsValue:
                description: Total value of refunds.
                type: number
                format: double
              amount:
                description: |-
                  Amount of revenue.
                  This value is the result of `salesValue` minus `refundsValue`.
                type: number
                format: double
              count:
                description: Total number of transactions.
                type: number
                format: double
              unapprovedCount:
                description: Total number of unapproved transactions.
                type: number
                format: double
    SubscriptionSummaryMetrics:
      type: object
      properties:
        currency:
          description: Currency code in ISO 4217 format.
          minLength: 3
          maxLength: 3
          example: USD
          readOnly: true
          type: string
        invoicedAmount:
          description: Total amount of all issued, past due, and paid invoices.
          readOnly: true
          type: number
          format: double
        collectedAmount:
          description: Total amount of all paid invoices.
          readOnly: true
          type: number
          format: double
        invoiceCount:
          description: Number of issued, past due, or paid invoices.
          readOnly: true
          type: integer
    StorefrontAccount:
      type: object
      properties:
        id:
          description: ID of the account.
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        websiteId:
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/WebsiteId'
        username:
          type: string
          description: Username associated with the account.
          readOnly: true
        primaryAddress:
          $ref: '#/components/schemas/ContactObject'
        paymentToken:
          type: string
          writeOnly: true
          description: >-
            Write-only payment token.

            If this value is supplied, it converts into a payment instrument and
            set as the `defaultPaymentInstrument`.

            The value of this property overrides the `defaultPaymentInstrument`
            if both are supplied.

            This token may only be used once before it expires.
        defaultPaymentInstrument:
          type: object
          description: >-
            Default payment instrument.

            The default payment instrument is used to automatically pay
            subscription renewals,

            and for transaction requests where a specific payment instrument is
            not provided.
          required:
            - method
          properties:
            method:
              $ref: '#/components/schemas/PaymentMethod'
            paymentInstrumentId:
              type: string
              description: ID of the payment instrument.
              maxLength: 50
              example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
        isVerified:
          type: boolean
          description: >-
            Verification status of the email address associated with the
            account.
          readOnly: true
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            website:
              type: object
    StorefrontBillingPortal:
      type: object
      required:
        - websiteId
        - slug
      properties:
        id:
          type: string
          description: ID of the billing portal.
          readOnly: true
          maxLength: 50
          example: bill_prt_0YV7K5TYV5D1P9ZNKDT39KZC3C
        token:
          description: Session's token used for authentication.
          type: string
          readOnly: true
        slug:
          description: >-
            Path segment that is appended to the billing portal URL to help make
            it human-readable.

            Example: `https://example.com/billing-portal/{slug}`.
          type: string
          minLength: 5
          maxLength: 100
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        features:
          description: Features that can be enabled for the billing portal.
          type: object
          properties:
            authenticateWithPassword:
              description: Specifies if a customer can authenticate with a password.
              type: boolean
              default: true
            orderCancel:
              description: Specifies if a customer can cancel an order.
              type: boolean
              default: true
            orderAddressEdit:
              description: Specifies if a customer can change an order address.
              type: boolean
              default: true
            paymentInstrumentAdd:
              description: Specifies if a customer can add a new payment instrument.
              type: boolean
              default: true
            paymentInstrumentUpdate:
              description: Specifies if a customer can update their payment instruments.
              type: boolean
              default: true
            paymentInstrumentDeactivate:
              description: Specifies if a customer can disable their payment instruments.
              type: boolean
              default: true
        customization:
          description: Visual customization options for the billing portal.
          type: object
          properties:
            logoId:
              description: ID of the linked file object.
              $ref: '#/components/schemas/ResourceId'
            colors:
              description: Various colors used in the billing portal.
              type: object
              properties:
                primary:
                  description: Primary color for the billing portal in hexadecimal format.
                  type: string
                  maxLength: 6
                  default: 0044d4
                secondary:
                  description: >-
                    Secondary color for the billing portal in hexadecimal
                    format.
                  type: string
                  maxLength: 6
                  default: ffffff
            links:
              description: URLs that are displayed in the billing portal.
              type: object
              properties:
                refundPolicy:
                  description: Website refund policy URL.
                  type: string
                  format: url
                privacyPolicy:
                  description: Website privacy policy URL.
                  type: string
                  format: url
                termsOfService:
                  description: Website terms of service URL.
                  type: string
                  format: url
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - logoUrl
    StorefrontTransaction:
      type: object
      description: Transaction information.
      properties:
        id:
          readOnly: true
          $ref: '#/components/schemas/TransactionId'
        websiteId:
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/WebsiteId'
        type:
          description: Type of transaction.
          type: string
          x-basic: true
          readOnly: true
          enum:
            - 3ds-authentication
            - authorize
            - capture
            - credit
            - refund
            - sale
            - setup
            - void
        status:
          description: Status of the transaction.
          type: string
          readOnly: true
          enum:
            - completed
            - conn-error
            - disputed
            - never-sent
            - offsite
            - partially-refunded
            - pending
            - refunded
            - sending
            - timeout
            - voided
            - waiting-approval
            - waiting-capture
            - waiting-gateway
            - waiting-refund
        result:
          description: Result of the transaction.
          type: string
          x-basic: true
          readOnly: true
          enum:
            - abandoned
            - approved
            - canceled
            - declined
            - unknown
        amount:
          x-type: Money
          x-sortable: true
          x-basic: true
          description: Total amount of the transaction.
          type: number
          format: double
          readOnly: true
        currency:
          readOnly: true
          $ref: '#/components/schemas/CurrencyCode'
        purchaseAmount:
          description: >-
            Amount by which the purchase is completed.

            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.
          $ref: '#/components/schemas/TransactionId'
        childTransactions:
          description: IDs of child transactions.
          readOnly: true
          type: array
          items:
            $ref: '#/components/schemas/ResourceId'
        invoiceIds:
          description: Related invoice IDs.
          readOnly: true
          type: array
          items:
            $ref: '#/components/schemas/ResourceId'
        orderIds:
          description: Subscription IDs of invoices that are related to the transaction.
          readOnly: true
          type: array
          items:
            $ref: '#/components/schemas/ResourceId'
        planIds:
          description: Plan IDs of orders that are related to the transaction.
          readOnly: true
          type: array
          items:
            $ref: '#/components/schemas/ResourceId'
        isRebill:
          description: >-
            Specifies if the transaction is one of a number of recurring
            payments in a subscription, excluding trials or setup fees.
          type: boolean
          readOnly: true
        rebillNumber:
          description: >-
            Rebill number of the transaction.

            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'
        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'
        gateway:
          type: object
          description: Related gateway information.
          readOnly: true
          properties:
            response:
              description: Gateway response.
              type: object
              properties:
                code:
                  description: Gateway response code.
                  type:
                    - string
                    - 'null'
                message:
                  description: Gateway response message.
                  type:
                    - string
                    - 'null'
                type:
                  description: Gateway response type.
                  type:
                    - string
                    - 'null'
                originalCode:
                  description: Raw, unmapped gateway response code.
                  type:
                    - string
                    - 'null'
                originalMessage:
                  description: Raw, unmapped gateway response message.
                  type:
                    - string
                    - 'null'
                humanMessage:
                  description: Human-readable gateway response message.
                  type:
                    - string
                    - 'null'
                humanDescription:
                  description: >-
                    Human-readable gateway response description with more
                    detailed information.
                  type:
                    - string
                    - 'null'
            avsResponse:
              description: Gateway Address Verification System (AVS) response.
              type: object
              properties:
                code:
                  description: Response code.
                  type:
                    - string
                    - 'null'
                message:
                  description: Response message.
                  type:
                    - string
                    - 'null'
                originalCode:
                  description: Raw response code.
                  type:
                    - string
                    - 'null'
                originalMessage:
                  description: Raw response message.
                  type:
                    - string
                    - 'null'
            cvvResponse:
              description: Gateway Card Verification Value (CVV) response.
              type: object
              properties:
                code:
                  description: Response code.
                  type:
                    - string
                    - 'null'
                message:
                  description: Response message.
                  type:
                    - string
                    - 'null'
                originalCode:
                  description: Raw response code.
                  type:
                    - string
                    - 'null'
                originalMessage:
                  description: Raw response message.
                  type:
                    - string
                    - 'null'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        processedTime:
          description: Date and time when the transaction is processed.
          x-sortable: true
          x-basic: true
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        paymentInstrument:
          type: object
          description: Default payment instrument information.
          required:
            - method
          properties:
            method:
              $ref: '#/components/schemas/PaymentMethod'
            paymentInstrumentId:
              type: string
              description: ID of the payment instrument.
              maxLength: 50
              example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
        approvalUrl:
          description: >-
            URL to redirect the end-customer when transaction `status` is
            `waiting-approval` or `offsite`.
          type: string
          format: uri
        token:
          description: >-
            Session token that is used for authentication. This token provides
            access to created orders, invoices, and transactions.
          type: string
          readOnly: true
        depositRequestId:
          readOnly: true
          type:
            - string
            - 'null'
          description: >-
            ID of the deposit request if applicable. The created transaction is
            based on the properties of this deposit request.
          maxLength: 50
          example: dep_req_0YVJ65BSGYC3EAT58SEX8KY6J7
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - approvalUrl
                  - approvalContinue
                  - approvalBypass
                  - cancelUrl
                  - redirectUrl
    StorefrontCheckoutForm:
      type: object
      required:
        - websiteId
        - plans
      properties:
        id:
          type: string
          description: ID of the checkout form.
          readOnly: true
          maxLength: 50
          example: chkt_frm_0YV8XZ6174C2MBS5011SAZNMBP
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customDomain:
          description: Custom domain for the checkout form.
          type:
            - string
            - 'null'
          maxLength: 255
        plans:
          type: array
          description: >-
            List of plans that are applied to a customer order by default.

            Plans describe how the customer must pay for products. For more
            information, see
            [Plans](https://www.rebilly.com/docs/dev-docs/api/plans/).
          minItems: 1
          items:
            $ref: '#/components/schemas/CheckoutFormPlan'
        addonPlans:
          description: >-
            List of add-on plans that are displayed to the customer on the
            payment screen.

            Add-ons are plans that the customer has not already subscribed to.


            The customer selects whether to add an add-on plan to their current
            order.
          default: []
          type: array
          items:
            $ref: '#/components/schemas/CheckoutFormPlan'
        bumpPlans:
          description: >-
            List of bump plans that are displayed to the customer on the payment
            screen.

            Use bump plans to offer purchase bonuses, discounts, and deals to
            the customer.


            The customer selects whether to purchase bump plans,

            or to use the plans that are specified in their current order.
          default: []
          type: array
          items:
            $ref: '#/components/schemas/CheckoutFormPlan'
        accountsEnabled:
          description: >-
            Specifies if the account is enabled.

            If this value is `true`, the customer can sign-up and sign-in using
            the checkout form.
          type: boolean
          default: false
        couponsEnabled:
          description: >-
            Specifies if coupons are enabled in the checkout form.

            If this value is `true`, the customer can use coupons in the
            checkout form.

            Use coupons to reward customers, generate sales, or to test new
            pricing strategies.
          type: boolean
          default: false
        purchaseLimit:
          description: >-
            Limits the number of purchases that can be made using a specific
            checkout form.

            If a purchase limit value is set, each purchase decreases this
            value.

            When the purchases limit value reaches zero, the checkout form
            becomes inactive.
          type:
            - integer
            - 'null'
          minimum: 0
          default: null
        paymentMethods:
          description: |-
            List of available payment methods.
            Payment methods must have at least one active gateway account.
            If not specified, all available payment methods are displayed.
          type: array
          items:
            $ref: '#/components/schemas/PaymentMethod'
        customization:
          description: Visual customization options for the checkout form.
          type: object
          properties:
            logoId:
              description: ID of the linked file object.
              $ref: '#/components/schemas/ResourceId'
            summary:
              description: Summary text.
              type: string
            buttonText:
              description: >-
                Button text. Use the `{{amount}}` placeholder to display the
                checkout form total.
              type: string
              default: Pay {{amount}}
            colors:
              description: Primary color used in the checkout form and button text.
              type: object
              properties:
                primary:
                  description: Primary color for the checkout form in hexadecimal format.
                  type: string
                  maxLength: 6
                  default: 0044d4
                buttonText:
                  description: >-
                    Button text color for the checkout form in hexadecimal
                    format.
                  type: string
                  maxLength: 6
                  default: ffffff
            links:
              description: URLs that are displayed on the checkout form.
              type: object
              properties:
                refundPolicy:
                  description: Website refund policy URL.
                  type: string
                  format: url
                privacyPolicy:
                  description: Website privacy policy URL.
                  type: string
                  format: url
                termsOfService:
                  description: Website terms of service URL.
                  type: string
                  format: url
            tracking:
              description: Tracking system IDs.
              type: object
              properties:
                googleAnalytics:
                  description: Google Analytics tracking ID.
                  type: string
                  example: UA-XXXXX-YY
                googleTagManager:
                  description: Google Tag Manager tracking ID.
                  type: string
                  example: GTM-XXXXX
                gtagJs:
                  description: >-
                    Google Analytics tracking ID.

                    This value is used by Google Global Site Tag (gtag.js)
                    service.
                  type: string
                  example: UA-XXXXX-YY
                facebookPixel:
                  description: Facebook Pixel tracking ID.
                  type: string
                  example: '1234567890'
                segmentAnalytics:
                  description: Segment Analytics tracking ID.
                  type: string
                  example: '1234567890'
                heapIo:
                  description: Heap.io tracking ID.
                  type: string
                  example: '1234567890'
            requiredAdditionalFields:
              description: List of required fields.
              type: array
              items:
                type: string
              example:
                - information.companyName
                - information.phoneNumber
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        token:
          description: Session token that is used for authentication.
          type: string
          readOnly: true
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontInvoice:
      properties:
        id:
          type: string
          description: ID of the invoice.
          readOnly: true
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        invoiceNumber:
          description: >-
            Auto-incrementing number based on the sequence of invoices for any
            particular customer.
          readOnly: true
          type: integer
          x-basic: true
        orderId:
          description: ID of the order (experimental).
          readOnly: true
          example: ord_01HVKA5975PJBSQ1SX72G3MSZC
          type:
            - string
            - 'null'
        subscriptionId:
          type: string
          description: |-
            ID of the related subscription order, if available.
            This field is `null` if there are no related subscription orders.
          readOnly: true
          maxLength: 50
          example: sub_01HRF27SATGE4Z6PBJE6PD8328
        currency:
          x-sortable: true
          x-basic: true
          $ref: '#/components/schemas/CurrencyCode'
        amount:
          description: Amount of the invoice.
          type: number
          x-type: Money
          x-sortable: true
          x-basic: true
          format: double
          readOnly: true
        amountDue:
          description: Amount that is due on the invoice.
          type: number
          x-type: Money
          x-sortable: true
          format: double
          readOnly: true
        subtotalAmount:
          description: Subtotal amount of the invoice.
          type: number
          x-type: Money
          format: double
          readOnly: true
        discountAmount:
          description: Discount amount that is applied to the invoice.
          type: number
          x-type: Money
          format: double
          readOnly: true
        shipping:
          $ref: '#/components/schemas/Shipping'
        tax:
          $ref: '#/components/schemas/Taxes'
        billingAddress:
          description: Billing address of the invoice.
          $ref: '#/components/schemas/ContactObject'
        deliveryAddress:
          description: Delivery address of the invoice.
          $ref: '#/components/schemas/ContactObject'
        poNumber:
          description: Purchase order number that is displayed on the invoice.
          type:
            - string
            - 'null'
          example: PO123456
        notes:
          description: Notes for the customer that are displayed on the invoice.
          type: string
        items:
          type: array
          description: Invoice items array.
          readOnly: true
          items:
            $ref: '#/components/schemas/InvoiceItem'
        discounts:
          type: array
          description: Discounts applied.
          readOnly: true
          items:
            type: object
            readOnly: true
            properties:
              couponId:
                type: string
                description: ID of the coupon.
                maxLength: 50
                example: cpn_0YVCNKF81GD778N4YNVGDJK558
              redemptionId:
                description: ID of the redemption.
                $ref: '#/components/schemas/ResourceId'
              amount:
                description: Total amount discounted by this coupon.
                type: number
                format: double
              description:
                type: string
                description: Description of the discount.
              context:
                $ref: '#/components/schemas/DiscountContext'
        autopayScheduledTime:
          description: Date and time when an automatic payment (autopay) is scheduled.
          type: string
          x-sortable: true
          format: date-time
        autopayRetryNumber:
          description: >-
            Number of times that an automatic payment (autopay) has been
            attempted on an invoice.
          readOnly: true
          type: integer
          x-sortable: true
          minimum: 0
          default: 0
        status:
          type: string
          description: Status of the invoice.
          x-basic: true
          readOnly: true
          enum:
            - draft
            - unpaid
            - paid
            - partially-paid
            - past-due
            - abandoned
            - voided
            - partially-refunded
            - refunded
            - disputed
        delinquentCollectionPeriod:
          type: integer
          description: >-
            Length of time, in days, between when the invoice is due and when
            the invoice is paid.
          x-sortable: true
          readOnly: true
        collectionPeriod:
          type: integer
          x-sortable: true
          description: >-
            Length of time, in days, between when the invoice is issued and when
            the invoice is paid.
          readOnly: true
        abandonedTime:
          description: Date and time when the invoice is abandoned.
          x-sortable: true
          $ref: '#/components/schemas/ServerTimestamp'
        voidedTime:
          description: Date and time when the invoice is voided.
          x-sortable: true
          $ref: '#/components/schemas/ServerTimestamp'
        paidTime:
          x-label: Payment Date
          x-sortable: true
          x-basic: true
          description: Date and time when the invoice is paid.
          $ref: '#/components/schemas/ServerTimestamp'
        dueTime:
          description: Date and time when the invoice is due for payment.
          type: string
          x-sortable: true
          format: date-time
        issuedTime:
          description: Date and time when the invoice is issued.
          x-label: Date Issued
          x-sortable: true
          x-basic: true
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        paymentFormUrl:
          type: string
          readOnly: true
          format: 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`.
        transactions:
          type: array
          description: Invoice transactions array.
          readOnly: true
          items:
            $ref: '#/components/schemas/StorefrontTransaction'
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontUpcomingInvoice:
      type: object
      readOnly: true
      properties:
        id:
          description: >-
            ID of the upcoming invoice, which is persisted in the future renewal
            invoice.
          type: string
          readOnly: true
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        orderId:
          description: ID of the order.
          readOnly: true
          type:
            - string
            - 'null'
          maxLength: 50
          example: ord_01HVKA5975PJBSQ1SX72G3MSZC
        currency:
          $ref: '#/components/schemas/CurrencyCode'
        items:
          type: array
          description: Upcoming invoice items array.
          items:
            $ref: '#/components/schemas/UpcomingInvoiceItem'
        amount:
          description: Amount of the invoice.
          type: number
          format: double
          readOnly: true
        amountDue:
          description: Amount that is due on the invoice.
          type: number
          format: double
          readOnly: true
        subtotalAmount:
          description: Subtotal amount of the invoice.
          type: number
          format: double
          readOnly: true
        discountAmount:
          description: Discount amount that is applied to the invoice.
          type: number
          format: double
          readOnly: true
        shipping:
          $ref: '#/components/schemas/Shipping'
        tax:
          $ref: '#/components/schemas/Taxes'
        billingAddress:
          description: Billing address of the invoice.
          $ref: '#/components/schemas/ContactObject'
        deliveryAddress:
          description: Delivery address of the invoice.
          $ref: '#/components/schemas/ContactObject'
        poNumber:
          description: Purchase order number that is displayed on the invoice.
          type:
            - string
            - 'null'
          example: PO123456
        notes:
          description: Notes for the customer that are displayed on the invoice.
          type: string
        discounts:
          type: array
          description: Discounts applied.
          readOnly: true
          items:
            type: object
            readOnly: true
            properties:
              couponId:
                type: string
                description: ID of the coupon.
                maxLength: 50
                example: cpn_0YVCNKF81GD778N4YNVGDJK558
              redemptionId:
                description: ID of the redemption.
                $ref: '#/components/schemas/ResourceId'
              amount:
                description: Total amount discounted by this coupon.
                type: number
                format: double
              description:
                type: string
                description: Description of the discount.
              context:
                $ref: '#/components/schemas/DiscountContext'
        dueTime:
          description: Date and time when the invoice is due for payment.
          type: string
          format: date-time
        issuedTime:
          description: Date and time when the invoice is issued.
          $ref: '#/components/schemas/ServerTimestamp'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
    StorefrontProofOfIdentityKycDocument:
      type: object
      required:
        - documentType
        - status
      properties:
        id:
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        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:
            $ref: '#/components/schemas/ResourceId'
        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
          format: date-time
          readOnly: true
        documentMatches:
          type: object
          readOnly: true
          description: 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'
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontProofOfAddressKycDocument:
      type: object
      required:
        - documentType
        - status
      properties:
        id:
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        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:
            $ref: '#/components/schemas/ResourceId'
        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
          format: date-time
          readOnly: true
        documentMatches:
          description: Document matches.
          type: object
          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'
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontProofOfFundsKycDocument:
      type: object
      required:
        - documentType
        - status
      properties:
        id:
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        fileIds:
          description: >-
            IDs of linked file objects.


            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:
            $ref: '#/components/schemas/ResourceId'
        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
          format: date-time
          readOnly: true
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontProofOfPurchaseKycDocument:
      type: object
      required:
        - documentType
        - status
      properties:
        id:
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        fileIds:
          description: >-
            IDs of linked file objects.


            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:
            $ref: '#/components/schemas/ResourceId'
        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
          format: date-time
          readOnly: true
        documentMatches:
          type: object
          readOnly: true
          description: Document matches.
          properties:
            data:
              $ref: '#/components/schemas/PurchaseMatches'
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontProofOfCreditFileKycDocument:
      type: object
      required:
        - documentType
        - status
      properties:
        id:
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        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:
            $ref: '#/components/schemas/ResourceId'
        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
          format: date-time
          readOnly: true
        documentMatches:
          type: object
          readOnly: true
          description: Document matches.
          properties:
            data:
              $ref: '#/components/schemas/CreditFileMatches'
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontKycDocument:
      oneOf:
        - $ref: '#/components/schemas/StorefrontProofOfIdentityKycDocument'
        - $ref: '#/components/schemas/StorefrontProofOfAddressKycDocument'
        - $ref: '#/components/schemas/StorefrontProofOfFundsKycDocument'
        - $ref: '#/components/schemas/StorefrontProofOfPurchaseKycDocument'
        - $ref: '#/components/schemas/StorefrontProofOfCreditFileKycDocument'
      discriminator:
        propertyName: documentType
        mapping:
          identity-proof: '#/components/schemas/StorefrontProofOfIdentityKycDocument'
          address-proof: '#/components/schemas/StorefrontProofOfAddressKycDocument'
          funds-proof: '#/components/schemas/StorefrontProofOfFundsKycDocument'
          purchase-proof: '#/components/schemas/StorefrontProofOfPurchaseKycDocument'
          credit-file-proof: '#/components/schemas/StorefrontProofOfCreditFileKycDocument'
    StorefrontKycRequest:
      type: object
      description: KYC request information.
      properties:
        id:
          type: string
          readOnly: true
          description: ID of the KYC request.
          maxLength: 50
          example: kyc_req_0YV7JMJ3DBCGRBR7K9D4HVGPP5
        documents:
          type: array
          description: Documents to request from the customer.
          minItems: 1
          items:
            $ref: '#/components/schemas/KycRequestDocument'
        status:
          description: Status of the request.
          type: string
          readOnly: true
          enum:
            - gathering
            - attempted
            - partial
            - pending-review
            - fulfilled
            - failed
            - abandoned
            - expired
          x-enumDescriptions:
            gathering: |-
              No documents have been provided yet.
              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
          format: uri
        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
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            documents:
              type: array
    StorefrontKycLivenessSession:
      type: object
      description: KYC liveness session information.
      required:
        - customerId
      properties:
        id:
          type: string
          readOnly: true
          description: ID of the KYC liveness session.
          maxLength: 50
          example: kyc_liv_01HXBZ0MS1GPS6S34MPQXYT5TZ
        customerId:
          $ref: '#/components/schemas/CustomerId'
          readOnly: true
        kycRequestId:
          type: string
          description: ID of the KYC request that the liveness session is associated with.
          maxLength: 50
          example: kyc_req_0YV7JMJ3DBCGRBR7K9D4HVGPP5
        sessionId:
          type: string
          readOnly: true
          description: Session ID of the KYC liveness session in the third-party service.
          example: 4f6cf35x-2c4y-483z-a0a9-158621f77a21
        status:
          description: Status of the session.
          type: string
          readOnly: true
          enum:
            - pending
            - succeeded
            - failed
            - abandoned
          x-enumDescriptions:
            pending: |-
              Session is created, but not processed yet.
              This is a temporary state.
            succeeded: |-
              Session has succeeded.
              This is a permanent state.
            failed: |-
              Session has failed.
              This is a permanent state.
            abandoned: |-
              Session was not completed and timed out.
              This is a permanent state.
        referenceImage:
          type:
            - string
            - 'null'
          readOnly: true
          description: URL of the reference image.
          format: uri
          example: https://www.rebilly.com/blog/header-images/handle_chargebacks.png
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - kycRequest
    StorefrontCustomerJWT:
      type: object
      properties:
        id:
          type: string
          description: ID of the session.
          readOnly: true
          maxLength: 50
          example: jwt_0YV7DEJX80CDRAKVTV478ZNJDR
        token:
          description: Session's token used for authentication.
          type: string
          readOnly: true
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        expiredTime:
          description: Session expired time. Defaults to one hour.
          type: string
          format: date-time
    StorefrontSubscription:
      type: object
      properties:
        id:
          type: string
          description: ID of the order.
          readOnly: true
          maxLength: 50
          example: sub_01HRF27SATGE4Z6PBJE6PD8328
        orderType:
          description: |-
            Specifies the type of order.
            An order may be a subscription or a one-time purchase.
          type: string
          enum:
            - subscription-order
            - one-time-order
          default: subscription-order
        billingStatus:
          description: >-
            Billing status of the most recent invoice.

            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'
        orderId:
          description: ID of the order.
          readOnly: true
          type:
            - string
            - 'null'
          maxLength: 50
          example: ord_01HVKA5975PJBSQ1SX72G3MSZC
        currency:
          description: Currency of the order.
          readOnly: true
          $ref: '#/components/schemas/CurrencyCode'
        initialInvoiceId:
          type: string
          description: ID of the initial invoice.
          readOnly: true
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        recentInvoiceId:
          type: string
          description: |-
            ID of the most recently issued invoice.
            The invoice might not be `paid` yet.
          readOnly: true
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        items:
          description: Details of items in the order.
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/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
          $ref: '#/components/schemas/ServerTimestamp'
        voidTime:
          description: Date and time when the order is voided.
          $ref: '#/components/schemas/ServerTimestamp'
        abandonTime:
          type:
            - string
            - 'null'
          description: >-
            Date and time when the pending order is automatically abandoned.

            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
        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
              readOnly: true
            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
        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 same recurring period length,
            this property enables the customer to subscribe to different plans.
          example: null
          properties:
            periodAnchorInstruction:
              $ref: '#/components/schemas/ServicePeriodAnchorInstruction'
        autopay:
          description: >-
            Specifies if payment attempts are made automatically.

            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
          format: date-time
          readOnly: true
        renewalTime:
          description: Date and time when the subscription renews.
          type: string
          x-sortable: true
          x-basic: true
          format: date-time
        rebillNumber:
          description: Current billing period number.
          type: integer
          readOnly: true
          x-sortable: true
        lineItems:
          description: >-
            Subscription line items which queue until the next renewal (or
            interim) invoice is issued for the subscription.
          readOnly: true
          type: array
          deprecated: true
          items:
            type: object
            description: >-
              Invoice line item. Use `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 period begins for this item.
                type: string
                format: date-time
              periodEndTime:
                description: Date and time when the period ends for this item.
                type: string
                format: date-time
              createdTime:
                $ref: '#/components/schemas/CreatedTime'
              updatedTime:
                $ref: '#/components/schemas/UpdatedTime'
        lineItemSubtotal:
          type: object
          readOnly: true
          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
        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
        canceledTime:
          description: Date and time when the subscription order is canceled.
          x-label: Cancellation time
          x-sortable: true
          x-basic: true
          type: string
          format: date-time
          readOnly: true
        canceledBy:
          description: Specifies who initiated the cancellation.
          type: string
          readOnly: true
          enum:
            - merchant
            - customer
            - rebilly
        cancelCategory:
          description: Category of the cancellation.
          type: string
          readOnly: true
          enum:
            - billing-failure
            - delinquency
            - did-not-use
            - did-not-want
            - missing-features
            - bugs-or-problems
            - do-not-remember
            - risk-warning
            - contract-expired
            - too-expensive
            - never-started
            - switched-plan
            - organization-deactivated
            - other
        cancelDescription:
          description: Description of the cancellation reason in free form.
          type: string
          readOnly: true
          maxLength: 255
        billingPortalId:
          type: string
          description: ID of the billing portal.
          default: null
          example: bill_prt_0YV7K5TYV5D1P9ZNKDT39KZC3C
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            changeItemsQuote:
              type: object
            changeItemsInvoice:
              type: object
    StorefrontOneTimeSale:
      type: object
      properties:
        id:
          type: string
          description: ID of the one-time sale.
          readOnly: true
          maxLength: 50
          example: ots_01HRF27SATGE4Z6PBJE6PD8328
        orderType:
          description: |-
            Specifies the type of order.
            An order may be a subscription or a one-time purchase.
          type: string
          enum:
            - subscription-order
            - one-time-order
          default: subscription-order
        billingStatus:
          description: >-
            Billing status of the most recent invoice.

            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:
          type: string
          description: ID of the initial invoice.
          readOnly: true
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        recentInvoiceId:
          type: string
          description: |-
            ID of the most recently issued invoice.
            The invoice might not be `paid` yet.
          readOnly: true
          maxLength: 50
          example: in_0YVF9605RKC62BP14NE2R7V2XT
        items:
          description: Details of items in the order.
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/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
          $ref: '#/components/schemas/ServerTimestamp'
        voidTime:
          description: Date and time when the order is voided.
          $ref: '#/components/schemas/ServerTimestamp'
        abandonTime:
          type:
            - string
            - 'null'
          description: >-
            Date and time when the pending order is automatically abandoned.

            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
        status:
          description: Status of the one-time order.
          type: string
          readOnly: true
          enum:
            - pending
            - abandoned
            - completed
            - canceled
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontOrder:
      type: object
      discriminator:
        propertyName: orderType
        mapping:
          subscription-order: '#/components/schemas/StorefrontSubscription'
          one-time-order: '#/components/schemas/StorefrontOneTimeSale'
      properties:
        orderType:
          description: |-
            Specifies the type of order.
            An order may be a subscription or a one-time purchase.
          type: string
          enum:
            - subscription-order
            - one-time-order
    PostSubscriptionItemsChange:
      type: object
      description: Change customer subscription items.
      properties:
        effectiveTime:
          type: string
          description: Effective time when changes are applied.
          default: now
          enum:
            - now
            - next-service-period
            - auto
          x-enumDescriptions:
            now: Apply changes immediately.
            next-service-period: Apply changes at the beginning of next service period.
            auto: >-
              Apply changes at the beginning of next service period in case of a
              downgrade, and immediately in case of an upgrade.
        items:
          type: array
          description: Details of items in the subscription.
          minItems: 1
          items:
            type: object
            required:
              - planId
            properties:
              planId:
                type: string
                description: ID of the plan.
                maxLength: 50
                example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
              quantity:
                description: Number of units of the product on the given plan.
                type: integer
                minimum: 0
        preview:
          description: |-
            Specifies if the quote must be previewed before it is created.
            Subscriptions cannot be changed in the preview.
          type: boolean
          default: false
          example: true
        autopay:
          description: >-
            Specifies if payment attempts for the related subscription 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: false
          example: true
        includeNextPeriod:
          description: >-
            Specifies if next service period amount must be included in the
            quote.

            This is applicable only for `trial-only` active subscriptions.
          type: boolean
          default: true
          example: true
    StorefrontQuoteChangeOrder:
      type: object
      properties:
        id:
          readOnly: true
          description: ID of the quote.
          type: string
          maxLength: 50
          example: qt_01HXBZMEGPETPHJZH6V4RHBMA8
        type:
          description: |-
            Specifies the type of the quote.
            A quote can be a subscription or a one-time purchase.
          type: string
          readOnly: true
          enum:
            - subscription-order
            - one-time-order
        action:
          description: >-
            Action of the quote for change order items.

            When a quote is accepted, quote items are applied to the related
            order.
          type: string
          enum:
            - change
          example: change
        acceptanceConditions:
          type: array
          writeOnly: true
          description: >-
            Conditions that must be met for the quote to be automatically
            accepted.
          items:
            type: string
            enum:
              - customer
              - payment
            x-enumDescriptions:
              customer: Quote can be accepted by customer.
              payment: Related invoice must be paid in full.
          example:
            - payment
          default:
            - customer
        acceptanceFulfillment:
          type: array
          readOnly: true
          description: List of `acceptanceConditions` with fulfillment status.
          items:
            type: object
            properties:
              condition:
                type: string
                enum:
                  - customer
                  - payment
                  - organization
              isFulfilled:
                type: boolean
        subscriptionId:
          description: ID of the related subscription.
          readOnly: true
          type: string
          maxLength: 50
          example: sub_01HRF27SATGE4Z6PBJE6PD8328
        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 the related order item changes are
              applied.
            rejected: Customer rejected the quote.
            canceled: Organization canceled the quote.
            expired: Expired before customer or organization interaction.
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        items:
          type: array
          description: Items included in the quote.
          minItems: 1
          items:
            type: object
            required:
              - plan
              - quantity
            properties:
              id:
                description: ID of the quote item.
                readOnly: true
                type: string
                example: qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY
              quantity:
                description: Number of product units in the specified plan.
                type: integer
                minimum: 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:
                type:
                  - object
                  - 'null'
                default: null
                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 fired.

                      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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
                  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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
              createdTime:
                $ref: '#/components/schemas/CreatedTime'
              updatedTime:
                $ref: '#/components/schemas/UpdatedTime'
              _embedded:
                type: object
                description: >-
                  Embedded objects that are requested by the `expand` query
                  parameter.
                readOnly: true
                properties:
                  product:
                    type: object
        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 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 subscription 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.
        usageSettings:
          type: array
          default: []
          description: Usage settings for items with metered billing.
          items:
            type: object
            properties:
              planId:
                type: string
                description: ID of the plan from which usages are transferred.
                example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
              policy:
                type: string
                enum:
                  - reset
                  - transfer
                description: Policy for removed items that have a metered billing plan.
                x-enumDescriptions:
                  reset: Delete existing usages.
                  transfer: >-
                    Transfer usages from removed plans to existing plans that
                    are in the same subscription, using the `transferTo` field.
              transferTo:
                type:
                  - string
                  - 'null'
                default: null
                description: >-
                  ID of the plan to which usages are transferred.

                  If an item with a specified plan does not exist, or does not
                  have a metered billing plan, this transfer is ignored.
                example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
        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
        shipping:
          $ref: '#/components/schemas/Shipping'
        tax:
          $ref: '#/components/schemas/Taxes'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: >-
                  Type of link.

                  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
                  - invoicePaymentFormUrl
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            customer:
              type: object
            website:
              type: object
            subscription:
              type: object
            invoice:
              type: object
    StorefrontQuoteTrialConversionOrder:
      type: object
      properties:
        id:
          readOnly: true
          description: ID of the quote.
          type: string
          maxLength: 50
          example: qt_01HXBZMEGPETPHJZH6V4RHBMA8
        type:
          description: |-
            Specifies the type of the quote.
            A quote can be a subscription or a one-time purchase.
          type: string
          readOnly: true
          enum:
            - subscription-order
            - one-time-order
        action:
          description: |-
            Action of the quote for an ended trial-only subscription.
            When a quote is accepted, the related order is activated.
          type: string
          enum:
            - trial-only-conversion
          example: trial-only-conversion
        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
        subscriptionId:
          description: ID of the related subscription.
          readOnly: true
          type: string
          maxLength: 50
          example: sub_01HRF27SATGE4Z6PBJE6PD8328
        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 canceled the quote.
            expired: Expired before customer or organization interaction.
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        items:
          type: array
          description: Items included in the quote.
          minItems: 1
          items:
            type: object
            required:
              - plan
              - quantity
            properties:
              id:
                description: ID of the quote item.
                readOnly: true
                type: string
                example: qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY
              quantity:
                description: Number of product units in the specified plan.
                type: integer
                minimum: 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:
                type:
                  - object
                  - 'null'
                default: null
                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 fired.

                      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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
                  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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
              createdTime:
                $ref: '#/components/schemas/CreatedTime'
              updatedTime:
                $ref: '#/components/schemas/UpdatedTime'
              _embedded:
                type: object
                description: >-
                  Embedded objects that are requested by the `expand` query
                  parameter.
                readOnly: true
                properties:
                  product:
                    type: object
        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
        shipping:
          $ref: '#/components/schemas/Shipping'
        tax:
          $ref: '#/components/schemas/Taxes'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: >-
                  Type of link.

                  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
                  - 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
    StorefrontChangeOrderItems:
      discriminator:
        propertyName: action
        mapping:
          change: '#/components/schemas/StorefrontQuoteChangeOrder'
          trial-only-conversion: '#/components/schemas/StorefrontQuoteTrialConversionOrder'
      oneOf:
        - $ref: '#/components/schemas/StorefrontQuoteChangeOrder'
        - $ref: '#/components/schemas/StorefrontQuoteTrialConversionOrder'
    PostSubscriptionReactivation:
      type: object
      description: Reactivate customer subscription.
      required:
        - orderId
      properties:
        orderId:
          type: string
          description: ID of the order associated with the reactivation quote.
          example: ord_01HVKA5975PJBSQ1SX72G3MSZC
        items:
          type: array
          description: Details of items in the subscription.
          minItems: 1
          items:
            type: object
            required:
              - planId
            properties:
              planId:
                type: string
                description: ID of the plan.
                maxLength: 50
                example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
              quantity:
                description: Number of units of the product on the given plan.
                type: integer
                minimum: 0
        preview:
          description: |-
            Specifies if the quote must be previewed before it is created.
            Subscriptions cannot be reactivated in the preview.
          type: boolean
          default: false
          example: true
    StorefrontQuoteReactivateOrder:
      type: object
      properties:
        id:
          readOnly: true
          description: ID of the quote.
          type: string
          maxLength: 50
          example: qt_01HXBZMEGPETPHJZH6V4RHBMA8
        type:
          description: |-
            Specifies the type of the quote.
            A quote can be a subscription or a one-time purchase.
          type: string
          readOnly: true
          enum:
            - subscription-order
            - one-time-order
        action:
          description: >-
            Action of the quote for churned or canceled order reactivation.

            When a quote is accepted, quote items are applied to the order and
            order is reactivated.
          type: string
          enum:
            - reactivate
          example: reactivate
        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
        subscriptionId:
          description: ID of the related subscription.
          readOnly: true
          type: string
          maxLength: 50
          example: sub_01HRF27SATGE4Z6PBJE6PD8328
        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 the related order is reactivated.
            rejected: Customer rejected the quote.
            canceled: Organization canceled the quote.
            expired: Expired before customer or organization interaction.
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        items:
          type: array
          description: Items included in the quote.
          minItems: 1
          items:
            type: object
            required:
              - plan
              - quantity
            properties:
              id:
                description: ID of the quote item.
                readOnly: true
                type: string
                example: qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY
              quantity:
                description: Number of product units in the specified plan.
                type: integer
                minimum: 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:
                type:
                  - object
                  - 'null'
                default: null
                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 fired.

                      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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
                  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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
              createdTime:
                $ref: '#/components/schemas/CreatedTime'
              updatedTime:
                $ref: '#/components/schemas/UpdatedTime'
              _embedded:
                type: object
                description: >-
                  Embedded objects that are requested by the `expand` query
                  parameter.
                readOnly: true
                properties:
                  product:
                    type: object
        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
            - 'null'
          format: date-time
        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
            - 'null'
          format: date-time
        paymentInstrumentId:
          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
        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
        shipping:
          $ref: '#/components/schemas/Shipping'
        tax:
          $ref: '#/components/schemas/Taxes'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: >-
                  Type of link.

                  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
                  - invoicePaymentFormUrl
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            customer:
              type: object
            website:
              type: object
            subscription:
              type: object
            invoice:
              type: object
    PaymentInstructionsToken:
      type: object
      title: Payment Token
      required:
        - token
      properties:
        token:
          description: ID of the payment token.
          type: string
    PaymentInstructionsInstrument:
      type: object
      title: Payment instrument
      required:
        - paymentInstrumentId
      properties:
        paymentInstrumentId:
          type: string
          description: ID of the payment instrument.
          maxLength: 50
          example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
    StorefrontTransactionRedirectUrl:
      type:
        - string
        - 'null'
      description: >-
        URL to redirect the end-user when an offsite transaction is completed.

        If `website.url` is `https://example.com`, then the `redirectUrl` could
        be set to any of these:


        - `https://example.com`


        - `https://example.com/some/path`


        - `https://example.com/some/path?and=query`


        - `https://example.com/some/path?and=query#and-fragment`


        Defaults to the website URL.

        You may use `{id}` or `{result}` as placeholders in the URL and we
        replace them with the transaction id and result accordingly.
      format: uri
      writeOnly: true
    StorefrontPaymentCard:
      type: object
      description: Payment card information.
      title: Payment card
      properties:
        id:
          description: ID of the payment instrument.
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        method:
          description: Method of payment instrument.
          type: string
          readOnly: true
          enum:
            - payment-card
        status:
          type: string
          description: >-
            Status of the payment instrument.

            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](https://www.rebilly.com/catalog/all/storefront-payment-instruments/storefrontpostpaymentinstrumentdeactivation).
          enum:
            - active
            - inactive
            - expired
            - deactivated
            - verification-needed
        fingerprint:
          description: |-
            Unique value that is used to identify the payment instrument.
            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
          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'
        token:
          description: |-
            New customer JSON Web Token (JWT) that is used for further requests.
            This value is null if the customer is already authenticated.
          type:
            - string
            - 'null'
          readOnly: true
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontBankAccount:
      type: object
      title: Bank account
      properties:
        id:
          description: ID of the payment instrument.
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        method:
          description: Method of payment instrument.
          type: string
          readOnly: true
          enum:
            - ach
        bankName:
          description: Name of the bank.
          type: string
        routingNumber:
          description: Bank routing number.
          type: string
        accountNumberType:
          description: >-
            Type of bank account number.

            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
        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
        useAsBackup:
          $ref: '#/components/schemas/UseAsBackup'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        token:
          description: |-
            New customer JSON Web Token (JWT) that is used for further requests.
            This value is null if the customer is already authenticated.
          type:
            - string
            - 'null'
          readOnly: true
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontPayPalAccount:
      type: object
      title: PayPal account
      properties:
        id:
          description: ID of the payment instrument.
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        method:
          description: Method of payment instrument.
          type: string
          enum:
            - paypal
        billingAddress:
          description: Billing address.
          $ref: '#/components/schemas/ContactObject'
        username:
          description: PayPal username.
          type: string
          readOnly: true
        status:
          description: PayPal account status.
          type: string
          readOnly: true
          enum:
            - inactive
            - active
            - deactivated
        useAsBackup:
          $ref: '#/components/schemas/UseAsBackup'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        token:
          description: |-
            New customer JSON Web Token (JWT) that is used for further requests.
            This value is null if the customer is already authenticated.
          type:
            - string
            - 'null'
          readOnly: true
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontKhelocardCard:
      type: object
      title: Khelocard card
      properties:
        id:
          description: ID of the payment instrument.
          $ref: '#/components/schemas/ResourceId'
        method:
          description: Method of payment instrument.
          type: string
          enum:
            - Khelocard
        fingerprint:
          description: >-
            Unique value which identifies the payment instrument.

            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'
        token:
          description: |-
            New customer JSON Web Token (JWT) that is used for further requests.
            This value is null if the customer is already authenticated.
          type:
            - string
            - 'null'
          readOnly: true
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontAlternativeInstrument:
      type: object
      title: Alternative instrument
      properties:
        id:
          description: ID of the payment instrument.
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        method:
          description: Payment method of the payment instrument.
          allOf:
            - $ref: '#/components/schemas/AlternativePaymentMethods'
            - not:
                enum:
                  - payment-card
                  - paypal
                  - ach
                  - echeck
                  - Khelocard
        billingAddress:
          description: >-
            Billing address of the user that is associated with the payment
            instrument.
          $ref: '#/components/schemas/ContactObject'
        status:
          description: Payment instrument status.
          type: string
          readOnly: true
          enum:
            - active
            - deactivated
        useAsBackup:
          $ref: '#/components/schemas/UseAsBackup'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        token:
          description: |-
            New customer JSON Web Token (JWT) that is used for further requests.
            This value is null if the customer is already authenticated.
          type:
            - string
            - 'null'
          readOnly: true
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontPaymentInstrument:
      oneOf:
        - $ref: '#/components/schemas/StorefrontPaymentCard'
        - $ref: '#/components/schemas/StorefrontBankAccount'
        - $ref: '#/components/schemas/StorefrontPayPalAccount'
        - $ref: '#/components/schemas/StorefrontKhelocardCard'
        - $ref: '#/components/schemas/StorefrontAlternativeInstrument'
    StorefrontPayoutRequest:
      type: object
      properties:
        id:
          type: string
          readOnly: true
          description: Unique resource ID.
          maxLength: 50
          example: pout_req_0YVDMDE2BMC6KBB5MX76RF6T80
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        paymentInstrumentId:
          type: string
          description: ID of the requested payment instrument to offer for the payout.
          maxLength: 50
          example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
        currency:
          description: Currency of the payout.
          $ref: '#/components/schemas/CurrencyCode'
        amount:
          description: Amount of the payout.
          type: number
          format: double
        status:
          description: Status of the request.
          type: string
          readOnly: true
          enum:
            - pending
            - partially-fulfilled
            - fulfilled
          x-enumDescriptions:
            pending: Request 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.
        createdTime:
          description: Date and time when the payout request is created.
          $ref: '#/components/schemas/ServerTimestamp'
        updatedTime:
          description: Date and time when the payout request is updated.
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - paymentInstrument
    StorefrontPlan:
      type: object
      required:
        - name
        - currency
        - productId
        - pricing
      properties:
        id:
          type: string
          description: ID of the plan.
          maxLength: 50
          example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
        name:
          description: |-
            Name of the plan.
            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.
        richDescription:
          type: string
          description: >-
            Rich-text description of the plan.

            This field accepts rich text formatting, such as: bold, underline,
            italic, and hyperlinks.
        productId:
          type: string
          description: ID of the related product.
          maxLength: 50
          example: prod_0YV7DES3WPC5J8JD8QTVNZBZNZ
        productOptions:
          type:
            - object
            - 'null'
          description: Name-value pairs that specify the product options.
          additionalProperties:
            type: string
          example:
            color: red
            size: xxl
        currency:
          $ref: '#/components/schemas/CurrencyCode'
        currencySign:
          description: Currency sign.
          readOnly: true
          type: string
        pricing:
          $ref: '#/components/schemas/PlanPriceFormula'
        setup:
          $ref: '#/components/schemas/PlanSetup'
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        isActive:
          type: boolean
          description: Specifies if the plan is active.
          default: true
        revision:
          type: integer
          readOnly: true
          description: >-
            Number of times the plan is modified.

            Compare this value with materialized subscription item revision
            values.
        trial:
          type:
            - object
            - 'null'
          description: |-
            Trial configuration setting.
            If you do not want to offer a trial, set this value to `null`.
          required:
            - price
            - period
          properties:
            price:
              description: |-
                Price of the trial.
                For a free trial, set this value to `0`.
              type: number
              format: double
            period:
              type: object
              description: Period information.
              required:
                - unit
                - length
              properties:
                unit:
                  description: Unit of time.
                  type: string
                  enum:
                    - day
                    - week
                    - month
                    - year
                length:
                  description: Length of time.
                  type: integer
                  minimum: 1
        meteredBilling:
          type:
            - object
            - 'null'
          required:
            - strategy
          description: >-
            Use metered billing when an exact quantity is unknown.

            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
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            product:
              type: object
        _links:
          type: array
          description: Related links.
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: Type of link.
                type: string
                enum:
                  - self
                  - attachments
    StorefrontProduct:
      type: object
      required:
        - name
      description: >-
        Products are the items that your business sells.

        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
        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
        customFields:
          $ref: '#/components/schemas/ResourceCustomFields'
        createdTime:
          $ref: '#/components/schemas/CreatedTime'
        updatedTime:
          $ref: '#/components/schemas/UpdatedTime'
        _links:
          $ref: '#/components/schemas/SelfLink'
    StorefrontPurchase:
      type: object
      required:
        - websiteId
        - paymentInstruction
        - items
      properties:
        orderId:
          description: ID of the order.
          readOnly: true
          $ref: '#/components/schemas/ResourceId'
        invoice:
          description: Initial invoice.
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/StorefrontInvoice'
        transaction:
          description: Initial transaction.
          readOnly: true
          allOf:
            - $ref: '#/components/schemas/StorefrontTransaction'
        token:
          description: >-
            Session token that is used for authentication.

            This token can be used to view the created order, invoice, and
            transaction.
          type: string
          readOnly: true
        websiteId:
          writeOnly: true
          allOf:
            - $ref: '#/components/schemas/WebsiteId'
        items:
          type: array
          writeOnly: true
          minItems: 1
          items:
            type: object
            required:
              - planId
            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'
        shippingRateId:
          description: |-
            ID of the shipping rate. If this value is not set,
            the cheapest applicable shipping rate is chosen.
          writeOnly: true
          $ref: '#/components/schemas/ResourceId'
        paymentInstruction:
          description: Payment instruction for the purchase.
          writeOnly: true
          allOf:
            - $ref: '#/components/schemas/PaymentInstruction'
        couponIds:
          type: array
          description: List of coupons that are applied to the order.
          writeOnly: true
          items:
            type: string
        password:
          type:
            - string
            - 'null'
          description: |-
            Customer account password.
            If this value is set, it is used to create a customer account.
          writeOnly: true
        redirectUrl:
          type:
            - string
            - 'null'
          description: >-
            URL to redirect the end-user when an offsite transaction is
            completed.

            If `website.url` is `https://example.com`,

            then the `redirectUrl` can be set to one the following:


            - `https://example.com`


            - `https://example.com/some/path`


            - `https://example.com/some/path?and=query`


            - `https://example.com/some/path?and=query#and-fragment`


            This field defaults to the configured website URL.

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

            These placeholders are replaced with the transaction ID and result.
          format: uri
          writeOnly: true
        poNumber:
          description: Purchase order number that is displayed on the invoice.
          type:
            - string
            - 'null'
          example: PO123456
        customFields:
          type: object
          description: Custom fields copied to resources.
          writeOnly: true
          properties:
            customers:
              $ref: '#/components/schemas/ResourceCustomFields'
            subscriptions:
              $ref: '#/components/schemas/ResourceCustomFields'
            transactions:
              $ref: '#/components/schemas/ResourceCustomFields'
    StorefrontOrderPreview:
      type: object
      required:
        - websiteId
        - items
      properties:
        websiteId:
          writeOnly: true
          allOf:
            - $ref: '#/components/schemas/WebsiteId'
        items:
          description: Items details.
          type: array
          writeOnly: true
          minItems: 1
          items:
            type: object
            required:
              - planId
            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
        shippingRateId:
          description: |-
            ID of the shipping rate.
            If unset the cheapest applicable shipping rate is chosen.
          writeOnly: true
          $ref: '#/components/schemas/ResourceId'
        billingPortalId:
          description: ID of the billing portal to validate items against.
    StorefrontQuoteCreateOrder:
      type: object
      properties:
        id:
          readOnly: true
          description: ID of the quote.
          type: string
          maxLength: 50
          example: qt_01HXBZMEGPETPHJZH6V4RHBMA8
        type:
          description: |-
            Specifies the type of the quote.
            A quote can be a subscription or a one-time purchase.
          type: string
          readOnly: true
          enum:
            - subscription-order
            - one-time-order
        action:
          description: >-
            Action of the quote.

            When a quote is accepted, a new order is created.

            The `subscriptionId` value is filled with a new generated value from
            the order.
          type: string
          enum:
            - create
          example: create
        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
        subscriptionId:
          description: ID of the related subscription or one-time purchase.
          readOnly: true
          type:
            - string
            - 'null'
          maxLength: 50
        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 canceled the quote.
            expired: Expired before customer or organization interaction.
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        customerId:
          $ref: '#/components/schemas/CustomerId'
        items:
          type: array
          description: Items included in the quote.
          minItems: 1
          items:
            type: object
            required:
              - plan
              - quantity
            properties:
              id:
                description: ID of the quote item.
                readOnly: true
                type: string
                example: qt_itm_01HXCEQNR3F1G2A6RX6HPS3KFY
              quantity:
                description: Number of product units in the specified plan.
                type: integer
                minimum: 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:
                type:
                  - object
                  - 'null'
                default: null
                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 fired.

                      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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
                  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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
              createdTime:
                $ref: '#/components/schemas/CreatedTime'
              updatedTime:
                $ref: '#/components/schemas/UpdatedTime'
              _embedded:
                type: object
                description: >-
                  Embedded objects that are requested by the `expand` query
                  parameter.
                readOnly: true
                properties:
                  product:
                    type: object
        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
        shipping:
          $ref: '#/components/schemas/Shipping'
        tax:
          $ref: '#/components/schemas/Taxes'
        _links:
          type: array
          description: Related links.
          readOnly: true
          items:
            type: object
            properties:
              href:
                description: Link URL.
                type: string
              rel:
                description: >-
                  Type of link.

                  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
                  - invoicePaymentFormUrl
        _embedded:
          type: object
          description: Embedded objects that are requested by the `expand` query parameter.
          readOnly: true
          properties:
            customer:
              type: object
            website:
              type: object
            subscription:
              type: object
            invoice:
              type: object
    StorefrontQuote:
      discriminator:
        propertyName: action
        mapping:
          create: '#/components/schemas/StorefrontQuoteCreateOrder'
          change: '#/components/schemas/StorefrontQuoteChangeOrder'
          reactivate: '#/components/schemas/StorefrontQuoteReactivateOrder'
          trial-only-conversion: '#/components/schemas/StorefrontQuoteTrialConversionOrder'
      oneOf:
        - $ref: '#/components/schemas/StorefrontQuoteCreateOrder'
        - $ref: '#/components/schemas/StorefrontQuoteChangeOrder'
        - $ref: '#/components/schemas/StorefrontQuoteReactivateOrder'
        - $ref: '#/components/schemas/StorefrontQuoteTrialConversionOrder'
    ReadyToPayout:
      type: object
      required:
        - websiteId
        - amount
        - currency
        - riskMetadata
      properties:
        websiteId:
          $ref: '#/components/schemas/WebsiteId'
        billingAddress:
          description: Billing address.
          writeOnly: true
          allOf:
            - $ref: '#/components/schemas/ContactObject'
        riskMetadata:
          $ref: '#/components/schemas/RiskMetadata'
        currency:
          $ref: '#/components/schemas/CurrencyCode'
        amount:
          description: Amount to payout.
          type: number
          format: double
    ReadyToPayoutMethodFilters:
      type: array
      description: >-
        For the method to be applicable, one or more of the following filters
        must match.

        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
    ReadyToPayoutPaymentCardMethod:
      type: object
      title: Payment card
      required:
        - method
      properties:
        method:
          type: string
          description: Payment method.
          enum:
            - payment-card
        brands:
          type: array
          description: List of supported brands.
          minItems: 1
          items:
            $ref: '#/components/schemas/PaymentCardBrand'
        filters:
          $ref: '#/components/schemas/ReadyToPayoutMethodFilters'
    ReadyToPayoutGenericMethod:
      type: object
      title: Generic
      required:
        - method
      properties:
        method:
          $ref: '#/components/schemas/AlternativePaymentMethods'
        filters:
          $ref: '#/components/schemas/ReadyToPayoutMethodFilters'
    ReadyToPayoutMethods:
      type: object
      discriminator:
        propertyName: method
        mapping:
          payment-card: '#/components/schemas/ReadyToPayoutPaymentCardMethod'
          ach: '#/components/schemas/ReadyToPayoutGenericMethod'
          cash: '#/components/schemas/ReadyToPayoutGenericMethod'
          check: '#/components/schemas/ReadyToPayoutGenericMethod'
          paypal: '#/components/schemas/ReadyToPayoutGenericMethod'
          AdvCash: '#/components/schemas/ReadyToPayoutGenericMethod'
          Alfa-click: '#/components/schemas/ReadyToPayoutGenericMethod'
          Alipay: '#/components/schemas/ReadyToPayoutGenericMethod'
          AstroPay Card: '#/components/schemas/ReadyToPayoutGenericMethod'
          AstroPay-GO: '#/components/schemas/ReadyToPayoutGenericMethod'
          BankReferenced: '#/components/schemas/ReadyToPayoutGenericMethod'
          bank-transfer: '#/components/schemas/ReadyToPayoutGenericMethod'
          bank-transfer-2: '#/components/schemas/ReadyToPayoutGenericMethod'
          bank-transfer-3: '#/components/schemas/ReadyToPayoutGenericMethod'
          bank-transfer-4: '#/components/schemas/ReadyToPayoutGenericMethod'
          bank-transfer-5: '#/components/schemas/ReadyToPayoutGenericMethod'
          bank-transfer-6: '#/components/schemas/ReadyToPayoutGenericMethod'
          bank-transfer-7: '#/components/schemas/ReadyToPayoutGenericMethod'
          bank-transfer-8: '#/components/schemas/ReadyToPayoutGenericMethod'
          bank-transfer-9: '#/components/schemas/ReadyToPayoutGenericMethod'
          Baloto: '#/components/schemas/ReadyToPayoutGenericMethod'
          Beeline: '#/components/schemas/ReadyToPayoutGenericMethod'
          Belfius-direct-net: '#/components/schemas/ReadyToPayoutGenericMethod'
          bitcoin: '#/components/schemas/ReadyToPayoutGenericMethod'
          Bizum: '#/components/schemas/ReadyToPayoutGenericMethod'
          Boleto: '#/components/schemas/ReadyToPayoutGenericMethod'
          cash-deposit: '#/components/schemas/ReadyToPayoutGenericMethod'
          CASHlib: '#/components/schemas/ReadyToPayoutGenericMethod'
          CashToCode: '#/components/schemas/ReadyToPayoutGenericMethod'
          China UnionPay: '#/components/schemas/ReadyToPayoutGenericMethod'
          Cleo: '#/components/schemas/ReadyToPayoutGenericMethod'
          CODVoucher: '#/components/schemas/ReadyToPayoutGenericMethod'
          Conekta-oxxo: '#/components/schemas/ReadyToPayoutGenericMethod'
          Cupon-de-pagos: '#/components/schemas/ReadyToPayoutGenericMethod'
          cryptocurrency: '#/components/schemas/ReadyToPayoutGenericMethod'
          domestic-cards: '#/components/schemas/ReadyToPayoutGenericMethod'
          echeck: '#/components/schemas/ReadyToPayoutGenericMethod'
          ecoPayz: '#/components/schemas/ReadyToPayoutGenericMethod'
          ecoVoucher: '#/components/schemas/ReadyToPayoutGenericMethod'
          Efecty: '#/components/schemas/ReadyToPayoutGenericMethod'
          EPS: '#/components/schemas/ReadyToPayoutGenericMethod'
          ePay.bg: '#/components/schemas/ReadyToPayoutGenericMethod'
          eZeeWallet: '#/components/schemas/ReadyToPayoutGenericMethod'
          FasterPay: '#/components/schemas/ReadyToPayoutGenericMethod'
          Flexepin: '#/components/schemas/ReadyToPayoutGenericMethod'
          Giropay: '#/components/schemas/ReadyToPayoutGenericMethod'
          Gpaysafe: '#/components/schemas/ReadyToPayoutGenericMethod'
          Google Pay: '#/components/schemas/ReadyToPayoutGenericMethod'
          iDebit: '#/components/schemas/ReadyToPayoutGenericMethod'
          iDEAL: '#/components/schemas/ReadyToPayoutGenericMethod'
          ING-homepay: '#/components/schemas/ReadyToPayoutGenericMethod'
          INOVAPAY-pin: '#/components/schemas/ReadyToPayoutGenericMethod'
          INOVAPAY-wallet: '#/components/schemas/ReadyToPayoutGenericMethod'
          InstaDebit: '#/components/schemas/ReadyToPayoutGenericMethod'
          instant-bank-transfer: '#/components/schemas/ReadyToPayoutGenericMethod'
          InstantPayments: '#/components/schemas/ReadyToPayoutGenericMethod'
          Interac: '#/components/schemas/ReadyToPayoutGenericMethod'
          Interac-online: '#/components/schemas/ReadyToPayoutGenericMethod'
          Interac-eTransfer: '#/components/schemas/ReadyToPayoutGenericMethod'
          invoice: '#/components/schemas/ReadyToPayoutGenericMethod'
          iWallet: '#/components/schemas/ReadyToPayoutGenericMethod'
          Jeton: '#/components/schemas/ReadyToPayoutGenericMethod'
          jpay: '#/components/schemas/ReadyToPayoutGenericMethod'
          Khelocard: '#/components/schemas/ReadyToPayoutGenericMethod'
          Klarna: '#/components/schemas/ReadyToPayoutGenericMethod'
          KNOT: '#/components/schemas/ReadyToPayoutGenericMethod'
          loonie: '#/components/schemas/ReadyToPayoutGenericMethod'
          Matrix: '#/components/schemas/ReadyToPayoutGenericMethod'
          MaxiCash: '#/components/schemas/ReadyToPayoutGenericMethod'
          Megafon: '#/components/schemas/ReadyToPayoutGenericMethod'
          MiFinity-eWallet: '#/components/schemas/ReadyToPayoutGenericMethod'
          miscellaneous: '#/components/schemas/ReadyToPayoutGenericMethod'
          Bancontact: '#/components/schemas/ReadyToPayoutGenericMethod'
          Bancontact-mobile: '#/components/schemas/ReadyToPayoutGenericMethod'
          MTS: '#/components/schemas/ReadyToPayoutGenericMethod'
          MuchBetter: '#/components/schemas/ReadyToPayoutGenericMethod'
          Multibanco: '#/components/schemas/ReadyToPayoutGenericMethod'
          Neosurf: '#/components/schemas/ReadyToPayoutGenericMethod'
          Netbanking: '#/components/schemas/ReadyToPayoutGenericMethod'
          Neteller: '#/components/schemas/ReadyToPayoutGenericMethod'
          Nordea-Solo: '#/components/schemas/ReadyToPayoutGenericMethod'
          OchaPay: '#/components/schemas/ReadyToPayoutGenericMethod'
          online-bank-transfer: '#/components/schemas/ReadyToPayoutGenericMethod'
          Onlineueberweisen: '#/components/schemas/ReadyToPayoutGenericMethod'
          oriental-wallet: '#/components/schemas/ReadyToPayoutGenericMethod'
          OXXO: '#/components/schemas/ReadyToPayoutGenericMethod'
          P24: '#/components/schemas/ReadyToPayoutGenericMethod'
          Pagadito: '#/components/schemas/ReadyToPayoutGenericMethod'
          PagoEffectivo: '#/components/schemas/ReadyToPayoutGenericMethod'
          Pagsmile-deposit-express: '#/components/schemas/ReadyToPayoutGenericMethod'
          Pagsmile-lottery: '#/components/schemas/ReadyToPayoutGenericMethod'
          PayCash: '#/components/schemas/ReadyToPayoutGenericMethod'
          Payeer: '#/components/schemas/ReadyToPayoutGenericMethod'
          PaymentAsia-crypto: '#/components/schemas/ReadyToPayoutGenericMethod'
          Paymero: '#/components/schemas/ReadyToPayoutGenericMethod'
          Perfect-money: '#/components/schemas/ReadyToPayoutGenericMethod'
          Piastrix: '#/components/schemas/ReadyToPayoutGenericMethod'
          plaid-account: '#/components/schemas/ReadyToPayoutGenericMethod'
          PayTabs: '#/components/schemas/ReadyToPayoutGenericMethod'
          Paysafecard: '#/components/schemas/ReadyToPayoutGenericMethod'
          Paysafecash: '#/components/schemas/ReadyToPayoutGenericMethod'
          Pay4Fun: '#/components/schemas/ReadyToPayoutGenericMethod'
          Paynote: '#/components/schemas/ReadyToPayoutGenericMethod'
          PinPay: '#/components/schemas/ReadyToPayoutGenericMethod'
          PIX: '#/components/schemas/ReadyToPayoutGenericMethod'
          phone: '#/components/schemas/ReadyToPayoutGenericMethod'
          PhonePe: '#/components/schemas/ReadyToPayoutGenericMethod'
          POLi: '#/components/schemas/ReadyToPayoutGenericMethod'
          PostFinance-card: '#/components/schemas/ReadyToPayoutGenericMethod'
          PostFinance-e-finance: '#/components/schemas/ReadyToPayoutGenericMethod'
          QIWI: '#/components/schemas/ReadyToPayoutGenericMethod'
          QPay: '#/components/schemas/ReadyToPayoutGenericMethod'
          QQPay: '#/components/schemas/ReadyToPayoutGenericMethod'
          rapyd-checkout: '#/components/schemas/ReadyToPayoutGenericMethod'
          Resurs: '#/components/schemas/ReadyToPayoutGenericMethod'
          SafetyPay: '#/components/schemas/ReadyToPayoutGenericMethod'
          SEPA: '#/components/schemas/ReadyToPayoutGenericMethod'
          Skrill: '#/components/schemas/ReadyToPayoutGenericMethod'
          Skrill Rapid Transfer: '#/components/schemas/ReadyToPayoutGenericMethod'
          SMSVoucher: '#/components/schemas/ReadyToPayoutGenericMethod'
          Sofort: '#/components/schemas/ReadyToPayoutGenericMethod'
          SparkPay: '#/components/schemas/ReadyToPayoutGenericMethod'
          swift-dbt: '#/components/schemas/ReadyToPayoutGenericMethod'
          Tele2: '#/components/schemas/ReadyToPayoutGenericMethod'
          Terminaly-RF: '#/components/schemas/ReadyToPayoutGenericMethod'
          ToditoCash-card: '#/components/schemas/ReadyToPayoutGenericMethod'
          Trustly: '#/components/schemas/ReadyToPayoutGenericMethod'
          UPayCard: '#/components/schemas/ReadyToPayoutGenericMethod'
          UPI: '#/components/schemas/ReadyToPayoutGenericMethod'
          USD-coin: '#/components/schemas/ReadyToPayoutGenericMethod'
          VCreditos: '#/components/schemas/ReadyToPayoutGenericMethod'
          VenusPoint: '#/components/schemas/ReadyToPayoutGenericMethod'
          voucher: '#/components/schemas/ReadyToPayoutGenericMethod'
          voucher-2: '#/components/schemas/ReadyToPayoutGenericMethod'
          voucher-3: '#/components/schemas/ReadyToPayoutGenericMethod'
          voucher-4: '#/components/schemas/ReadyToPayoutGenericMethod'
          Webmoney: '#/components/schemas/ReadyToPayoutGenericMethod'
          Webpay: '#/components/schemas/ReadyToPayoutGenericMethod'
          Webpay-2: '#/components/schemas/ReadyToPayoutGenericMethod'
          Webpay Card: '#/components/schemas/ReadyToPayoutGenericMethod'
          WeChat Pay: '#/components/schemas/ReadyToPayoutGenericMethod'
          wire: '#/components/schemas/ReadyToPayoutGenericMethod'
          XPay-P2P: '#/components/schemas/ReadyToPayoutGenericMethod'
          XPay-QR: '#/components/schemas/ReadyToPayoutGenericMethod'
          Yandex-money: '#/components/schemas/ReadyToPayoutGenericMethod'
          Zotapay: '#/components/schemas/ReadyToPayoutGenericMethod'
          Zimpler: '#/components/schemas/ReadyToPayoutGenericMethod'
      anyOf:
        - $ref: '#/components/schemas/ReadyToPayoutPaymentCardMethod'
        - $ref: '#/components/schemas/ReadyToPayoutGenericMethod'
    PostSubscription:
      type: object
      required:
        - billingPortalId
        - items
      properties:
        billingPortalId:
          type: string
          description: ID of the billing portal.
          maxLength: 50
          example: bill_prt_0YV7K5TYV5D1P9ZNKDT39KZC3C
        items:
          type: array
          description: Details of items in the order.
          minItems: 1
          items:
            type: object
            required:
              - planId
            properties:
              planId:
                type: string
                description: ID of the plan.
                maxLength: 50
                example: plan_0YV7DENSVGDBW9S71XZNNYYQ0X
              quantity:
                description: Number of units of the product on the given plan.
                type: integer
                minimum: 0
              usageLimits:
                type:
                  - object
                  - 'null'
                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
                      - 'null'
                    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 fired.

                      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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
                  hardLimit:
                    type:
                      - object
                      - 'null'
                    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: 1
                      amount:
                        type: number
                        format: double
                        description: Usage limit amount in the currency of the order.
                        minimum: 0.01
        billingAddress:
          description: Billing address details.
          oneOf:
            - $ref: '#/components/schemas/ContactObject'
            - type: 'null'
        deliveryAddress:
          description: Delivery address details.
          oneOf:
            - $ref: '#/components/schemas/ContactObject'
            - type: 'null'
    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'
    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
                  - nsf-response-received
                  - 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
    NoContent:
      description: Request accepted. No response body returned.
  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'
              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
                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'
                  - '2700'
                  - '2702'
                  - 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
                  - 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
                  - pre-chargeback-alert
                  - product_not_received
                  - product_unacceptable
                  - subscription_canceled
                  - 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
              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
    ApiKey:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ApiKey'
      description: ApiKey resource.
      required: true
    PatchCredential:
      content:
        application/json:
          schema:
            anyOf:
              - $ref: '#/components/schemas/PatchServiceCredential'
              - $ref: '#/components/schemas/PatchPlaidCredential'
              - $ref: '#/components/schemas/PatchTaxJarCredential'
      description: Service credential resource.
      required: true
    RuleSet:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RuleSet'
      description: Ruleset resource.
      required: true
    RuleSetDraft:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/RuleSetDraft'
      description: Draft ruleset resource.
      required: true
    GatewayAccount:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GatewayAccount'
      description: Gateway Account resource.
      required: true
    GatewayAccountDowntimeSchedule:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GatewayAccountDowntimeSchedule'
      description: Gateway Account downtime schedule resource.
      required: true
    GridSegment:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GridSegment'
      description: Segment resource.
      required: true
    PostOrganization:
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/Organization'
              - required:
                  - name
                  - website
                  - country
                  - reportCurrency
      description: Create organization request.
    PatchOrganization:
      content:
        application/json:
          schema:
            allOf:
              - $ref: '#/components/schemas/Organization'
              - properties:
                  website:
                    readOnly: true
                  reportCurrency:
                    readOnly: true
      description: Update Organization Request.
    GlobalWebhook:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/GlobalWebhook'
      description: Webhook resource.
      required: true
    User:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/User'
      description: User resource.
      required: true
    Website:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Website'
      description: Website resource.
      required: true
    DataExport:
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/DataExport'
      description: Data Export Request.
      required: true
    PatchAccountPassword:
      content:
        application/json:
          schema:
            required:
              - currentPassword
              - newPassword
            properties:
              currentPassword:
                type: string
                format: password
                description: >-
                  Current password. This value is used to request a password
                  change.
              newPassword:
                type: string
                format: password
                writeOnly: true
                description: New password. This value replaces the existing password.
    PostDeposit:
      content:
        application/json:
          schema:
            type: object
            required:
              - depositRequestId
              - amount
            properties:
              depositRequestId:
                description: >-
                  ID of the deposit request. The created transaction is based on
                  the properties of this deposit request.
                type: string
                maxLength: 50
                example: 4f6cf35x-2c4y-483z-a0a9-158621f77a21
              amount:
                description: Deposit amount.
                type: number
                format: double
                example: 97.97
              properties:
                description: Properties completed by the user in the deposit form.
                type: object
                additionalProperties:
                  type: string
                example:
                  email: email@example.com
                  max: '33'
      required: true
    PatchInvoice:
      content:
        application/json:
          schema:
            type: object
            properties:
              deliveryAddress:
                description: Invoice delivery address.
                oneOf:
                  - $ref: '#/components/schemas/ContactObject'
                  - type: 'null'
              billingAddress:
                description: Invoice billing address.
                oneOf:
                  - $ref: '#/components/schemas/ContactObject'
                  - type: 'null'
      required: true
    PostKycLivenessSession:
      content:
        application/json:
          schema:
            type: object
            required:
              - kycRequestId
            properties:
              kycRequestId:
                type: string
                description: >-
                  ID of the KYC request that the liveness session is associated
                  with.
                maxLength: 50
                example: kyc_req_0YV7JMJ3DBCGRBR7K9D4HVGPP5
      description: KYC liveness session.
      required: true
    PatchOrder:
      content:
        application/json:
          schema:
            type: object
            properties:
              autopay:
                description: >-
                  Specifies if payment attempts are made automatically.

                  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
              deliveryAddress:
                description: Order delivery address.
                oneOf:
                  - $ref: '#/components/schemas/ContactObject'
                  - type: 'null'
              billingAddress:
                description: Order billing address.
                oneOf:
                  - $ref: '#/components/schemas/ContactObject'
                  - type: 'null'
              usageLimits:
                type: array
                description: Details of items in the order and corresponding usage limits.
                minItems: 1
                items:
                  type: object
                  required:
                    - itemId
                    - limits
                  properties:
                    itemId:
                      type: string
                      description: ID of the subscription item.
                      maxLength: 50
                      example: sub_01HW2V1Y3A6QPM1NX4WCYHFSRS
                    limits:
                      type:
                        - object
                        - 'null'
                      description: >-
                        Specifies the soft and hard usage limit thresholds for
                        an item with a metered billing plan.

                        This value is ignored when the plan is not metered.
                      properties:
                        softLimit:
                          type:
                            - object
                            - 'null'
                          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 fired.

                            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: 1
                            amount:
                              type: number
                              format: double
                              description: Usage limit amount in the currency of the order.
                              minimum: 0.01
                        hardLimit:
                          type:
                            - object
                            - 'null'
                          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: 1
                            amount:
                              type: number
                              format: double
                              description: Usage limit amount in the currency of the order.
                              minimum: 0.01
      description: Order resource.
      required: true
    PostOrderCancellation:
      content:
        application/json:
          schema:
            type: object
            required:
              - reason
            properties:
              reason:
                description: Reason for the order cancellation.
                type: string
                enum:
                  - did-not-use
                  - did-not-want
                  - missing-features
                  - bugs-or-problems
                  - do-not-remember
                  - too-expensive
                  - other
              description:
                description: Description of the cancellation reason in free form.
                type: string
                maxLength: 255
      description: Order resource.
      required: true
    PostOrderPause:
      content:
        application/json:
          schema:
            type: object
            properties:
              description:
                description: Description of the pause reason in free form.
                type:
                  - string
                  - 'null'
                maxLength: 255
              effectiveTime:
                description: >-
                  Date and time when the service period pauses.


                  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
      description: Order resource.
      required: true
    PostPayment:
      content:
        application/json:
          schema:
            oneOf:
              - type: object
                title: For transaction
                required:
                  - transactionId
                properties:
                  transactionId:
                    $ref: '#/components/schemas/TransactionId'
                  riskMetadata:
                    $ref: '#/components/schemas/RiskMetadata'
                  redirectUrl:
                    $ref: '#/components/schemas/StorefrontTransactionRedirectUrl'
                oneOf:
                  - $ref: '#/components/schemas/PaymentInstructionsToken'
                  - $ref: '#/components/schemas/PaymentInstructionsInstrument'
              - type: object
                title: For invoice
                required:
                  - invoiceId
                properties:
                  invoiceId:
                    type: string
                    description: Unique resource ID.
                    maxLength: 50
                    example: in_0YVF9605RKC62BP14NE2R7V2XT
                  riskMetadata:
                    $ref: '#/components/schemas/RiskMetadata'
                  redirectUrl:
                    $ref: '#/components/schemas/StorefrontTransactionRedirectUrl'
                oneOf:
                  - $ref: '#/components/schemas/PaymentInstructionsToken'
                  - $ref: '#/components/schemas/PaymentInstructionsInstrument'
              - type: object
                title: For amount+currency
                required:
                  - amount
                  - currency
                  - websiteId
                properties:
                  websiteId:
                    $ref: '#/components/schemas/WebsiteId'
                  currency:
                    $ref: '#/components/schemas/CurrencyCode'
                  amount:
                    description: Transaction amount.
                    type: number
                    format: double
                    default: 0
                    example: 97.97
                  riskMetadata:
                    $ref: '#/components/schemas/RiskMetadata'
                  redirectUrl:
                    $ref: '#/components/schemas/StorefrontTransactionRedirectUrl'
                oneOf:
                  - $ref: '#/components/schemas/PaymentInstructionsToken'
                  - $ref: '#/components/schemas/PaymentInstructionsInstrument'
      required: true
    StorefrontPostPaymentInstrument:
      content:
        application/json:
          schema:
            type: object
            required:
              - token
            properties:
              token:
                description: Token ID of the payment instrument.
                type: string
              customFields:
                $ref: '#/components/schemas/ResourceCustomFields'
      description: Payment instrument.
      required: true
    StorefrontPatchPaymentInstrument:
      content:
        application/json:
          schema:
            type: object
            properties:
              token:
                description: Token ID of the payment instrument.
                type: string
              billingAddress:
                description: |-
                  Billing address.
                  If this field is supplied,
                  it overrides the billing address obtained from the token.
                $ref: '#/components/schemas/ContactObject'
              customFields:
                $ref: '#/components/schemas/ResourceCustomFields'
      description: Payment instrument.
      required: true
    SetupPaymentInstrumentRequest:
      content:
        application/json:
          schema:
            type: object
            required:
              - websiteId
              - currency
            properties:
              websiteId:
                $ref: '#/components/schemas/WebsiteId'
              currency:
                $ref: '#/components/schemas/CurrencyCode'
              amount:
                description: Amount of the transaction.
                type: number
                format: double
                default: 0
                example: 97.97
              billingAddress:
                description: >-
                  Billing address.

                  If a billing address is not supplied the address associated
                  with the payment instrument is used.

                  If no address is associated with the payment instrument,

                  the customer's address is used.
                oneOf:
                  - $ref: '#/components/schemas/ContactObject'
                  - type: 'null'
              redirectUrl:
                type:
                  - string
                  - 'null'
                description: >-
                  URL to redirect the end-user when an offsite transaction is
                  completed.

                  This field defaults to the configured website URL.

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

                  These placeholders are replaced with the transaction ID and
                  result.

                  For more information, see
                  [Placeholders](https://www.rebilly.com/docs/automations/email-notifications/#placeholders).
                format: uri
              riskMetadata:
                $ref: '#/components/schemas/RiskMetadata'
      description: Setup transaction resource.
      required: true
    PostRegister:
      content:
        application/json:
          schema:
            allOf:
              - required:
                  - username
                  - password
                properties:
                  username:
                    type: string
                    description: Username.
                  password:
                    type: string
                    format: password
                    description: Password.
                  primaryAddress:
                    $ref: '#/components/schemas/ContactObject'
                  paymentToken:
                    type: string
                    description: >-
                      Write-only payment token;

                      if supplied, it converts into a payment instrument and is
                      set as the `defaultPaymentInstrument`.

                      The value of this property overrides the
                      `defaultPaymentInstrument` in the case that both are
                      supplied.

                      The token may only be used once before it is expired.
                  leadSource:
                    $ref: '#/components/schemas/LeadSourceData'
    ApplicationInstanceDisabled:
      content:
        application/json:
          schema:
            properties:
              organizationId:
                $ref: '#/components/schemas/OrganizationId'
              applicationId:
                type: string
                description: Unique application ID.
                maxLength: 50
                example: app_01H0HT25X7XXCJGS4H8VJSYF2Y
              eventType:
                type: string
                description: Type of webhook event.
                enum:
                  - application-instance-disabled
              _embedded:
                description: Embedded objects.
                type: object
                properties:
                  application:
                    $ref: '#/components/schemas/Application'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - application
      description: Application instance disabled webhook request body resource.
    ApplicationInstanceEnabled:
      content:
        application/json:
          schema:
            properties:
              organizationId:
                $ref: '#/components/schemas/OrganizationId'
              applicationId:
                type: string
                description: Unique application ID.
                maxLength: 50
                example: app_01H0HT25X7XXCJGS4H8VJSYF2Y
              eventType:
                type: string
                description: Type of webhook event.
                enum:
                  - application-instance-enabled
              _embedded:
                description: Embedded objects.
                type: object
                properties:
                  application:
                    $ref: '#/components/schemas/Application'
                  applicationInstance:
                    $ref: '#/components/schemas/OwnerApplicationInstance'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - application
                        - applicationInstance
      description: Application instance enabled webhook request body resource.
    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.
    InvoiceRevenueRecognized:
      content:
        application/json:
          schema:
            properties:
              recognitionId:
                description: ID of the recognized revenue.
                type: string
              invoiceId:
                type: string
                description: ID of the invoice.
                maxLength: 50
                example: in_0YVF9605RKC62BP14NE2R7V2XT
              itemId:
                description: ID of the invoice item.
                type: string
              amount:
                description: Amount recognized.
                type: number
                format: double
              currency:
                $ref: '#/components/schemas/CurrencyCode'
              eventType:
                type: string
                description: Type of webhook event.
                enum:
                  - invoice-revenue-recognized
              _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.
    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.
    GatewayAccountWebhook:
      content:
        application/json:
          schema:
            properties:
              gatewayAccountId:
                type: string
                description: ID of the gateway account.
                maxLength: 50
                example: gw_acc_0YVCXMF26DDNKAERE5NW727S34
              eventType:
                type: string
                description: Type of webhook event.
                enum:
                  - gateway-account-downtime-ended
                  - gateway-account-downtime-started
                  - gateway-account-onboarding-completed
                  - gateway-account-onboarding-failed
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  gatewayAccount:
                    $ref: '#/components/schemas/GatewayAccount'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - gatewayAccount
      description: Gateway account limit reached body resource.
    GatewayAccountAndGatewayAccountLimit:
      content:
        application/json:
          schema:
            properties:
              gatewayAccountId:
                type: string
                description: ID of the gateway account.
                maxLength: 50
                example: gw_acc_0YVCXMF26DDNKAERE5NW727S34
              eventType:
                type: string
                description: Type of webhook event.
                enum:
                  - gateway-account-limit-reached
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  gatewayAccount:
                    $ref: '#/components/schemas/GatewayAccount'
                  gatewayAccountLimit:
                    $ref: '#/components/schemas/GatewayAccountLimit'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - gatewayAccount
                        - gatewayAccountLimit
      description: Gateway account limit reached 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
                  - nsf-response-received
                  - 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
              _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.
    DataExportWebhook:
      content:
        application/json:
          schema:
            properties:
              dataExportId:
                type: string
                description: ID of the data export.
                maxLength: 50
                example: exp_0YVCNQ2C1AD1RA3HXKP492GNZB
              fileId:
                type: string
                description: ID of the data export file.
                maxLength: 50
                example: file_0YV7HZ7KDCC5WBV9Q7WRKG1H6N
              eventType:
                type: string
                description: Rebilly webhooks event type.
                enum:
                  - data-export-completed
              _embedded:
                type: object
                description: Embedded objects.
                properties:
                  dataExport:
                    $ref: '#/components/schemas/DataExport'
              _links:
                type: array
                description: Related links.
                items:
                  type: object
                  properties:
                    href:
                      description: Link URL.
                      type: string
                    rel:
                      description: Type of link.
                      type: string
                      enum:
                        - dataExport
                        - download
      description: Data export webhook body 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-a-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/).
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 a Member

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

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

            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'
        '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 Member

            secondCollection.items.forEach(coupon =>
            console.log(coupon.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 Member

            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 Member

            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 Member

            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 Member

            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 Member

            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 Member

            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());
            }
  /external-identifiers:
    get:
      x-products:
        - Users
      tags:
        - External identifiers
      summary: Retrieve external identifiers
      operationId: GetExternalIdentifierCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of external identifiers.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: List of external identifiers retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ExternalIdentifier'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /{resource}/{resourceId}/external-identifiers/{service}:
    parameters:
      - $ref: '#/components/parameters/externalIdentifierResource'
      - $ref: '#/components/parameters/externalIdentifierResourceId'
      - $ref: '#/components/parameters/externalIdentifierService'
    get:
      x-products:
        - Users
      tags:
        - External identifiers
      summary: Retrieve an external identifier
      operationId: GetExternalIdentifier
      x-sdk-operation-name: get
      x-sdk-resource: ExternalIdentifiers
      description: >-
        Retrieves an external identifier with a specified resource, resource ID
        and, service name.
      responses:
        '200':
          description: External identifier retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalIdentifier'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      x-products:
        - Users
      tags:
        - External identifiers
      summary: Sync an external identifier
      operationId: PostExternalIdentifier
      x-sdk-operation-name: sync
      x-sdk-resource: ExternalIdentifiers
      description: >-
        Synchronizes an external identifier with a specified resource, resource
        ID, and service name.
      responses:
        '204':
          description: External identifier sync scheduled.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    put:
      x-products:
        - Users
      tags:
        - External identifiers
      summary: Upsert an external identifier
      operationId: PutExternalIdentifier
      x-sdk-operation-name: update
      x-sdk-resource: ExternalIdentifiers
      description: >-
        Creates or updates an external identifier with a specified resource,
        resource ID, and service name.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalIdentifier'
        required: true
      responses:
        '200':
          description: External identifier updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalIdentifier'
        '201':
          description: External identifier created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalIdentifier'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      x-products:
        - Users
      tags:
        - External identifiers
      summary: Delete an external identifier
      operationId: DeleteExternalIdentifier
      x-sdk-operation-name: delete
      x-sdk-resource: ExternalIdentifiers
      description: >-
        Deletes an external identifier with a specified resource, resource ID,
        and service name.
      responses:
        '204':
          description: External identifier deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /external-services-settings:
    get:
      x-products:
        - Users
      tags:
        - External identifiers
      summary: Retrieve external service settings
      operationId: GetExternalServiceSettings
      x-sdk-operation-name: getExternalServiceSettings
      description: Retrieves external service settings.
      responses:
        '200':
          description: External service settings.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalServiceSettings'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    put:
      x-products:
        - Users
      tags:
        - External identifiers
      summary: Update external service settings
      operationId: PutExternalServiceSettings
      x-sdk-operation-name: updateExternalServiceSettings
      description: Updates the external service settings.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ExternalServiceSettings'
        required: true
      responses:
        '200':
          description: External service settings updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ExternalServiceSettings'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /files:
    get:
      x-products:
        - Core
      tags:
        - Files
      summary: Retrieve files
      operationId: GetFileCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of files.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionFields'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of files retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/File'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $files = $client->files()->search([
                '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 Member

            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'
    get:
      x-products:
        - Users
      tags:
        - Application users
      summary: Retrieve an application instance
      operationId: GetApplicationInstance
      x-sdk-operation-name: get
      description: |-
        Retrieves a list of application instances.
        You may sort applications by: `id`, `name`, `status`, `createdTime`,
        and `updatedTime`.
      responses:
        '200':
          description: Application instance retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstance'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: >
            $applicationInstance =
            $client->applicationInstances()->load('applicationId');
        - lang: JavaScript
          source: >
            const application = await
            api.applicationInstances.get({applicationId: 'applicationId'});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $applicationInstance =
            $service->applicationInstances()->get('applicationId');
    put:
      x-products:
        - Users
      tags:
        - Application users
      summary: Upsert an application instance
      operationId: PutApplicationInstance
      x-sdk-operation-name: upsert
      description: Creates or updates (upserts) an application instance.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationInstance'
      responses:
        '200':
          description: Application instance updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstance'
        '201':
          description: Application instance created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstance'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $applicationInstance = new Rebilly\Entities\ApplicationInstance();
            $applicationInstance->setSettings(['color' => 'red', 'limit' => 5]);

            try {
                $applicationInstance = $client->applicationInstances()->update('applicationId', $applicationInstance);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // define values to upsert

            const data = {
              settings: {
                color: 'red',
                limit: 5,
              },
            };


            const apiKey = await api.applicationInstances.upsert({applicationId:
            'applicationId', data});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $applicationInstance =
            \Rebilly\Sdk\Model\ApplicationInstance::from([
                'settings' => ['color' => 'red', 'limit' => 5],
            ]);


            try {
                $applicationInstance = $service->applicationInstances()->upsert('applicationId', $applicationInstance);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    delete:
      x-products:
        - Users
      tags:
        - Application users
      summary: Delete application instance
      operationId: DeleteApplicationInstance
      x-sdk-operation-name: delete
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Deletes an application instance with a specific ID.
      responses:
        '204':
          description: Application instance deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $client->applicationInstances()->delete('applicationId');
        - lang: JavaScript
          source: >
            const request = await
            api.applicationInstances.delete({applicationId: 'applicationId'});


            // 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->applicationInstances()->delete('applicationId');
  /application-instances/{applicationId}/configuration:
    parameters:
      - $ref: '#/components/parameters/applicationId'
    get:
      x-products:
        - Users
      tags:
        - Application users
      summary: Retrieve an application instance configuration
      operationId: GetApplicationInstanceConfiguration
      x-sdk-operation-name: getConfiguration
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: >-
        Retrieves the configuration of an installed application with a specified
        ID.
      responses:
        '200':
          description: Application instance configuration retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstanceConfiguration'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    put:
      x-products:
        - Users
      tags:
        - Application users
      summary: Upsert an application instance configuration
      operationId: PutApplicationInstanceConfiguration
      x-sdk-operation-name: upsertConfiguration
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Creates or updates (upserts) an application instance configuration.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ApplicationInstanceConfiguration'
      responses:
        '200':
          description: Application instance configuration updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstanceConfiguration'
        '201':
          description: Application instance configuration created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApplicationInstanceConfiguration'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /applications:
    get:
      x-products:
        - Users
      tags:
        - Application users
      summary: Retrieve applications
      operationId: GetApplicationCollection
      x-sdk-operation-name: getAll
      description: |-
        Retrieves a list of all applications.
        You may sort applications by: `id`, `name`, `status`, `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 applications retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/UserApplication'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $applications = $client->applications()->search([
                'filter' => 'status:available',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.applications.getAll();


            // alternatively you can specify one or more of them

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

            const secondCollection = await api.applications.getAll(params);


            // access the collection items, each item is a Member

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


            $applicationsPaginator =
            $service->applications()->getAllPaginator(filter:
            'status:available', limit: 5);

            foreach ($applicationsPaginator as $applicationPage) {
                printf("Applications page %d/%d\n", $applicationsPaginator->key() + 1, $applicationsPaginator->count());
                foreach ($applicationPage as $application) {
                    printf("Application #%s (%s): %s\n", $application->getId(), $application->getStatus(), $application->getName());
                }
            }


            // OR


            $applications = $service->applications()->getAll(filter:
            'status:available');

            foreach ($applications as $application) {
                printf("Application #%s (%s): %s\n", $application->getId(), $application->getStatus(), $application->getName());
            }
    post:
      x-products:
        - Users
      tags:
        - Application owners
      summary: Register an application
      operationId: PostApplication
      x-sdk-operation-name: create
      description: >-
        Registers an application and displays it publicly in the [App
        Store](https://app.rebilly.com/app-store).

        Before you submit an application, read the [App Store
        documentation](https://www.rebilly.com/docs/content/concepts-and-features/app-store/).
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Application'
      responses:
        '201':
          description: Application registered.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Application'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $application = new Rebilly\Entities\Application();
            $application->setName('My application');
            $application->setDescription('My application description');
            $application->setLogoId('fileId');
            $application->setPermissions(['GetTransactionCollection']);

            try {
                $application = $client->applications()->create($application);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: |
            // first set the properties for the new application
            const data = {
                name: 'My application',
                description: 'My application description',
                logoId: 'fileId',
                permissions: ['GetTransactionCollection'],
            };

            const application = await api.applications.create({data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $application = new \Rebilly\Sdk\Model\Application();
            $application->setName('My application');
            $application->setDescription('My application description');
            $application->setLogoId('fileId');
            $application->setPermissions(['GetTransactionCollection']);

            try {
                $application = $service->applications()->create($application);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /applications/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Application users
      summary: Retrieve application
      operationId: GetApplication
      x-sdk-operation-name: get
      description: Retrieves an application with a specified ID.
      responses:
        '200':
          description: Applications retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UserApplication'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $application = $client->applications()->load('applicationId');
        - lang: JavaScript
          source: >
            const application = await api.applications.get({id:
            'applicationId'});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $application = $service->applications()->get('applicationId');
  /applications/{id}/instances:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Application owners
      summary: Retrieve application instances
      operationId: GetApplicationInstanceCollection
      x-sdk-operation-name: getInstances
      description: Retrieves application instances with specified IDs.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Application instances retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OwnerApplicationInstance'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: >
            $applicationInstances =
            $client->applications()->loadInstances('applicationId');
        - lang: JavaScript
          source: >
            const applicationInstances = await
            api.applications.getInstances({id: 'applicationId'});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $applicationInstances =
            $service->applicationInstances()->get('applicationId');
  /applications/{id}/instances/{organizationId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/organizationId'
    get:
      x-products:
        - Users
      tags:
        - Application owners
      summary: Retrieve an application instance
      operationId: GetApplicationInstanceByOrganization
      x-sdk-operation-name: getInstance
      description: >-
        Retrieves an application instance with specified application and
        organization IDs.
      responses:
        '200':
          description: Application instance retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OwnerApplicationInstance'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: >
            $applicationInstance =
            $client->applications()->loadInstance('applicationId',
            'organizationId');
        - lang: JavaScript
          source: >
            const applicationInstance = await api.applications.getInstance({id:
            'applicationId', organizationId: 'organizationId'});
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $applicationInstance =
            $service->applications()->getInstance('applicationId',
            'organizationId');
  /invoices:
    get:
      x-products:
        - Core
      tags:
        - Invoices
      summary: Retrieve invoices
      operationId: GetInvoiceCollection
      x-sdk-operation-name: getAll
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Retrieves a list of invoices.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: List of invoices retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Invoice'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $invoices = $client->invoices()->search([
                '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 a Member

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

            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 Member

            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 Member

            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 Member

            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 Member

            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 Member

            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: GetQuoteTimelineMessage
      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 Member

            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 Member

            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 Member

            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'
        '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'
    put:
      x-products:
        - Core
      tags:
        - Usage
      summary: Upsert a usage record
      operationId: PutUsage
      x-sdk-operation-name: update
      description: Creates or updates a usage record with a specified ID.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Usage'
      responses:
        '200':
          description: Usage 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/Usage'
        '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'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    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 Member

            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 Member

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

            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:
    get:
      x-products:
        - Users
      tags:
        - API keys
      summary: Retrieve API keys
      operationId: GetApiKeyCollection
      x-sdk-operation-name: getAll
      description: Retrieve a list of API keys.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of API keys retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiKey'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $apiKeys = $client->apiKeys()->search([
                'filter' => 'description:Test',
            ]);
        - lang: JavaScript
          source: >-
            // all parameters are optional

            const firstCollection = await api.apiKeys.getAll();


            // alternatively you can specify one or more of them

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

            const secondCollection = await api.apiKeys.getAll(params);


            // access the collection items, each item is a Member

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

            $apiKeysPaginator = $service->apiKeys()->getAllPaginator(limit: 5);
            foreach ($apiKeysPaginator as $apiKeysPage) {
                printf("ApiKeys page %d/%d\n", $apiKeysPaginator->key() + 1, $apiKeysPaginator->count());
                foreach ($apiKeysPage as $apiKey) {
                    printf("ApiKey #%s: %s\n", $apiKey->getId(), $apiKey->getDescription());
                }
            }

            // OR

            $apiKeys = $service->apiKeys()->getAll();
            foreach ($apiKeys as $apiKey) {
                printf("ApiKey #%s: %s\n", $apiKey->getId(), $apiKey->getDescription());
            }
    post:
      x-products:
        - Users
      tags:
        - API keys
      summary: Create an API key
      operationId: PostApiKey
      x-sdk-operation-name: create
      description: Create an API key.
      requestBody:
        $ref: '#/components/requestBodies/ApiKey'
      responses:
        '201':
          description: API key created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiKey'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $apiKeyForm = new Rebilly\Entities\ApiKey();
            $apiKeyForm->setDescription('Test key');

            try {
                $apiKey = $client->apiKeys()->create($apiKeyForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the properties for the new API key

            const data = {
                description: 'My new API key',
                type: 'secret'
            };


            // the ID is optional

            const firstKey = await api.apiKeys.create({data});


            // or you can provide one

            const secondKey = await api.apiKeys.create({id: 'my-second-key',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $apiKeyForm = new \Rebilly\Sdk\Model\ApiKey();
            $apiKeyForm->setDescription('Test key');

            try {
                $apiKey = $service->apiKeys()->create($apiKeyForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /api-keys/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - API keys
      summary: Retrieve API key
      operationId: GetApiKey
      x-sdk-operation-name: get
      description: Retrieve API key with a specified ID.
      responses:
        '200':
          description: API key retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiKey'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $apiKeys = $client->apiKeys()->load('apiKeyID');
        - lang: JavaScript
          source: |-
            const apiKey = await api.apiKeys.get({id: 'foobar-001'});
            console.log(apiKey.fields.description);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $apiKeys = $service->apiKeys()->get('apiKeyID');
    put:
      x-products:
        - Users
      tags:
        - API keys
      summary: Upsert an API key
      operationId: PutApiKey
      x-sdk-operation-name: update
      description: Create or update (upsert) API key with a specified ID.
      responses:
        '200':
          description: API key updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiKey'
        '201':
          description: API key created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiKey'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        $ref: '#/components/requestBodies/ApiKey'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $apiKeyForm = new Rebilly\Entities\ApiKey();
            $apiKeyForm->setDescription('Test key');

            try {
                $apiKey = $client->apiKeys()->update('apiKeyID', $apiKeyForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // define values to update

            const data = {
                description: 'A better description'
            };


            const apiKey = await api.apiKeys.update({id: 'my-second-key',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $apiKeyForm = new \Rebilly\Sdk\Model\ApiKey();
            $apiKeyForm->setDescription('Test key');

            try {
                $apiKey = $service->apiKeys()->update('apiKeyID', $apiKeyForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    delete:
      x-products:
        - Users
      tags:
        - API keys
      summary: Delete API key
      operationId: DeleteApiKey
      x-sdk-operation-name: delete
      description: Deletes an API key with a specified ID.
      responses:
        '204':
          description: API key deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $client->apiKeys()->delete('apiKeyID');
        - lang: JavaScript
          source: |-
            const request = await api.apiKeys.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->apiKeys()->delete('apiKeyID');
  /balance-transactions:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Users
      tags:
        - Balance transactions
      summary: Retrieve balance transactions
      description: |-
        Retrieves a list of balance transactions.

        > **Important:** This operation is experimental and may change.
      operationId: GetBalanceTransactionCollection
      x-sdk-operation-name: getAll
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of balance transactions retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BalanceTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /balance-transactions/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Users
      tags:
        - Balance transactions
      summary: Retrieve a balance transaction
      description: |-
        Retrieves a balance transaction with a specified identifier.

        > **Important:** This operation is experimental and may change.
      operationId: GetBalanceTransaction
      x-sdk-operation-name: get
      responses:
        '200':
          description: Balance transaction retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BalanceTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /billing-portals:
    get:
      x-products:
        - Users
      tags:
        - Billing portals
      summary: Retrieve billing portals
      operationId: GetBillingPortalCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of billing portals.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of billing portals retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BillingPortal'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Users
      tags:
        - Billing portals
      summary: Create a billing portal
      operationId: PostBillingPortal
      x-sdk-operation-name: create
      description: Creates a billing portal.
      responses:
        '201':
          description: Billing portal created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingPortal'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BillingPortal'
  /billing-portals/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Billing portals
      summary: Retrieve a billing portal
      operationId: GetBillingPortal
      x-sdk-operation-name: get
      description: Retrieves a billing portal with a specified ID.
      responses:
        '200':
          description: Billing portal retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingPortal'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-products:
        - Users
      tags:
        - Billing portals
      summary: Upsert a billing portal
      operationId: PutBillingPortal
      x-sdk-operation-name: update
      description: Creates or updates (upserts) a billing portal with a specified ID.
      responses:
        '200':
          description: Billing portal updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingPortal'
        '201':
          description: Billing portal created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingPortal'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BillingPortal'
    delete:
      x-products:
        - Users
      tags:
        - Billing portals
      summary: Delete a billing portal
      operationId: DeleteBillingPortal
      x-sdk-operation-name: delete
      description: Deletes a billing portal with a specified ID.
      responses:
        '204':
          description: Billing portal deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /broadcast-messages:
    get:
      x-products:
        - Users
      tags:
        - Broadcast messages
      summary: Retrieve broadcast messages
      operationId: GetBroadcastMessageCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of broadcast messages.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: List of broadcast messages retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/BroadcastMessage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Users
      tags:
        - Broadcast messages
      summary: Create a broadcast message
      operationId: PostBroadcastMessage
      x-sdk-operation-name: create
      description: Creates a broadcast message.
      responses:
        '201':
          description: Broadcast message created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BroadcastMessage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BroadcastMessage'
        description: Broadcast message resource.
        required: true
  /broadcast-messages/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Broadcast messages
      summary: Retrieve a broadcast message
      operationId: GetBroadcastMessage
      x-sdk-operation-name: get
      description: Retrieves a broadcast message.
      responses:
        '200':
          description: Broadcast message retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BroadcastMessage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      x-products:
        - Users
      tags:
        - Broadcast messages
      summary: Delete a broadcast message
      operationId: DeleteBroadcastMessage
      x-sdk-operation-name: delete
      description: Deletes a broadcast message with a specified ID.
      responses:
        '204':
          description: Broadcast message deleted.
        '429':
          $ref: '#/components/responses/TooManyRequests'
    patch:
      x-products:
        - Users
      tags:
        - Broadcast messages
      summary: Update a broadcast message
      operationId: PatchBroadcastMessage
      x-sdk-operation-name: update
      description: Updates a broadcast message with a specified ID.
      responses:
        '200':
          description: Broadcast message updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BroadcastMessage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BroadcastMessage'
        description: Broadcast message resource.
        required: true
  /deposit-requests:
    post:
      x-products:
        - Core
      x-badges:
        - name: Experimental
      tags:
        - Deposits
      summary: Create a deposit request
      operationId: PostDepositRequest
      x-sdk-operation-name: create
      description: >-
        Creates a deposit request.

        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'
      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:
    get:
      x-products:
        - Users
      tags:
        - Checkout forms
      summary: Retrieve checkout forms
      operationId: GetCheckoutFormCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of checkout forms.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: Checkout forms retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CheckoutForm'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Users
      tags:
        - Checkout forms
      summary: Create a checkout form
      operationId: PostCheckoutForm
      x-sdk-operation-name: create
      description: Creates a checkout form.
      responses:
        '201':
          description: Checkout form created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutForm'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckoutForm'
  /checkout-forms/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Checkout forms
      summary: Retrieve a checkout form
      operationId: GetCheckoutForm
      x-sdk-operation-name: get
      description: Retrieves a checkout form with a specified ID.
      responses:
        '200':
          description: Checkout form retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutForm'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-products:
        - Users
      tags:
        - Checkout forms
      summary: Upsert a checkout form
      operationId: PutCheckoutForm
      x-sdk-operation-name: update
      description: Creates or updates (upserts) a checkout form with a specified ID.
      responses:
        '200':
          description: Checkout form updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutForm'
        '201':
          description: Checkout form created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CheckoutForm'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CheckoutForm'
    delete:
      x-products:
        - Users
      tags:
        - Checkout forms
      summary: Delete a checkout form
      operationId: DeleteCheckoutForm
      x-sdk-operation-name: delete
      description: Deletes a checkout form with a specified ID.
      responses:
        '204':
          description: Checkout form deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /service-credentials/{type}:
    parameters:
      - $ref: '#/components/parameters/credentialType'
    get:
      x-products:
        - Users
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionQuery'
      tags:
        - Service credentials
      summary: Retrieve service credentials
      operationId: GetServiceCredentialCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of service credentials.
      responses:
        '200':
          description: List of service credentials retrieved.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ServiceCredential'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >
            // type is required, other parameters are optional

            const firstCollection = await api.serviceCredentials.getAll({type:
            'webhook'});


            // alternatively you can specify one or more of them

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

            const secondCollection = await
            api.serviceCredentials.getAll(params);


            // access the collection items, each item is a ServiceCredential

            secondCollection.items.forEach(serviceCredential =>
            console.log(serviceCredential.fields.status));
    post:
      x-products:
        - Users
      tags:
        - Service credentials
      summary: Create a service credential
      operationId: PostServiceCredential
      x-sdk-operation-name: create
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Creates a service credential.
      responses:
        '201':
          description: Service credential created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceCredential'
        '303':
          description: Existing service credential retrieved.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceCredential'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ServiceCredential'
        description: Service credential resource.
        required: true
      x-codeSamples:
        - lang: JavaScript
          source: >
            // first set the required properties for the new service credential

            const data = {
                host: 'foobar.test.com',
                auth: {
                    type: 'none'
                }
            };


            const credential = await api.serviceCredentials.create({type:
            'webhook', data});

            // use the ID to authenticate your webhook in Rebilly

            console.log(credential.fields.id);
  /service-credentials/{type}/{id}:
    parameters:
      - $ref: '#/components/parameters/credentialType'
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Service credentials
      summary: Retrieve a service credential
      operationId: GetServiceCredential
      x-sdk-operation-name: get
      description: Retrieves a service credential with a specified ID.
      responses:
        '200':
          description: Service credential retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceCredential'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >
            const credential = await api.serviceCredentials.get({type:
            'webhook', id: 'service-credential-1'});

            console.log(credential.fields.status);
    patch:
      x-products:
        - Users
      tags:
        - Service credentials
      summary: Update a service credential
      operationId: PatchServiceCredential
      x-sdk-operation-name: update
      description: Updates a service credential with a specified ID.
      requestBody:
        $ref: '#/components/requestBodies/PatchCredential'
      responses:
        '200':
          description: Service credential updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceCredential'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: >
            // first set the status to update for the service credential

            const data = {
                status: 'deactivated'
            };


            const credential = await api.serviceCredentials.update({type:
            'webhook', id: 'service-credential-1', data});
  /service-credentials/{type}/{id}/items:
    parameters:
      - $ref: '#/components/parameters/credentialType'
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Service credentials
      summary: List credential root items
      operationId: GetServiceCredentialItemCollection
      x-sdk-operation-name: getItems
      description: Retrieves a list of root items for a specified credential.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionFields'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of credential root items retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GoogleSpreadsheet'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >
            // type and id are required, other parameters are optional

            const firstCollection = await api.serviceCredentials.getItems({type:
            'oauth2', id: 'service-credential-1'});


            // alternatively you can specify one or more of them

            const params = {type: 'oauth2', id: 'service-credential-1', limit:
            20, offset: 100};

            const secondCollection = await
            api.serviceCredentials.getItems(params);
  /custom-domains:
    get:
      x-products:
        - Users
      tags:
        - Custom domains
      summary: Retrieve custom domains
      operationId: GetCustomDomainCollection
      x-sdk-operation-name: getAll
      description: Retrieve a list of custom domains.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of custom domains retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/CustomDomain'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Users
      tags:
        - Custom domains
      summary: Create a custom domain
      operationId: PostCustomDomain
      x-sdk-operation-name: create
      description: Create a custom domain.
      responses:
        '201':
          description: Custom domain created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomDomain'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomDomain'
  /custom-domains/{domain}:
    parameters:
      - name: domain
        in: path
        description: Resource domain.
        required: true
        schema:
          type: string
          maxLength: 255
          pattern: ^[@~\-\.\w]+$
    get:
      x-products:
        - Users
      tags:
        - Custom domains
      summary: Retrieve a custom domain
      operationId: GetCustomDomain
      x-sdk-operation-name: get
      description: Retrieve a custom domain with a specified ID.
      responses:
        '200':
          description: Custom domain retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomDomain'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      x-products:
        - Users
      tags:
        - Custom domains
      summary: Delete a custom domain
      operationId: DeleteCustomDomain
      x-sdk-operation-name: delete
      description: Delete a custom domain with a specified ID.
      responses:
        '204':
          description: Custom domains deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /email-delivery-setting-verifications/{token}:
    parameters:
      - $ref: '#/components/parameters/token'
    put:
      x-products:
        - Users
      tags:
        - Email delivery settings
      summary: Verify an email delivery setting
      operationId: PutEmailDeliverySettingsVerification
      x-sdk-operation-name: verify
      x-sdk-resource: EmailDeliverySettings
      description: Verifies an email delivery setting.
      responses:
        '200':
          description: Email delivery setting verified.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailDeliverySetting'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /email-delivery-settings:
    get:
      x-products:
        - Users
      tags:
        - Email delivery settings
      summary: Retrieve email delivery settings
      operationId: GetEmailDeliverySettingCollection
      x-sdk-operation-name: getAll
      description: Retrieves email delivery settings.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of email delivery settings retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EmailDeliverySetting'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Users
      tags:
        - Email delivery settings
      summary: Create an email delivery setting
      operationId: PostEmailDeliverySetting
      x-sdk-operation-name: create
      description: |-
        Creates an email delivery setting.
        Email delivery settings are used together with email messages,
        or templates, to send emails.
      responses:
        '201':
          description: Email delivery setting created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailDeliverySetting'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailDeliverySetting'
        description: Email delivery setting resource.
        required: true
  /email-delivery-settings/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Email delivery settings
      summary: Retrieve an email delivery setting
      operationId: GetEmailDeliverySetting
      x-sdk-operation-name: get
      description: Retrieves an email delivery setting with a specified ID.
      responses:
        '200':
          description: Email delivery setting retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailDeliverySetting'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      x-products:
        - Users
      tags:
        - Email delivery settings
      summary: Delete an email delivery setting
      operationId: DeleteEmailDeliverySetting
      x-sdk-operation-name: delete
      description: Deletes an email delivery setting with a specified ID.
      responses:
        '204':
          description: Email delivery setting deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    patch:
      x-products:
        - Users
      tags:
        - Email delivery settings
      summary: Update an email delivery setting
      operationId: PatchEmailDeliverySetting
      x-sdk-operation-name: update
      description: Updates an email delivery setting with a specified ID.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailDeliverySetting'
        description: Email delivery setting resource.
        required: true
      responses:
        '200':
          description: Email delivery setting updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailDeliverySetting'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /email-delivery-settings/{id}/resend-email-verification:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Users
      tags:
        - Email delivery settings
      summary: Resend email delivery setting verification email
      operationId: PostResendEmailDeliverySettingVerification
      x-sdk-operation-name: resendVerification
      description: >-
        Resends a verification email for an email delivery setting with a
        specified ID.
      responses:
        '200':
          description: Verification email sent.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailDeliverySetting'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /email-messages:
    get:
      x-products:
        - Users
      tags:
        - Email messages
      summary: Retrieve email messages
      operationId: GetEmailMessageCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of email messages.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: List of email messages retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EmailMessage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Users
      tags:
        - Email messages
      summary: Create an email message
      operationId: PostEmailMessage
      x-sdk-operation-name: create
      description: Creates an email message.
      responses:
        '201':
          description: Email message created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailMessage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EmailMessage'
        description: Email message resource.
        required: true
  /email-messages/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Email messages
      summary: Retrieve an email message
      operationId: GetEmailMessage
      x-sdk-operation-name: get
      description: Retrieves an email message with a specified ID.
      responses:
        '200':
          description: Email message retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailMessage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      x-products:
        - Users
      tags:
        - Email messages
      summary: Delete an email message
      operationId: DeleteEmailMessage
      x-sdk-operation-name: delete
      description: Deletes an email message with a specified ID.
      responses:
        '204':
          description: Email message deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    patch:
      x-products:
        - Users
      tags:
        - Email messages
      summary: Send an email message
      operationId: PatchEmailMessage
      x-sdk-operation-name: send
      description: Sends an email message.
      responses:
        '200':
          description: Email message accepted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EmailMessage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: PatchEmailMessageRequest
              required:
                - status
              properties:
                status:
                  description: Status of the email message.
                  type: string
                  enum:
                    - outbox
        description: Email message status.
        required: true
  /email-notifications:
    get:
      x-products:
        - Users
      tags:
        - Email notifications
      summary: Retrieve email notification events
      operationId: GetEmailNotificationCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list email notification events.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: List of email notification events retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EmailNotification'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /events:
    get:
      x-products:
        - Users
      tags:
        - Rules
      summary: Retrieve system events
      operationId: GetEventCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of system events.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of system events retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SystemEvent'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // all parameters are optional

            const firstCollection = await api.events.getAll();


            // alternatively you can specify one or more of them

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

            const secondCollection = await api.events.getAll(params);


            // access the collection items, each item is a Member

            secondCollection.items.forEach(event =>
            console.log(event.fields.eventType));
  /events/{eventType}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
    get:
      x-products:
        - Users
      tags:
        - Rules
      summary: Retrieve event information
      operationId: GetEvent
      x-sdk-operation-name: get
      description: Retrieves event information for a specified event type.
      responses:
        '200':
          description: Rules retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SystemEvent'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            const eventDetails = await api.events.get({eventType:
            'gateway-account-created'});

            console.log(eventDetails.fields.rulesCount);
  /events/{eventType}/rules:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
    get:
      x-products:
        - Users
      tags:
        - Rules
      summary: Retrieve event rules
      operationId: GetEventRuleCollection
      x-sdk-operation-name: getRules
      description: Retrieves rules associated with a specified event type.
      responses:
        '200':
          description: Rules retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuleSet'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            const event = await api.events.getRules({eventType:
            'transaction-processed'});

            console.log(event.fields.rules);
    put:
      x-products:
        - Users
      tags:
        - Rules
      summary: Update event rules
      operationId: PutEventRule
      x-sdk-operation-name: createRules
      description: Updates rules associated with a specified event type.
      responses:
        '200':
          description: Rules updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuleSet'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        $ref: '#/components/requestBodies/RuleSet'
      x-codeSamples:
        - lang: JavaScript
          source: >
            // define at least one rule

            const data = {
                rules: [
                    {
                        name: 'The One Rule',
                        status: 'active',
                        final: true,
                        criteria: {},
                        actions: [
                            {
                                 name: 'blocklist',
                                 status: 'active',
                                 type: 'email',
                                 ttl: 789
                            },
                            {
                                 name: 'stop-subscriptions',
                                 status: 'active'
                            }
                        ]
                    }

                ]
            };


            const ruleset = await api.events.createRules({eventType:
            'risk-score-changed', data});

            console.log(ruleset.fields.version);




            // updating rules


            // define the ruleset to override the current values within

            // the event

            const data = {
                rules: [
                    {
                        name: 'The One Rule',
                        status: 'active',
                        final: true,
                        criteria: {},
                        actions: [
                            {
                                 name: 'blocklist',
                                 status: 'active',
                                 type: 'email',
                                 ttl: 789
                            },
                            {
                                 name: 'stop-subscriptions',
                                 status: 'active'
                            }
                        ]
                    }

                ]
            };


            const ruleset = await api.events.updateRules({eventType:
            'risk-score-changed', data});

            // each time the event's ruleset is modified

            // the version number is incremented

            console.log(ruleset.fields.version);
  /events/{eventType}/timeline:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
    get:
      x-products:
        - Users
      tags:
        - Rules timeline
      summary: Retrieve rules engine timeline messages
      operationId: GetRuleSetCollection
      x-sdk-operation-name: getAllTimelineMessages
      description: Retrieves a list of rules engine timeline messages.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of rules engine timeline messages retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RulesEngineTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Users
      tags:
        - Rules timeline
      summary: Create a rules engine timeline comment
      operationId: PostRuleSetTimeline
      x-sdk-operation-name: createTimelineComment
      description: Creates a rules engine timeline comment.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RulesEngineTimeline'
        description: Rules engine timeline resource.
        required: true
      responses:
        '201':
          description: Rules engine timeline comment created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RulesEngineTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /events/{eventType}/timeline/{messageId}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
      - name: messageId
        in: path
        description: ID of the rules engine timeline message.
        required: true
        schema:
          type: string
    get:
      x-products:
        - Users
      tags:
        - Rules timeline
      summary: Retrieve a rules engine timeline message
      operationId: GetRuleSetTimeline
      x-sdk-operation-name: getTimelineMessage
      description: Retrieves a rules engine timeline message with a specified ID.
      responses:
        '200':
          description: Rules engine message retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RulesEngineTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      x-products:
        - Users
      tags:
        - Rules timeline
      summary: Delete a rules engine timeline message
      operationId: DeleteRuleSetTimeline
      x-sdk-operation-name: deleteTimelineMessage
      description: Deletes a rules engine timeline message with a specified ID.
      responses:
        '204':
          description: Rules engine timeline message deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /events/{eventType}/rules/history:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
    get:
      x-products:
        - Users
      tags:
        - Rules
      summary: Retrieve change history of a ruleset
      operationId: GetEventRuleHistoryCollection
      x-sdk-operation-name: getRulesHistory
      description: |-
        Retrieves the change history of a ruleset with a specified event type.
        All ruleset changes are recorded in the change history.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFields'
      responses:
        '200':
          description: Ruleset history retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RuleSetHistoryItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // get the latest 20 versions for this event ID

            const history = await api.events.getRulesVersionNumber({eventType:
            'risk-score-changed', limit: 20});

            // each item exposes the version and `createdTime`

            history.items.forEach(edit => console.log(edit.fields.version));
  /events/{eventType}/rules/history/{version}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
      - $ref: '#/components/parameters/rulesVersion'
    get:
      x-products:
        - Users
      tags:
        - Rules
      summary: Retrieve change history record of a ruleset
      operationId: GetEventRuleHistory
      x-sdk-operation-name: getRulesVersionNumber
      description: >-
        Retrieves the change history record of a ruleset with a specified event
        type.

        A history record is created each time rules are changed.
      parameters:
        - $ref: '#/components/parameters/collectionFields'
      responses:
        '200':
          description: Ruleset history record retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuleSetHistoryItem'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // get version #2 details for this event ID

            const history = await api.events.getRulesVersionNumber({eventType:
            'risk-score-changed', version: 2});

            // the history exposes the version number and its `createdTime`

            console.log(history.fields.createdTime);
  /events/{eventType}/rules/versions/{version}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
      - $ref: '#/components/parameters/rulesVersion'
    get:
      x-products:
        - Users
      tags:
        - Rules
      summary: Retrieve a version of a ruleset
      operationId: GetEventRuleVersion
      x-sdk-operation-name: getRulesVersionDetail
      description: |-
        Retrieves a version of a ruleset with a specified event type.
        A new version is created each time you change a rule.
      parameters:
        - $ref: '#/components/parameters/collectionFields'
      responses:
        '200':
          description: Ruleset version retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuleSetVersion'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // get version #2 for this event ID

            const version = await api.events.getRulesVersionDetail({eventType:
            'risk-score-changed', version: 2});

            // the version exposes the ruleset 

            console.log(version.fields.rules);
  /events/{eventType}/rules/drafts:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
    get:
      x-products:
        - Users
      tags:
        - Rules
      summary: Retrieve draft rulesets
      operationId: GetEventRuleSetDraftCollection
      x-sdk-operation-name: getAllDraftRulesets
      description: |-
        Retrieves a list of draft rulesets for a specified event type.
        The result are sorted by updated time in descending order.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFields'
      responses:
        '200':
          description: Draft rulesets retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RuleSetDraft'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      x-products:
        - Users
      tags:
        - Rules
      summary: Create a draft ruleset
      operationId: PostEventRuleSetDraft
      x-sdk-operation-name: createDraftRuleset
      description: Creates a draft ruleset for a specified event type.
      responses:
        '201':
          description: Draft ruleset created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuleSetDraft'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        $ref: '#/components/requestBodies/RuleSetDraft'
  /events/{eventType}/rules/drafts/{id}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Rules
      summary: Retrieve a draft ruleset
      operationId: GetEventRuleSetDraft
      x-sdk-operation-name: getDraftRuleset
      description: Retrieves a draft ruleset with a specified ID and event type.
      parameters:
        - $ref: '#/components/parameters/collectionFields'
      responses:
        '200':
          description: Draft ruleset retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuleSetDraft'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      x-products:
        - Users
      tags:
        - Rules
      summary: Delete a draft ruleset
      operationId: DeleteEventRuleSetDraft
      x-sdk-operation-name: deleteDraftRuleset
      description: Deletes a draft ruleset with a specified ID and event type.
      responses:
        '204':
          description: Draft ruleset deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    put:
      x-products:
        - Users
      tags:
        - Rules
      summary: Update a draft ruleset
      operationId: PutEventRuleSetDraft
      x-sdk-operation-name: updateDraftRuleset
      description: Updates a draft ruleset for a specified event type.
      responses:
        '200':
          description: Draft ruleset updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuleSetDraft'
        '201':
          description: Draft ruleset created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RuleSetDraft'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        $ref: '#/components/requestBodies/RuleSetDraft'
  /forgot-password:
    servers:
      - url: https://api-sandbox.rebilly.com
        description: Sandbox server
      - url: https://api.rebilly.com
        description: Live server
    post:
      x-products:
        - Users
      tags:
        - Reset password
      summary: Request a password reset
      operationId: PostForgotPasswordRequest
      x-sdk-operation-name: forgotPassword
      x-sdk-resource: Account
      description: Sends an email with a link containing a token to reset a user password.
      security: []
      responses:
        '204':
          description: Email sent.
        '422':
          $ref: '#/components/responses/ValidationError'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ForgotPassword'
        description: Forgot password resource.
        required: true
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $forgotPasswordForm = new Rebilly\Entities\ForgotPassword();
            $forgotPasswordForm->setEmail('johndoe@test.com');

            try {
                $client->users()->forgotPassword($forgotPasswordForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: |-
            const data = {
                email: 'acme+test@rebilly.com'
            };

            const request = await api.account.forgotPassword({data});

            // 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);

            $forgotPasswordForm = new \Rebilly\Sdk\Model\ForgotPassword();
            $forgotPasswordForm->setEmail('johndoe@test.com');

            try {
                $service->account()->forgotPassword($forgotPasswordForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /gateway-accounts:
    get:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Retrieve gateway accounts
      operationId: GetGatewayAccountCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of gateway accounts.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionFields'
      responses:
        '200':
          description: List of gateway accounts retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GatewayAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $gatewayAccounts = $client->$gatewayAccounts()->search([
                'filter' => 'currency:USD',
            ]);
        - lang: JavaScript
          source: >-
            // all parameters are optional

            const firstCollection = await api.gatewayAccounts.getAll();


            // alternatively you can specify one or more of them

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

            const secondCollection = await api.gatewayAccounts.getAll(params);


            // access the collection items, each item is a Member

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


            $gatewayAccountsPaginator =
            $service->gatewayAccounts()->getAllPaginator(limit: 5, filter:
            'currency:USD');

            foreach ($gatewayAccountsPaginator as $gatewayAccountsPage) {
                printf("Gateway accounts page %d/%d\n", $gatewayAccountsPaginator->key() + 1, $gatewayAccountsPaginator->count());
                foreach ($gatewayAccountsPage as $gatewayAccount) {
                    printf("Gateway account #%s: %s\n", $gatewayAccount->getId(), $gatewayAccount->getGatewayName());
                }
            }


            // OR


            $gatewayAccounts = $service->gatewayAccounts()->getAll(filter:
            'currency:USD');

            foreach ($gatewayAccounts as $gatewayAccount) {
                printf("Gateway account #%s: %s\n", $gatewayAccount->getId(), $gatewayAccount->getGatewayName());
            }
    post:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Create a gateway account
      operationId: PostGatewayAccount
      x-sdk-operation-name: create
      description: Creates a gateway account.
      requestBody:
        $ref: '#/components/requestBodies/GatewayAccount'
      responses:
        '201':
          description: Gateway account created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          description: Invalid data sent.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvalidError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: >
            $gatewayAccountForm = new Rebilly\Entities\GatewayAccount();


            $gatewayAccountForm->setGatewayName('A1Gateway');

            $gatewayAccountForm->setAcquirerName('Bank of Rebilly');

            $gatewayAccountForm->setOrganizationId('organizationId');

            $gatewayAccountForm->setMerchantCategoryCode(5734);

            $gatewayAccountForm->setWebsites([
                'websiteId1',
                'websiteId2',
            ]);

            $gatewayAccountForm->setPaymentCardSchemes([
                Rebilly\Entities\PaymentCardScheme::SCHEME_VISA,
                Rebilly\Entities\PaymentCardScheme::SCHEME_MASTERCARD,
            ]);

            $gatewayAccountForm->setMethod(Rebilly\Entities\PaymentMethod::METHOD_CASH);


            $gatewayConfig = [
                'accountId' => 'test',
                'password' => '123',
            ];


            $gatewayAccountForm->setGatewayConfig($gatewayConfig);


            try {
                $gatewayAccount = $client->gatewayAccounts()->create($gatewayAccountForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the required properties for the new gateway account

            const data = {
                gatewayName: 'RebillyProcessor',
                acquirerName: 'RebillyProcessor',
                merchantCategoryCode: 0,
                acceptedCurrencies: ['USD'],
                method: 'payment-card',
                paymentCardSchemes: [
                    'Visa', 'MasterCard', 'American Express', 
                    'Discover', 'Diners Club', 'JCB'
                ],
                // the gatewayConfig varies for each gateway name, 
                // see the API spec for details
                gatewayConfig: {},
            };


            // the ID is optional

            const firstKey = await api.gatewayAccounts.create({data});


            // or you can provide one

            const secondKey = await api.gatewayAccounts.create({id:
            'my-second-id', data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $gatewayAccountForm = new \Rebilly\Sdk\Model\Stripe();
            $gatewayAccountForm->setAcquirerName('Bank of Rebilly');
            $gatewayAccountForm->setMerchantCategoryCode('5734');
            $gatewayAccountForm->setPaymentCardSchemes([
                'Visa',
                'MasterCard',
            ]);
            $gatewayAccountForm->setMethod('payment-card');

            try {
                $gatewayAccount = $service->gatewayAccounts()->create($gatewayAccountForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /gateway-accounts/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Retrieves a gateway account
      operationId: GetGatewayAccount
      x-sdk-operation-name: get
      description: Retrieves a gateway account with a specified ID.
      responses:
        '200':
          description: Gateway account retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: >
            $gatewayAccount =
            $client->gatewayAccounts()->load('gatewayAccountId');
        - lang: JavaScript
          source: >-
            const gatewayAccount = await api.gatewayAccounts.get({id:
            'foobar-001'});

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

            $gatewayAccount =
            $service->gatewayAccounts()->get('gatewayAccountId');
    put:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Upsert a gateway account
      operationId: PutGatewayAccount
      x-sdk-operation-name: upsert
      description: Creates or updates (upserts) a gateway account with a specified ID.
      requestBody:
        $ref: '#/components/requestBodies/GatewayAccount'
      responses:
        '200':
          description: Gateway account updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccount'
        '201':
          description: Gateway account created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: >
            $gatewayAccountForm = new Rebilly\Entities\GatewayAccount();


            $gatewayAccountForm->setGatewayName('A1Gateway');

            $gatewayAccountForm->setAcquirerName('Bank of Rebilly');

            $gatewayAccountForm->setOrganizationId('organizationId');

            $gatewayAccountForm->setMerchantCategoryCode(5734);

            $gatewayAccountForm->setWebsites([
                'websiteId1',
                'websiteId2',
            ]);

            $gatewayAccountForm->setPaymentCardSchemes([
                Rebilly\Entities\PaymentCardScheme::SCHEME_VISA,
                Rebilly\Entities\PaymentCardScheme::SCHEME_MASTERCARD,
            ]);

            $gatewayAccountForm->setMethod(Rebilly\Entities\PaymentMethod::METHOD_CASH);


            $gatewayConfig = [
                'accountId' => 'test',
                'password' => '123',
            ];


            $gatewayAccountForm->setGatewayConfig($gatewayConfig);


            try {
                $gatewayAccount = $client->gatewayAccounts()->update('gatewayAccountId', $gatewayAccountForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >-
            // first set the required properties for the new gateway account

            const data = {
                gatewayName: 'RebillyProcessor',
                acquirerName: 'RebillyProcessor',
                merchantCategoryCode: 0,
                acceptedCurrencies: ['USD'],
                method: 'payment-card',
                paymentCardSchemes: [
                    'Visa', 'MasterCard', 'American Express', 
                    'Discover', 'Diners Club', 'JCB'
                ],
                // the gatewayConfig varies for each gateway name, 
                // see the API spec for details
                gatewayConfig: {},
            };


            // the ID is optional

            const firstKey = await api.gatewayAccounts.create({data});


            // or you can provide one

            const secondKey = await api.gatewayAccounts.create({id:
            'my-second-id', data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $gatewayAccountForm = new \Rebilly\Sdk\Model\Stripe();
            $gatewayAccountForm->setAcquirerName('Bank of Rebilly');
            $gatewayAccountForm->setMerchantCategoryCode('5734');
            $gatewayAccountForm->setPaymentCardSchemes([
                'Visa',
                'MasterCard',
            ]);
            $gatewayAccountForm->setMethod('payment-card');

            try {
                $gatewayAccount = $service->gatewayAccounts()->update('gatewayAccountId', $gatewayAccountForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    patch:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Update a gateway account
      operationId: PatchGatewayAccount
      x-sdk-operation-name: update
      description: Updates a gateway account with a specified ID.
      requestBody:
        $ref: '#/components/requestBodies/GatewayAccount'
      responses:
        '200':
          description: Gateway account updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // build data with only the fields you wish to update

            const data = {
                paymentCardSchemes: [
                        'Visa', 'MasterCard', 'American Express'
                ]
            };


            const secondKey = await api.gatewayAccounts.update({id:
            'my-second-id', data});
    delete:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Delete a gateway account
      operationId: DeleteGatewayAccount
      x-sdk-operation-name: delete
      description: Deletes a gateway account with a specified ID.
      responses:
        '204':
          description: Gateway account deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $client->gatewayAccounts()->delete('gatewayAccountId');
        - lang: JavaScript
          source: >-
            const request = await api.gatewayAccounts.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->gatewayAccounts()->delete('gatewayAccountId');
  /gateway-accounts/{id}/close:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Close a gateway account
      operationId: PostGatewayAccountClosure
      x-sdk-operation-name: close
      description: >-
        Closes a gateway account with a specified ID.

        This process is also known as archiving.


        When a gateway account is closed,

        the gateway cannot process transactions and the `status` attribute is
        set to `closed`.


        >**Important:** Closing a gateway account cannot be undone. Do so with
        caution.
      responses:
        '201':
          description: Gateway account closed.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            const gatewayAccount = await api.gatewayAccounts.close({id:
            'foobar-001'});

            console.log(gatewayAccount.fields.status);
  /gateway-accounts/{id}/disable:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Disable a gateway account
      operationId: PostGatewayAccountDisablement
      x-sdk-operation-name: disable
      description: >-
        Disables a gateway account with a specified ID.


        When a gateway account is disabled,

        the gateway cannot process transactions and the `status` attribute is
        set to `inactive`.
      responses:
        '201':
          description: Gateway account disabled.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Gateway account is pending activation and cannot be disabled.
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            const gatewayAccount = await api.gatewayAccounts.disable({id:
            'foobar-001'});

            console.log(gatewayAccount.fields.status);
  /gateway-accounts/{id}/downtime-schedules:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: List gateway account downtime schedules
      operationId: GetGatewayAccountDowntimeScheduleCollection
      x-sdk-operation-name: getAllDowntimeSchedules
      description: >-
        Retrieves a list of downtime schedules for a gateway account with a
        specified ID.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of gateway account downtime schedules retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GatewayAccountDowntimeSchedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // all parameters are optional except for the `id`

            const firstCollection = await
            api.gatewayAccounts.getAllDowntimeSchedules({id: 'my-gateway'});


            // alternatively you can specify one or more of them

            const params = {id: 'my-gateway', limit: 20, offset: 100};

            const secondCollection = await
            api.gatewayAccounts.getAllDowntimeSchedules(params);


            // access the collection items, each item is a Member

            secondCollection.items
                .forEach(gatewayAccount => console.log(gatewayAccount.fields.reason));
    post:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Create a gateway account downtime schedule
      operationId: PostGatewayAccountDowntimeSchedule
      x-sdk-operation-name: createDowntimeSchedule
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Creates a downtime schedule for a gateway account with a specified ID.
      responses:
        '201':
          description: Gateway account downtime schedule created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccountDowntimeSchedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        $ref: '#/components/requestBodies/GatewayAccountDowntimeSchedule'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // first set the required properties for

            // the new gateway account downtime schedule

            const data = {
                startTime: '2018-08-02T15:13:23Z',
                endTime: '2018-08-02T15:13:23Z'
            };


            // the gateway ID is required

            const secondKey = await
            api.gatewayAccounts.createDowntimeSchedule({id: 'my-second-id',
            data});
  /gateway-accounts/{id}/downtime-schedules/{downtimeId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: downtimeId
        in: path
        description: ID of the gateway account downtime.
        required: true
        schema:
          type: string
    get:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Retrieve a gateway account downtime schedule
      operationId: GetGatewayAccountDowntimeSchedule
      x-sdk-operation-name: getDowntimeSchedule
      description: Retrieves a gateway account downtime schedule with a specified ID.
      responses:
        '200':
          description: Gateway downtime schedule retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccountDowntimeSchedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            const downtimeSchedule = await
            api.gatewayAccounts.getDowntimeSchedule({id: 'foobar-001',
            downtimeScheduleId: 'foobar-202'});

            console.log(downtimeSchedule.fields.reason);
    put:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Update a gateway account downtime schedule
      operationId: PutGatewayAccountDowntimeSchedule
      x-sdk-operation-name: updateDowntimeSchedule
      description: Updates a gateway account downtime schedule with a specified ID.
      responses:
        '200':
          description: Gateway account downtime schedule updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccountDowntimeSchedule'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        $ref: '#/components/requestBodies/GatewayAccountDowntimeSchedule'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            // first set the required properties for
            // the update gateway account downtime schedule
            const data = {
                startTime: '2018-08-02T15:13:23Z',
                endTime: '2018-08-02T15:13:23Z'
            };

            // the gateway ID is required
            const secondKey = await api.gatewayAccounts
                .updateDowntimeSchedule({id: 'my-second-id', downtimeScheduleId: 'schedule-id', data});
    delete:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Delete a gateway account downtime schedule
      operationId: DeleteGatewayAccountDowntimeSchedule
      x-sdk-operation-name: deleteDowntimeSchedule
      description: Deletes a gateway account downtime schedule with a specified ID.
      responses:
        '204':
          description: Gateway account downtime schedule deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const request = await api.gatewayAccounts
                .deleteDowntimeSchedule({id: 'my-second-key', downtimeScheduleId: 'schedule-id'});

            // the request does not return any fields but
            // you can confirm the success using the status code
            console.log(request.response.status); // 204
  /gateway-accounts/{id}/enable:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Enable a gateway account
      operationId: PostGatewayAccountEnablement
      x-sdk-operation-name: enable
      description: >-
        Enables a gateway account with a specified ID.


        When a gateway account is enabled,

        the gateway can process transactions and the `status` attribute is set
        to `active`.
      responses:
        '201':
          description: Gateway account enabled.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Gateway account is pending activation and cannot be enabled.
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            const gatewayAccount = await api.gatewayAccounts.enable({id:
            'foobar-001'});

            console.log(gatewayAccount.fields.status);
  /gateway-accounts/{id}/limits:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Retrieve gateway account limits
      operationId: GetGatewayAccountLimitCollection
      x-sdk-operation-name: getAllVolumeLimits
      description: Retrieves a list of limits for a gateway account with a specified ID.
      responses:
        '200':
          description: List of gateway account limits retrieved.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GatewayAccountLimit'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /gateway-accounts/{id}/limits/{limitId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: limitId
        in: path
        description: ID of the gateway account limit.
        required: true
        schema:
          type: string
          enum:
            - daily-money
            - monthly-money
            - daily-count
            - monthly-count
    get:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Retrieve a gateway account limit
      operationId: GetGatewayAccountLimit
      x-sdk-operation-name: getVolumeLimit
      description: Retrieves a gateway account limit with a specified ID.
      responses:
        '200':
          description: Gateway account limit retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccountLimit'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Update a gateway account limit
      operationId: PutGatewayAccountLimit
      x-sdk-operation-name: updateVolumeLimit
      description: Updates a gateway account limit with a specified ID.
      responses:
        '200':
          description: Gateway account limit updated.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccountLimit'
        '201':
          description: Gateway account limit created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccountLimit'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GatewayAccountLimit'
    delete:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Delete a gateway account limit
      operationId: DeleteGatewayAccountLimit
      x-sdk-operation-name: deleteVolumeLimit
      description: Deletes a gateway account limit with a specified ID.
      responses:
        '204':
          description: Gateway account limit deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /gateway-accounts/{id}/timeline:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Gateway accounts timeline
      summary: Retrieve gateway account timeline messages
      operationId: GetGatewayAccountTimelineCollection
      x-sdk-operation-name: getAllTimelineMessages
      description: >-
        Retrieves a list of timeline messages associated with a specified
        gateway account ID.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of gateway account timeline messages retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GatewayAccountTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // all parameters are optional except for the `id`

            const firstCollection = await api.gatewayAccounts
                .getAllTimelineMessages({id: 'my-gateway'});

            // alternatively you can specify one or more of them

            const params = {id: 'my-gateway', limit: 20, offset: 100};

            const secondCollection = await
            api.gatewayAccounts.getAllTimelineMessages(params);


            // access the collection items, each item is a Member

            secondCollection.items
                .forEach(message => console.log(message.fields.eventType));
    post:
      x-products:
        - Users
      tags:
        - Gateway accounts timeline
      summary: Create a gateway account timeline comment
      operationId: PostGatewayAccountTimeline
      x-sdk-operation-name: createTimelineComment
      description: Creates a timeline comment on gateway account with a specified ID.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GatewayAccountTimeline'
        description: Gateway account timeline resource.
        required: true
      responses:
        '201':
          description: Gateway account timeline comment created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccountTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // Create a comment

            const firstComment = await api
                .gatewayAccounts.createTimelineComment({id: 'my-gateway-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-gateway-id',
                data: {
                    message,
                },
            };

            const secondComment = await
            api.gatewayAccounts.createTimelineComment(params);
  /gateway-accounts/{id}/timeline/{messageId}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: messageId
        in: path
        description: ID of the gateway account timeline message.
        required: true
        schema:
          type: string
    get:
      x-products:
        - Users
      tags:
        - Gateway accounts timeline
      summary: Retrieve a gateway timeline message
      operationId: GetGatewayAccountTimeline
      x-sdk-operation-name: getTimelineMessage
      description: Retrieves a gateway timeline message with a specified ID.
      responses:
        '200':
          description: Gateway timeline message retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccountTimeline'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const message = await api.gatewayAccounts
                .getTimelineMessage({id: 'foobar-001', messageId: 'message-202'});
            console.log(message.fields.eventType);
    delete:
      x-products:
        - Users
      tags:
        - Gateway accounts timeline
      summary: Delete a gateway timeline message
      operationId: DeleteGatewayAccountTimeline
      x-sdk-operation-name: deleteTimelineMessage
      description: Deletes a gateway timeline message with a specified ID.
      responses:
        '204':
          description: Gateway account timeline message deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const request = await api.gatewayAccounts
                .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
  /gateway-accounts/{id}/check-credentials:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Verify gateway account credentials
      operationId: PostGatewayAccountCheckCredentials
      x-sdk-operation-name: checkCredentials
      description: >-
        Verifies that supplied credentials are valid for a specified gateway
        account ID.
      responses:
        '204':
          description: Supplied credentials are valid.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          description: Supplied credentials are not valid.
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /gateway-accounts/{id}/financial-settings:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Retrieve financial settings of a gateway account
      operationId: GetGatewayAccountFinancialSettings
      x-sdk-operation-name: getFinancialSettings
      description: >-
        Retrieves the financial settings of a gateway account with a specified
        ID.


        > **Important:** This operation is experimental and may not be backward
        compatible.
      responses:
        '200':
          description: Financial settings retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccountFinancialSettings'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-badges:
        - name: Experimental
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Set financial settings
      operationId: PutGatewayAccountFinancialSettings
      x-sdk-operation-name: setFinancialSettings
      description: >-
        Sets financial settings for a gateway account with a specified ID.


        > **Important:** This operation is experimental and may not be backward
        compatible.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GatewayAccountFinancialSettings'
      responses:
        '200':
          description: Gateway account financial settings updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccountFinancialSettings'
        '201':
          description: Gateway account financial settings created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GatewayAccountFinancialSettings'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /digital-wallets/onboarding/apple-pay:
    post:
      x-products:
        - Users
      tags:
        - Gateway accounts
      summary: Register a domain for Apple Pay
      operationId: PostDigitalWalletOnboardingApplePay
      x-sdk-operation-name: create
      description: |-
        Registers a domain for Apple Pay.

        To use this operation:
          1. Download the [Rebilly Apple Pay merchant domain verification file](https://www.rebilly.com/.well-known/apple-developer-merchantid-domain-association), and host it on your domain at `https://{DOMAIN}/.well-known/apple-developer-merchantid-domain-association`.
          1. Use this endpoint to register the domain with Apple Pay,
          or to check if it is already registered.
          When the domain is registered, you can use Apple Pay with FramePay.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DigitalWalletOnboardingApplePay'
        description: Apple pay domain registration request.
        required: true
      security:
        - SecretApiKey: []
        - JWT: []
      responses:
        '200':
          description: Action executed without error.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalWalletOnboardingApplePay'
        '201':
          description: Domain registered with Apple Pay.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DigitalWalletOnboardingApplePay'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /grid-segments:
    get:
      x-products:
        - Users
      tags:
        - Segments
      summary: Retrieve a user's segments
      operationId: GetGridSegmentCollection
      x-sdk-operation-name: getAll
      x-sdk-resource: Segments
      description: Retrieves a user's UI segments.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: Segments retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GridSegment'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Users
      tags:
        - Segments
      summary: Create a new UI segment
      operationId: PostGridSegment
      x-sdk-operation-name: create
      x-sdk-resource: Segments
      description: >-
        Creates a new UI segment for yourself or to share with others within
        your organization.
      responses:
        '201':
          description: Segment created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GridSegment'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        $ref: '#/components/requestBodies/GridSegment'
  /grid-segments/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Segments
      summary: Retrieve a segment
      operationId: GetGridSegment
      x-sdk-operation-name: get
      x-sdk-resource: Segments
      description: Retrieves a UI segment with a specified ID.
      responses:
        '200':
          description: Segment retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GridSegment'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-products:
        - Users
      tags:
        - Segments
      summary: Update a segment
      operationId: PutGridSegment
      x-sdk-operation-name: update
      x-sdk-resource: Segments
      description: Updates a segment with a specified ID.
      responses:
        '200':
          description: Segment updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GridSegment'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/GridSegment'
    delete:
      x-products:
        - Users
      tags:
        - Segments
      summary: Delete a segment
      operationId: DeleteGridSegment
      x-sdk-operation-name: delete
      x-sdk-resource: Segments
      description: >-
        Deletes a segment with a specified ID.

        This operation also removes all shares of the deleted segment.


        > **Important:** This operation can only be performed by the segment
        owner.
      responses:
        '204':
          description: Segment deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /integrations:
    get:
      x-products:
        - Users
      tags:
        - Integrations
      summary: Retrieve integrations
      operationId: GetIntegrationCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of integrations.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: List of integrations retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Integration'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /integrations/{label}:
    parameters:
      - $ref: '#/components/parameters/integrationLabel'
    get:
      x-products:
        - Users
      tags:
        - Integrations
      summary: Retrieve an integration for specific label
      operationId: GetIntegration
      x-sdk-operation-name: get
      description: Retrieves an integration with a specified label.
      responses:
        '200':
          description: Integration retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Integration'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /lists:
    get:
      x-products:
        - Users
      tags:
        - Lists
      summary: Retrieve lists
      operationId: GetListCollection
      x-sdk-operation-name: getAll
      description: |-
        Retrieves a collection of lists.
        This operation returns the most recent version of each list.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFields'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: Collection of lists retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ValueList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // all parameters are optional

            const firstCollection = await api.lists.getAll();


            // alternatively you can specify one or more of them

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

            const secondCollection = await api.lists.getAll(params);


            // access the collection items, each item is a Member

            secondCollection.items.forEach(list =>
            console.log(list.fields.name));
    post:
      x-products:
        - Users
      tags:
        - Lists
      summary: Create a list
      operationId: PostList
      x-sdk-operation-name: create
      description: Creates a new list.
      responses:
        '201':
          description: List created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValueList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValueList'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // first set the properties for the new list

            const data = {
                name: 'My value list',
                values: [
                    'foobar-0001', 'foobar-0002',  'foobar-0003',
                    'foobar-0004', 'foobar-0005', 'foobar-0006'  
                ]
            };


            // the ID is optional

            const firstList = await api.lists.create({data});


            // or you can provide one

            const secondList = await api.lists.create({id: 'my-second-key',
            data});
  /lists/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Lists
      summary: Retrieve latest list version
      operationId: GetList
      x-sdk-operation-name: getLatestVersion
      description: Retrieves the latest version of a list with a specified ID.
      responses:
        '200':
          description: List retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValueList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            // get the latest version
            const lastest = await api.lists.get({id: 'foobar-001'});

            // get an older version
            const older = await api.lists.get({id: 'foobar-001', version: 12});
    put:
      x-products:
        - Users
      tags:
        - Lists
      summary: Upsert a list
      operationId: PutList
      x-sdk-operation-name: update
      description: Creates or updates (upserts) a list with a specified ID.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ValueList'
        description: List resource.
        required: true
      responses:
        '200':
          description: List updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValueList'
        '201':
          description: List created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValueList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // creating a list

            const data = {
                name: 'My value list',
                values: [
                    'foobar-0001', 'foobar-0002',  'foobar-0003',
                    'foobar-0004', 'foobar-0005', 'foobar-0006'  
                ]
            };


            // the ID is optional

            const firstList = await api.lists.create({data});


            // or you can provide one

            const secondList = await api.lists.create({id: 'my-second-key',
            data});




            // updating a list

            const data = {
                name: 'My better list',
                values: [
                    'foobar-0004', 'foobar-0005', 'foobar-0006'  
                ]
            };


            const list = await api.lists.update({id: 'my-second-key', data});
    delete:
      x-products:
        - Users
      tags:
        - Lists
      summary: Delete a list
      operationId: DeleteList
      x-sdk-operation-name: delete
      description: Deletes a list with a specified ID.
      responses:
        '204':
          description: List deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: Specified list is in use in a rule and cannot be deleted.
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const request = await api.lists.delete({id: 'my-second-key'});

            // the request does not return any fields but
            // you can confirm the success using the status code
            console.log(request.response.status); // 204
  /lists/{id}/{version}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - name: version
        in: path
        required: true
        description: Version of the list.
        schema:
          type: integer
          minimum: 1
    get:
      x-products:
        - Users
      tags:
        - Lists
      summary: Retrieve specific list version
      operationId: GetListVersion
      x-sdk-operation-name: getByVersion
      description: Retrieves a specified version of a list with a specified ID.
      responses:
        '200':
          description: List version retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ValueList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /memberships:
    get:
      x-products:
        - Users
      tags:
        - Memberships
      summary: Retrieve memberships
      operationId: GetMembershipCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of organization memberships.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of organization memberships retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Membership'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /memberships/{organizationId}/{userId}:
    parameters:
      - name: organizationId
        in: path
        required: true
        description: >-
          Unique organization identifier.

          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'
    get:
      x-products:
        - Users
      tags:
        - Memberships
      summary: Retrieve a membership
      operationId: GetMembership
      x-sdk-operation-name: get
      description: Retrieves a membership with a specified organization ID and user ID.
      responses:
        '200':
          description: Membership retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Membership'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-products:
        - Users
      tags:
        - Memberships
      summary: Upsert membership
      operationId: PutMembership
      x-sdk-operation-name: update
      description: >-
        Creates or updates (upserts) a membership with a specified organization
        ID and user ID.

        Only the organization owner can grant organization membership to new
        users.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Membership'
        required: true
      responses:
        '200':
          description: Membership updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Membership'
        '201':
          description: Membership created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Membership'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      x-products:
        - Users
      tags:
        - Memberships
      summary: Delete a membership
      operationId: DeleteMembership
      x-sdk-operation-name: delete
      description: Deletes a membership with a specified organization ID and user ID.
      responses:
        '204':
          description: Membership deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /organizations:
    get:
      x-products:
        - Users
      tags:
        - Organizations
      summary: Retrieve organizations
      operationId: GetOrganizationCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of organizations.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of organizations retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Organization'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Users
      tags:
        - Organizations
      summary: Create an organization
      operationId: PostOrganization
      x-sdk-operation-name: create
      description: Creates an organization.
      requestBody:
        $ref: '#/components/requestBodies/PostOrganization'
      responses:
        '201':
          description: Organization created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Organization'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $organizationForm = new Rebilly\Entities\Organization();
            $organizationForm->setName('Test Organization');
            $organizationForm->setCountry('US');

            try {
                $organization = $client->organizations()->create($organizationForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);

            $organizationForm = new
            \Rebilly\Sdk\Model\PostOrganizationRequest();

            $organizationForm->setName('Test Organization');

            $organizationForm->setCountry('US');


            try {
                $organization = $service->organizations()->create($organizationForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /organizations/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Organizations
      summary: Retrieve an organization
      operationId: GetOrganization
      x-sdk-operation-name: get
      description: Retrieves an organization with a specified ID.
      responses:
        '200':
          description: Organization retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Organization'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $organization = $client->organizations()->load('organizationId');
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $organization = $service->organizations()->get('organizationId');
    patch:
      x-products:
        - Users
      tags:
        - Organizations
      summary: Update an organization
      operationId: PatchOrganization
      x-sdk-operation-name: update
      description: Updates an organization with a specified organization ID.
      requestBody:
        $ref: '#/components/requestBodies/PatchOrganization'
      responses:
        '200':
          description: Organization updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Organization'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $organizationForm = new Rebilly\Entities\Organization();
            $organizationForm->setName('Test Organization');
            $organizationForm->setCountry('US');

            try {
                $organization = $client->organizations()->update('organizationId', $organizationForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $organizationForm = new
            \Rebilly\Sdk\Model\PatchOrganizationRequest();

            $organizationForm->setName('Test Organization');

            $organizationForm->setCountry('US');


            try {
                $organization = $service->organizations()->update('organizationId', $organizationForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /payment-cards-bank-names:
    get:
      x-products:
        - Users
      tags:
        - Payment instruments
      summary: Retrieve payment card issuing bank names
      operationId: GetPaymentCardBankNameCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of payment card issuing bank names.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of payment card issuing bank names retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                title: GetPaymentCardsBankNamesResponse
                items:
                  type: object
                  properties:
                    name:
                      description: Name of the bank.
                      type: string
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /payment-methods:
    servers:
      - url: https://api-sandbox.rebilly.com
        description: Sandbox server
      - url: https://api.rebilly.com
        description: Live server
    get:
      x-products:
        - Users
      tags:
        - Metadata
      summary: Retrieve payment method metadata
      operationId: GetPaymentMethodCollection
      x-sdk-operation-name: getAll
      description: Retrieves payment method metadata.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      security: []
      responses:
        '200':
          description: Payment methods metadata received.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PaymentMethodMetadata'
  /payment-methods/{apiName}:
    servers:
      - url: https://api-sandbox.rebilly.com
        description: Sandbox server
      - url: https://api.rebilly.com
        description: Live server
    parameters:
      - name: apiName
        in: path
        description: Name of the payment method API.
        required: true
        schema:
          description: Name of the payment method returned in the API response.
          type: string
          pattern: ^[\w\. -]+$
    get:
      x-products:
        - Users
      tags:
        - Metadata
      summary: Retrieve metadata of a payment method
      operationId: GetPaymentMethod
      x-sdk-operation-name: get
      description: Retrieves the metadata of a payment method with a specified `apiName`.
      security: []
      responses:
        '200':
          description: Payment method metadata received.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentMethodMetadata'
  /payment-gateways-metadata:
    get:
      x-products:
        - Users
      tags:
        - Metadata
      summary: Retrieve payment gateway metadata
      operationId: GetPaymentGatewayMetadataCollection
      x-sdk-operation-name: getAll
      x-sdk-skip: true
      description: Retrieves payment gateway metadata.
      security: []
      responses:
        '200':
          description: Payment gateway metadata received.
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/PaymentGatewayMetadata'
  /payment-gateways-metadata/{apiName}:
    parameters:
      - name: apiName
        in: path
        description: Payment gateway metadata API name.
        required: true
        schema:
          description: Name of the payment gateway returned in the API response.
          type: string
          pattern: ^[\w\. -]+$
    get:
      x-products:
        - Users
      tags:
        - Metadata
      summary: Retrieve payment gateway metadata
      operationId: GetPaymentGatewayMetadata
      x-sdk-operation-name: get
      x-sdk-skip: true
      description: Retrieves metadata for a gateway with a specified ID.
      security: []
      responses:
        '200':
          description: Payment gateway metadata received.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaymentGatewayMetadata'
  /payout-requests:
    get:
      x-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
                      format: date-time
                    lastPayoutTime:
                      description: >-
                        Date and time when the last payout is created for the
                        gateway and the payment instrument.
                      type: string
                      format: date-time
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /permissions-emulation:
    post:
      x-products:
        - Users
      tags:
        - Profile
      summary: Start permissions emulation
      operationId: PostPermissionsEmulation
      x-sdk-operation-name: startPermissionsEmulation
      x-sdk-resource: Profile
      description: >-
        Starts permissions emulation.


        Emulation during emulation is not supported. If request sent during an
        ongoing emulation then 403 is sent in response.


        Escalation is not supported.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              title: PostPermissionsEmulationRequest
              required:
                - permissions
              properties:
                permissions:
                  description: List of permissions to be emulated.
                  $ref: '#/components/schemas/AclPermissions'
        required: true
      responses:
        '201':
          description: Session created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Session'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      x-products:
        - Users
      tags:
        - Profile
      summary: Stop permissions emulation
      operationId: DeletePermissionsEmulation
      x-sdk-operation-name: stopPermissionsEmulation
      x-sdk-resource: Profile
      description: |-
        Stops permissions emulation.

        Session permissions are restored to the state before emulation began.
        If emulations have not started then `403` is sent in response.
      responses:
        '201':
          description: Session restored.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Session'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /previews/orders:
    post:
      x-products:
        - Core
      tags:
        - Orders
      summary: Preview an order
      operationId: PostPreviewOrder
      x-sdk-operation-name: order
      description: |-
        Previews an order.
        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'
  /previews/rule-actions/send-email:
    post:
      x-products:
        - Users
      tags:
        - Rules
      summary: Send a test email
      operationId: PostPreviewRuleActionEmailSending
      x-sdk-operation-name: sendEmailRuleAction
      description: Sends a test email.
      requestBody:
        content:
          application/json:
            schema:
              description: Send a test email.
              $ref: '#/components/schemas/RulesEmailNotification'
        description: Test email resource.
        required: true
      responses:
        '200':
          description: Test email sent.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                description: Send a test email.
                $ref: '#/components/schemas/RulesEmailNotification'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            // first build the email data including
            // the credential hash
            const data = {
                bodyText: 'hello world',
                bodyHTML: `<strong>hello world</strong>`,
                sender: 'john.doe+test@grr.la',
                recipients: ['john.doe+test@grr.la'],
                subject: 'testing email preview',
                // created prior to the test
                credentialHash: 'dcf6e32f2daee457a1db8ce5fdfbe200'
            };

            const email = await api.previews.sendEmailRuleAction({data});
  /previews/webhooks:
    post:
      x-products:
        - Users
      tags:
        - Webhooks
      summary: Trigger a test webhook
      operationId: PostPreviewWebhook
      x-sdk-operation-name: webhook
      description: Triggers a test webhook.
      requestBody:
        $ref: '#/components/requestBodies/GlobalWebhook'
      responses:
        '204':
          description: Test webhook triggered.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          description: Invalid data sent.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvalidError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            // first build the webhook data including
            // the credential hash
            const data = {
                eventsFilter: [],
                status: 'active',
                method: 'POST',
                headers: {},
                // hookb.in is a great tool for
                // previewing webhooks
                url: 'https://hookb.in/Oe90ZRmdeWUGWg1MGKQV',
                // created prior to the test
                credentialHash: 'dcf6e32f2daee457a1db8ce5fdfbe200'
            };

            const request = await api.previews.webhooks({data});
            // the request does not return any fields but
            // you can confirm the success using the status code
            console.log(request.response.status); // 204
  /profile:
    get:
      x-products:
        - Users
      tags:
        - Profile
      summary: Retrieve user's own profile
      operationId: GetProfile
      x-sdk-operation-name: get
      description: Retrieves the user's own profile as requested by the user.
      responses:
        '200':
          description: Profile retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Profile'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const profile = await api.profile.get();
            console.log(profile.fields.email);
    put:
      x-products:
        - Users
      tags:
        - Profile
      summary: Update a user profile
      operationId: PutProfile
      x-sdk-operation-name: update
      description: Updates user profile.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Profile'
        description: Profile resource.
        required: true
      responses:
        '200':
          description: Profile updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Profile'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: |
            // define values to update
            const data = {
                preferences: [],
            };

            const profile = await api.profile.update({data});
  /profile/mfa:
    get:
      x-products:
        - Users
      tags:
        - Profile
      summary: Retrieve user MFA status
      operationId: GetProfileMfa
      x-sdk-operation-name: getMfa
      description: Retrieves Multi-Factor Authentication (MFA) status of a user.
      responses:
        '200':
          description: User MFA status retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProfileMfa'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >
            const mfa = await api.profile.getMfa();

            console.log(mfa.fields.status, mfa.fields.type,
            mfa.fields.lastAuthTime);
    post:
      x-products:
        - Users
      tags:
        - Profile
      summary: Update user MFA
      operationId: PostProfileMfa
      x-sdk-operation-name: updateMfa
      description: >-
        Updates the Multi-Factor Authentication (MFA) information of a user.


        The generated link with an `enrollment` `rel` link must be followed to
        verify the existing MFA or enroll new MFA.
      responses:
        '201':
          description: User MFA update URL created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProfileMfa'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: |
            const mfa = await api.profile.updateMfa();
            console.log(mfa.fields._links);
    delete:
      x-products:
        - Users
      tags:
        - Profile
      summary: Delete user MFA
      operationId: DeleteProfileMfa
      x-sdk-operation-name: deleteMfa
      description: >-
        Deletes the Multi-Factor Authentication (MFA) information of a user.


        To complete this operation, the `lastAuthTime` value must be no more
        than 10 minutes before this request.
      responses:
        '204':
          description: User MFA deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: |
            await api.profile.deleteMfa();
  /roles:
    get:
      x-products:
        - Users
      tags:
        - Roles
      summary: Retrieve roles
      operationId: GetRoleCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of user roles.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: List of roles retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Role'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Users
      tags:
        - Roles
      summary: Create a role
      operationId: PostRole
      x-sdk-operation-name: create
      description: Creates a role that is used to assign permissions to users.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Role'
        description: Role resource.
        required: true
      responses:
        '201':
          description: Role created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Role'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /roles/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Roles
      summary: Retrieve a role
      operationId: GetRole
      x-sdk-operation-name: get
      description: Retrieves a user role with a specified ID.
      parameters:
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: Role retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Role'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      x-products:
        - Users
      tags:
        - Roles
      summary: Create a role with ID
      operationId: PutRole
      x-sdk-operation-name: update
      description: Creates a user role with a specified ID.
      responses:
        '200':
          description: Role updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Role'
        '201':
          description: Role created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Role'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Role'
        description: Role resource.
        required: true
    delete:
      x-products:
        - Users
      tags:
        - Roles
      summary: Delete a role
      operationId: DeleteRole
      x-sdk-operation-name: delete
      description: Deletes a user role with a specified ID.
      responses:
        '204':
          description: Role deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /send-through-attribution/{eventType}:
    parameters:
      - $ref: '#/components/parameters/systemEventType'
    get:
      x-products:
        - Users
      tags:
        - Email notifications
      summary: Retrieve email notification attributions
      operationId: GetSendThroughAttributionCollection
      x-sdk-operation-name: getAll
      description: >-
        Retrieves a list of email notifications, that have been sent through
        attribution, for a specified event type.
      responses:
        '200':
          description: List of email notifications retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/SendThroughAttribution'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /status:
    servers:
      - url: https://api-sandbox.rebilly.com
        description: Sandbox server
      - url: https://api.rebilly.com
        description: Live server
    get:
      x-products:
        - Users
      tags:
        - Status
      summary: Retrieve API current status
      operationId: GetStatus
      x-sdk-operation-name: get
      description: Retrieve API current status.
      security: []
      responses:
        '200':
          description: Status received.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Status'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const status = await api.status.get({id: 'foobar-001'});
            console.log(status.fields.status);
  /tracking/api:
    get:
      x-products:
        - Users
      tags:
        - Tracking
      summary: Retrieve API tracking logs
      operationId: GetTrackingApiCollection
      x-sdk-operation-name: getAllApiLogs
      description: Retrieves API tracking log records.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: Tracking API logs retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ApiTracking'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $apiTrackingLog = $client->apiTracking()->search([
                'filter' => 'status:200',
            ]);
        - lang: JavaScript
          source: >-
            // all parameters are optional

            const firstCollection = await api.tracking.getAll();


            // alternatively you can specify one or more of them

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

            const secondCollection = await api.tracking.getAll(params);


            // access the collection items, each item is a Member

            secondCollection.items.forEach(entry =>
            console.log(entry.fields.customerId));




            // alternatively, download as a CSV file


            // all parameters are optional

            const firstFile = await api.tracking.downloadApiLogsCSV();


            // alternatively you can specify one or more of them

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

            const secondFile = await api.tracking.downloadApiLogsCSV(params);


            // access the file data to view the CSV content 

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


            $apiTrackingLogsPaginator =
            $service->tracking()->getAllApiLogsPaginator(limit: 5, filter:
            'status:200');

            foreach ($apiTrackingLogsPaginator as $apiTrackingLogsPage) {
                printf("API tracking logs page %d/%d\n", $apiTrackingLogsPaginator->key() + 1, $apiTrackingLogsPaginator->count());
                foreach ($apiTrackingLogsPage as $apiTrackingLog) {
                    printf("API tracking log #%s: %s\n", $apiTrackingLog->getId(), $apiTrackingLog->getRequest());
                }
            }


            // OR


            $apiTrackingLogs = $service->tracking()->getAllApiLogs(filter:
            'status:200');

            foreach ($apiTrackingLogs as $apiTrackingLog) {
                printf("API tracking log #%s: %s\n", $apiTrackingLog->getId(), $apiTrackingLog->getRequest());
            }
  /tracking/api/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Tracking
      summary: Retrieve an API tracking log
      operationId: GetTrackingApi
      x-sdk-operation-name: getApiLog
      description: Retrieves an API tracking log record with a specified ID.
      responses:
        '200':
          description: Tracking API log retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiTracking'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $apiTrackingLog = $client->apiTracking()->load('apiLogId');
        - lang: JavaScript
          source: |-
            const entry = await api.tracking.getApiLog({id: 'foobar-001'});
            console.log(entry.fields.request);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $apiTrackingLog = $service->tracking()->getApiLog('apiLogId');
  /tracking/taxes:
    get:
      x-products:
        - Users
      tags:
        - Tracking
      summary: Retrieve tax service tracking logs
      operationId: GetTrackingTaxCollection
      x-sdk-operation-name: getAllTaxTrackingLogs
      description: Retrieves a collection of tax service tracking logs.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: Tax logs retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/TaxTracking'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.tracking.getAllTaxTrackingLogs();


            // alternatively you can specify one or more of them

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

            const secondCollection = await
            api.tracking.getAllTaxTrackingLogs(params);


            // access the collection items, each item is a Member

            secondCollection.items.forEach(entry =>
            console.log(entry.fields.eventType));
  /tracking/taxes/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Tracking
      summary: Retrieve a tax service tracking log
      operationId: GetTrackingTax
      x-sdk-operation-name: getTaxTrackingLog
      description: Retrieves a tax service tracking log with a specified ID.
      responses:
        '200':
          description: Tax log retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TaxTracking'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >
            const entry = await api.tracking.getTaxTrackingLog({id:
            'foobar-001'});

            console.log(entry.fields.eventType);
  /tracking/lists:
    get:
      x-products:
        - Users
      tags:
        - Tracking
      summary: Retrieve value list changes
      operationId: GetTrackingListCollection
      x-sdk-operation-name: getAllListsChangesHistory
      description: Retrieves the change history of value lists.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: Change history of a value list retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/ValueList'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // all parameters are optional

            const firstCollection = await
            api.tracking.getAllListsChangesHistory();


            // alternatively you can specify one or more of them

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

            const secondCollection = await
            api.tracking.getAllListsChangesHistory(params);


            // access the collection items, each item is a Member

            secondCollection.items.forEach(entry =>
            console.log(entry.fields.name));
  /tracking/webhooks:
    get:
      x-products:
        - Users
      tags:
        - Tracking
      summary: Retrieve webhook tracking logs
      operationId: GetTrackingWebhookCollection
      x-sdk-operation-name: getAllWebhookTrackingLogs
      description: Retrieves webhook tracking logs.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: Tracking webhook logs retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/WebhookTracking'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // all parameters are optional

            const firstCollection = await
            api.tracking.getAllWebhookTrackingLogs();


            // alternatively you can specify one or more of them

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

            const secondCollection = await
            api.tracking.getAllWebhookTrackingLogs(params);


            // access the collection items, each item is a Member

            secondCollection.items.forEach(entry =>
            console.log(entry.fields.eventType));
  /tracking/webhooks/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Tracking
      summary: Retrieve a webhook tracking log
      operationId: GetTrackingWebhook
      x-sdk-operation-name: getWebhookTrackingLog
      description: Retrieves a webhook tracking log record with a specified ID.
      responses:
        '200':
          description: Webhook tracking log record retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/WebhookTracking'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            const entry = await api.tracking.getWebhookTrackingLog({id:
            'foobar-001'});

            console.log(entry.fields.eventType);
  /tracking/webhooks/{id}/resend:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Users
      tags:
        - Tracking
      summary: Schedule a resend webhook attempt
      description: |-
        Schedules a resend attempt for a specified webhook tracking ID.
        Webhooks are processed asynchronously.
      operationId: PostTrackingWebhookResendRequest
      x-sdk-operation-name: resendWebhook
      responses:
        '204':
          description: Webhook resend attempt scheduled.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /users:
    get:
      x-products:
        - Users
      tags:
        - Users
      summary: Retrieve a list of users
      operationId: GetUserCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of users.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of users retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $users = $client->users()->search([
                'filter' => 'firstName:John',
            ]);
        - lang: JavaScript
          source: >-
            // all parameters are optional

            const firstCollection = await api.users.getAll();


            // alternatively you can specify one or more of them

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

            const secondCollection = await api.users.getAll(params);


            // access the collection items, each item is a Member

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


            $usersPaginator = $service->users()->getAllPaginator(limit: 5,
            filter: 'firstName:John');

            foreach ($usersPaginator as $usersPage) {
                printf("Users page %d/%d\n", $usersPaginator->key() + 1, $usersPaginator->count());
                foreach ($usersPage as $user) {
                    printf("User #%s: %s %s | %s\n", $user->getId(), $user->getFirstName(), $user->getLastName(), $user->getEmail());
                }
            }


            // OR


            $users = $service->users()->getAll(filter: 'firstName:John');

            foreach ($users as $user) {
                printf("User #%s: %s %s | %s\n", $user->getId(), $user->getFirstName(), $user->getLastName(), $user->getEmail());
            }
    post:
      x-products:
        - Users
      tags:
        - Users
      summary: Create a user
      operationId: PostUser
      x-sdk-operation-name: create
      description: Creates a user.
      requestBody:
        $ref: '#/components/requestBodies/User'
      responses:
        '201':
          description: User created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $userForm = new Rebilly\Entities\User();
            $userForm->setFirstName('John');
            $userForm->setLastName('Doe');
            $userForm->setEmail('johndoe@test.com');

            try {
                $user = $client->users()->create($userForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // first set the properties for the new user

            const data = {
                email: 'john.doe+test@grr.la',
                firstName: 'John',
                lastName: 'Doe',
                businessPhone: '151412345676',
                mobilePhone: '151412345676',
                permissions: [],
                country: 'US',
                preferences: {}
            };


            // the ID is optional

            const firstProduct = await api.users.create({data});


            // or you can provide one

            const secondProduct = await api.users.create({id: 'my-second-key',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $userForm = new \Rebilly\Sdk\Model\User();
            $userForm->setFirstName('John');
            $userForm->setLastName('Doe');
            $userForm->setEmail('johndoe@test.com');

            try {
                $user = $service->users()->create($userForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /users/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Users
      summary: Retrieve a user
      operationId: GetUser
      x-sdk-operation-name: get
      description: Retrieves a user with a specified ID.
      responses:
        '200':
          description: User retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $user = $client->users()->load('userId');
        - lang: JavaScript
          source: |-
            const user = await api.users.get({id: 'foobar-001'});
            console.log(user.fields.firstName);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $user = $service->users()->get('userId');
    put:
      x-products:
        - Users
      tags:
        - Users
      summary: Upsert a user
      operationId: PutUser
      x-sdk-operation-name: update
      description: Creates or updates (upserts) a user with a specified ID.
      requestBody:
        $ref: '#/components/requestBodies/User'
      responses:
        '200':
          description: User updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '201':
          description: User created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $userForm = new Rebilly\Entities\User();
            $userForm->setFirstName('John');
            $userForm->setLastName('Doe');
            $userForm->setEmail('johndoe@test.com');

            try {
                $user = $client->users()->update('userId', $userForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // creating a new user

            const data = {
                email: 'john.doe+test@grr.la',
                firstName: 'John',
                lastName: 'Doe',
                businessPhone: '151412345676',
                mobilePhone: '151412345676',
                permissions: [],
                country: 'US',
                preferences: {}
            };


            // the ID is optional

            const firstProduct = await api.users.create({data});


            // or you can provide one

            const secondProduct = await api.users.create({id: 'my-second-key',
            data});




            // updating a user

            const data = {
                email: 'john.doe+test@grr.la',
                firstName: 'John',
                lastName: 'Doe',
                country: 'CA',
            };


            const user = await api.users.update({id: 'my-second-key', data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $userForm = new \Rebilly\Sdk\Model\User();
            $userForm->setFirstName('John');
            $userForm->setLastName('Doe');
            $userForm->setEmail('johndoe@test.com');

            try {
                $user = $service->users()->update('userId', $userForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /users/{id}/mfa:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Users
      summary: Retrieve user MFA status
      operationId: GetUserMfa
      x-sdk-operation-name: getMfa
      description: >-
        Retrieves the Multi-Factor Authentication (MFA) status of a user with a
        specified ID.
      responses:
        '200':
          description: User MFA status retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProfileMfa'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >
            const mfa = await api.users.get({id: 'foobar-001'});

            console.log(mfa.fields.status, mfa.fields.type,
            mfa.fields.lastAuthTime);
  /webhooks:
    get:
      x-products:
        - Users
      tags:
        - Webhooks
      summary: Retrieve webhooks
      operationId: GetWebhookCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of webhooks.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: List of webhooks retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/GlobalWebhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // all parameters are optional

            const firstCollection = await api.webhooks.getAll();


            // alternatively you can specify one or more of them

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

            const secondCollection = await api.webhooks.getAll(params);


            // access the collection items, each item is a Member

            secondCollection.items.forEach(webhook =>
            console.log(webhook.fields.name));
    post:
      x-products:
        - Users
      tags:
        - Webhooks
      summary: Create a webhook
      operationId: PostWebhook
      x-sdk-operation-name: create
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Creates a webhook.
      requestBody:
        $ref: '#/components/requestBodies/GlobalWebhook'
      responses:
        '201':
          description: Webhook created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GlobalWebhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // first set the properties for the new webhook

            const data = {
                // leave filter empty to enable 
                // the webhook for all events
                eventsFilter: [],
                status: 'active',
                method: 'POST',
                headers: {},
                url: 'https://hookb.in/Oe90ZRmdeWUGWg1MGKQV',
                // created prior to the test
                credentialHash: 'dcf6e32f2daee457a1db8ce5fdfbe200'
            };


            // the ID is optional

            const firstWebhook = await api.webhooks.create({data});


            // or you can provide one

            const secondWebhook = await api.webhooks.create({id:
            'my-second-key', data});
  /webhooks/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Webhooks
      summary: Retrieve a webhook
      operationId: GetWebhook
      x-sdk-operation-name: get
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Retrieves a webhook with a specified ID.
      responses:
        '200':
          description: Webhook retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GlobalWebhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const webhook = await api.webhooks.get({id: 'foobar-001'});
            console.log(webhook.fields.id);
    put:
      x-products:
        - Users
      tags:
        - Webhooks
      summary: Upsert a webhook
      operationId: PutWebhook
      x-sdk-operation-name: update
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Creates or updates (upserts) a webhook with a specified ID.
      requestBody:
        $ref: '#/components/requestBodies/GlobalWebhook'
      responses:
        '200':
          description: Webhook updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GlobalWebhook'
        '201':
          description: Webhook created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GlobalWebhook'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          description: Invalid data sent.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/InvalidError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /websites:
    get:
      x-products:
        - Users
      tags:
        - Websites
      summary: Retrieve websites
      operationId: GetWebsiteCollection
      x-sdk-operation-name: getAll
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Retrieves a list of websites.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of websites retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Website'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $websites = $client->websites()->search([
                'filter' => 'name:TestWebsite',
            ]);
        - lang: JavaScript
          source: >
            // all parameters are optional

            const firstCollection = await api.websites.getAll();


            // alternatively you can specify one or more of them

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

            const secondCollection = await api.websites.getAll(params);


            // access the collection items, each item is a Member

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


            $websitesPaginator = $service->websites()->getAllPaginator(limit: 5,
            filter: 'name:TestWebsite');

            foreach ($websitesPaginator as $websitesPage) {
                printf("Websites page %d/%d\n", $websitesPaginator->key() + 1, $websitesPaginator->count());
                foreach ($websitesPage as $website) {
                    printf("Website #%s: %s\n", $website->getId(), $website->getName());
                }
            }


            // OR


            $websites = $service->websites()->getAll(filter:
            'name:TestWebsite');

            foreach ($websites as $website) {
                printf("Website #%s: %s\n", $website->getId(), $website->getName());
            }
    post:
      x-products:
        - Users
      tags:
        - Websites
      summary: Create a website
      operationId: PostWebsite
      x-sdk-operation-name: create
      description: Creates a website.
      requestBody:
        $ref: '#/components/requestBodies/Website'
      responses:
        '201':
          description: Website created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Website'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $websiteForm = new Rebilly\Entities\Website();
            $websiteForm->setName('TestWebsite');
            $websiteForm->setUrl('http://testwebsite.com');
            $websiteForm->setServicePhone('+0123456789');
            $websiteForm->setServiceEmail('test@testwebsite.com');

            try {
                $website = $client->websites()->create($websiteForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // first set the properties for the new website

            const data = {
                name: 'My website',
                url: 'https://www.acme.com',
                servicePhone: '15451234567',
                serviceEmail: 'support@acme.com',
                customFields: {}
            };


            // the ID is optional

            const firstWebsite = await api.websites.create({data});


            // or you can provide one

            const secondWebsite = await api.websites.create({id:
            'my-second-key', data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $websiteForm = new \Rebilly\Sdk\Model\Website();
            $websiteForm->setName('TestWebsite');
            $websiteForm->setUrl('http://testwebsite.com');
            $websiteForm->setServicePhone('+0123456789');
            $websiteForm->setServiceEmail('test@testwebsite.com');

            try {
                $website = $service->websites()->create($websiteForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
  /websites/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Websites
      summary: Retrieve a website
      operationId: GetWebsite
      x-sdk-operation-name: get
      security:
        - SecretApiKey: []
        - JWT: []
        - ApplicationJWT: []
      description: Retrieves a website with a specified ID.
      responses:
        '200':
          description: Website retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Website'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $website = $client->websites()->load('websiteId');
        - lang: JavaScript
          source: |-
            const website = await api.websites.get({id: 'foobar-001'});
            console.log(website.fields.name);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);
            $website = $service->websites()->get('websiteId');
    put:
      x-products:
        - Users
      tags:
        - Websites
      summary: Upsert a website
      operationId: PutWebsite
      x-sdk-operation-name: update
      description: Creates or updates (upserts) a website with a specified ID.
      requestBody:
        $ref: '#/components/requestBodies/Website'
      responses:
        '200':
          description: Website updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Website'
        '201':
          description: Website created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Website'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $websiteForm = new Rebilly\Entities\Website();
            $websiteForm->setName('TestWebsite');
            $websiteForm->setUrl('http://testwebsite.com');
            $websiteForm->setServicePhone('+0123456789');
            $websiteForm->setServiceEmail('test@testwebsite.com');

            try {
                $website = $client->websites()->update('websiteId', $websiteForm);
            } catch (Rebilly\Http\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
        - lang: JavaScript
          source: >
            // creating a new website

            const data = {
                name: 'My website',
                url: 'https://www.acme.com',
                servicePhone: '15451234567',
                serviceEmail: 'support@acme.com',
                customFields: {}
            };


            // the ID is optional

            const firstWebsite = await api.websites.create({data});


            // or you can provide one

            const secondWebsite = await api.websites.create({id:
            'my-second-key', data});




            // updating a website

            const data = {
                name: 'My website',
                url: 'https://www.acme.com',
                servicePhone: '15451234567',
                serviceEmail: 'support@acme.com',
                customFields: {}
            };


            const website = await api.websites.update({id: 'my-second-key',
            data});
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $websiteForm = new \Rebilly\Sdk\Model\Website();
            $websiteForm->setName('TestWebsite');
            $websiteForm->setUrl('http://testwebsite.com');
            $websiteForm->setServicePhone('+0123456789');
            $websiteForm->setServiceEmail('test@testwebsite.com');

            try {
                $website = $service->websites()->update('websiteId', $websiteForm);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    delete:
      x-products:
        - Users
      tags:
        - Websites
      summary: Delete a website
      operationId: DeleteWebsite
      x-sdk-operation-name: delete
      description: Deletes a website with a specified ID.
      responses:
        '204':
          description: Website deleted.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          label: PHP-SDK-2.0
          source: |
            $client->websites()->delete('websiteId');
        - lang: JavaScript
          source: |-
            const request = await api.websites.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->websites()->delete('websiteId');
  /experimental/customers/{customerId}/summary-metrics:
    parameters:
      - name: customerId
        in: path
        required: true
        description: ID of the customer.
        schema:
          type: string
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Customers
      summary: Retrieve a customer's lifetime summary metrics
      operationId: GetCustomerSummaryMetricReport
      x-sdk-operation-name: getCustomerLifetimeSummaryMetrics
      description: Retrieves lifetime summary metrics for a customer with a specified ID.
      responses:
        '200':
          description: Metrics retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CustomerInformation'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            const metrics = await
            api.customers.getCustomerLifetimeSummaryMetrics({id:
            'foobar-0001'});

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


            $metrics =
            $service->customers()->getCustomerLifetimeSummaryMetrics('customerId');
  /experimental/data-exports:
    post:
      x-products:
        - Reports
      tags:
        - Data exports
      summary: Request the data export of a resource
      operationId: PostDataExport
      x-sdk-operation-name: queue
      description: Requests the export of a specific data resource.
      parameters:
        - $ref: '#/components/parameters/collectionExpand'
      requestBody:
        $ref: '#/components/requestBodies/DataExport'
      responses:
        '201':
          description: Data export request received.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataExport'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // first prepare the details of the export

            const data = {
                name: 'my-first-export',
                // only CSV is currently supported
                format: 'csv',
                // define filters, criteria, etc. 
                // to reduce the amount of values exported
                arguments: {},
                dateRange: {
                    range: 'all'
                },
                // list email addresses that will receive
                //  a notification once the download is ready
                emailNotification: ['']
            };


            const queuedExport = await api.exports.queue({resource:
            'transaction', data});

            console.log(queuedExport.fields.status);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $dataExport = new \Rebilly\Sdk\Model\CustomersDataExport([
                'name' => 'Daily customer export',
                'format' => 'csv',
                'fields' => [
                    'firstName',
                    'lastName',
                    'email',
                    'lifetimeRevenue/amount',
                    'lastPaymentTime',
                    'createdTime',
                ],
                'recurring' => [
                    'instruction' => 'RRULE:FREQ=DAILY',
                ],
                'dateRange' => [
                    'start' => 'yesterday',
                    'end' => 'today',
                ],
                'emailNotification' => [
                    'user@example.com',
                ],
            ]);

            $service->dataExports()->queue($dataExport);
    get:
      x-products:
        - Reports
      tags:
        - Data exports
      summary: Retrieve data export requests
      operationId: GetDataExportCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of data export requests.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionExpand'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionCriteria'
      responses:
        '200':
          description: List of data export requests retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DataExport'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            // all parameters are optional

            const firstCollection = await api.exports.getAll();


            // alternatively you can specify one or more of them

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

            const secondCollection = await api.exports.getAll(params);


            // access the collection items, each item is a Member

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


            $dataExportsPaginator =
            $service->dataExports()->getAllPaginator(limit: 5);

            foreach ($dataExportsPaginator as $dataExportPage) {
                printf("dataExports page %d/%d\n", $dataExportsPaginator->key() + 1, $dataExportsPaginator->count());
                foreach ($dataExportPage as $dataExport) {
                    printf("DataExport #%s: %s\n", $dataExport->getId(), $dataExport->getName());
                }
            }


            // OR


            $dataExports = $service->dataExports()->getAll(limit: 100);

            foreach ($dataExports as $dataExport) {
                printf("DataExport #%s: %s\n", $dataExport->getId(), $dataExport->getName());
            }
  /experimental/data-exports/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Reports
      tags:
        - Data exports
      summary: Retrieve a data export request
      operationId: GetDataExport
      x-sdk-operation-name: get
      description: Retrieves a data export request.
      parameters:
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: Data export request.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataExport'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            const queuedExport = await api.exports.get({resource: 'transaction',
            id: 'foobar-001'});

            console.log(queuedExport.fields.status);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $dataExport = $service->dataExports()->get('dataExportId');
    put:
      x-products:
        - Reports
      tags:
        - Data exports
      summary: Modify a data export
      operationId: PutDataExport
      x-sdk-operation-name: update
      description: Modifies a pending data export.
      parameters:
        - $ref: '#/components/parameters/collectionExpand'
      requestBody:
        $ref: '#/components/requestBodies/DataExport'
      responses:
        '200':
          description: Data export modified.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataExport'
        '201':
          description: Data export updated.
          headers:
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataExport'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $dataExport = new \Rebilly\Sdk\Model\CustomersDataExport([
                'name' => 'Daily customer export v2',
                'format' => 'csv',
                'fields' => [
                    'firstName',
                    'lastName',
                    'email',
                    'lifetimeRevenue/amount',
                    'lastPaymentTime',
                ],
            ]);

            try {
                $dataExport = $service->dataExports()->update('dataExportId', $dataExport);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }

            // OR

            $dataExport = $service->dataExports()->get('dataExportId');
            $dataExport->setFields([
                'firstName',
                'lastName',
                'email',
                'lifetimeRevenue/amount',
                'lastPaymentTime',
            ]);

            try {
                $dataExport = $service->dataExports()->update('dataExportId', $dataExport);
            } catch (\Rebilly\Sdk\Exception\DataValidationException $e) {
                print_r($e->getValidationErrors());
            }
    delete:
      x-products:
        - Reports
      tags:
        - Data exports
      summary: Delete a data export
      operationId: DeleteDataExport
      x-sdk-operation-name: delete
      description: Deletes a data export.
      responses:
        '204':
          $ref: '#/components/responses/NoContent'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $service->dataExports()->delete('dataExportId');
  /organization-exports:
    get:
      x-products:
        - Users
      tags:
        - Organization data exports
      summary: Retrieve organization data exports
      operationId: GetOrganizationExportCollection
      x-sdk-operation-name: getAll
      description: Retrieves a list of organization data exports.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: List of organization data exports retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/OrganizationExport'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Users
      tags:
        - Organization data exports
      summary: Request an organization data export
      operationId: PostOrganizationExport
      x-sdk-operation-name: create
      description: |-
        Request an organization data export.
        The data export is asynchronously processed.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                includeFiles:
                  description: Sets the export to include organization files.
                  type: boolean
                  default: false
                  example: true
      responses:
        '201':
          description: Organization data export request received.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationExport'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /organization-exports/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Users
      tags:
        - Organization data exports
      summary: Retrieve an organization data export request
      operationId: GetOrganizationExport
      x-sdk-operation-name: get
      description: >-
        Retrieve an organization data export request with a specified
        organization ID.
      responses:
        '200':
          description: Organization data export request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrganizationExport'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /experimental/histograms/transactions:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Histograms
      summary: Retrieve transaction histogram report data
      operationId: GetHistogramTransactionReport
      x-sdk-operation-name: getTransactionHistogramReport
      description: Retrieves transaction histogram report data.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - name: aggregationPeriod
          in: query
          description: Aggregation period of the report.
          required: true
          schema:
            type: string
            enum:
              - hour
              - day
              - month
        - name: metric
          in: query
          description: Metric on which the report is based.
          required: true
          schema:
            type: string
            enum:
              - approval
              - auth_approval
              - avg_sales
              - refunds
              - refunds_count
              - sales
              - sales_count
              - all_sales_count
              - auth_approval_count
              - disputes_count
              - disputes_rate
              - credits
              - credits_count
              - unapproved_count
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: Transaction report retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HistogramData'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            const params = {
                periodStart: '2017-09-21T00:00:00Z',
                // seven day period
                periodEnd: '2017-09-28T23:59:59Z',
                aggregationField: 'website',
                aggregationPeriod: 'day',
                metric: 'approval'
            };

            const report = await
            api.histograms.getTransactionHistogramReport(params);

            console.log(report.fields.data);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $histogram = $service->histograms()->getTransactionHistogramReport(
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                'website',
                'day',
                'sales',
            );
  /experimental/reports/api-log-summary:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve an API log summary report
      operationId: GetApiLogSummaryReport
      x-sdk-operation-name: getApiLogSummary
      description: Retrieves an API log summary report.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Report retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ApiLogSummary'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                periodStart: '2017-09-21T00:00:00Z',
                periodEnd: '2017-09-28T23:59:59Z',
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getApiLogSummary(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getApiLogSummary(
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                limit: 5,
            );
  /experimental/reports/cumulative-subscriptions:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a cumulative subscriptions report
      operationId: GetCumulativeSubscriptionReport
      x-sdk-operation-name: getCumulativeSubscriptions
      description: Retrieves a cumulative subscriptions report.
      parameters:
        - name: aggregationField
          in: query
          description: Report aggregation field.
          required: true
          schema:
            type: string
            enum:
              - day
              - month
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: Report retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CumulativeSubscriptions'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                aggregationField: 'day',
                periodStart: '2017-09-21T00:00:00Z',
                periodEnd: '2017-09-28T23:59:59Z',
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getCumulativeSubscriptions(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getCumulativeSubscriptions(
                'day',
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                limit: 5,
            );
  /experimental/reports/dashboard:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve dashboard data
      operationId: GetDashboardReport
      x-sdk-operation-name: getDashboardMetrics
      description: Retrieves dashboard data.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - name: metrics
          in: query
          description: Comma-separated list of metrics.
          schema:
            type: string
        - name: segments
          in: query
          description: Dashboard report segments as a JSON array.
          schema:
            type: string
      responses:
        '200':
          description: Report retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DashboardResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $dashboard = $service->reports()->getDashboardMetrics(
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                metrics: 'approvalRate,salesCount,salesValue,refundsValue',
            );
  /experimental/reports/dcc-markup:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a DCC markup report
      operationId: GetDccMarkupReport
      x-sdk-operation-name: getDccMarkup
      description: Retrieves a Dynamic Currency Conversion (DCC) markup report.
      parameters:
        - name: aggregationField
          in: query
          description: Report aggregation field.
          required: true
          schema:
            type: string
            enum:
              - day
              - month
              - bin
              - country
              - baseCurrency
              - quoteCurrency
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DccMarkup'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                aggregationField: 'day',
                periodStart: '2017-09-21T00:00:00Z',
                periodEnd: '2017-09-28T23:59:59Z',
                limit: 20,
                offset: 0,
                filter: `gatewayAccounts:f9b4fa10-df1d-48a3-85b3-ff6bd7ce0ed2; \
                        transactionResult:approved,canceled,declined,unknown`,
                tz: 0
            };
            const report = await api.reports.getDccMarkup(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getDccMarkup(
                'day',
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                limit: 5,
            );
  /experimental/reports/declined-transactions:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a declined transactions report
      operationId: GetDeclinedTransactionsReport
      x-sdk-operation-name: getDeclinedTransactions
      description: Retrieves a report on declined transactions.
      parameters:
        - name: aggregationField
          in: query
          description: Report aggregation field.
          required: true
          schema:
            type: string
            enum:
              - gatewayResponseMessage
              - gatewayResponseOriginalMessage
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: Report retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportDeclinedTransactions'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /experimental/reports/disputes:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a disputes report
      operationId: GetDisputeReport
      x-sdk-operation-name: getDisputes
      description: Retrieves a disputes report.
      parameters:
        - name: aggregationField
          in: query
          description: Report aggregation field.
          required: true
          schema:
            type: string
            enum:
              - website
              - gatewayAcquirer
              - currency
              - bin
              - country
              - rebillNumber
              - retryNumber
              - gatewayAccount
              - transactionAmount
        - name: periodMonth
          in: query
          description: Report month in `YYYY-MM` format.
          required: true
          schema:
            type: string
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportDisputes'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                aggregationField: 'website',
                periodMonth: '2017-09',
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getDisputes(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getDisputes(
                'website',
                '2022-01',
                limit: 5,
            );
  /experimental/reports/events-triggered:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve events triggered summary report
      operationId: GetTriggeredEventReport
      x-sdk-operation-name: getEventsTriggeredSummary
      description: Retrieves an events triggered summary report.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportEventsTriggeredSummary'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                periodStart: '2017-09-22T00:00:00Z',
                periodEnd: '2017-09-29T23:59:59Z',
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getEventsTriggeredSummary(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getEventsTriggeredSummary(
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                limit: 5,
            );
  /experimental/reports/events-triggered/{eventType}/rules:
    parameters:
      - name: eventType
        in: path
        required: true
        description: Type of system event.
        schema:
          $ref: '#/components/schemas/EventType'
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a rules matched summary report
      operationId: GetTriggeredEventRuleReport
      x-sdk-operation-name: getTriggeredEventRuleReport
      description: >-
        Retrieves a rules matched summary report that is based on triggered
        events.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportRulesMatchedSummary'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                periodStart: '2017-09-22T00:00:00Z',
                periodEnd: '2017-09-29T23:59:59Z',
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getRulesMatchedSummary(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getTriggeredEventRuleReport(
                'account-password-reset-requested',
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                limit: 5,
            );
  /experimental/reports/future-renewals:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a future renewals report
      operationId: GetFutureRenewalReport
      x-sdk-operation-name: getFutureRenewals
      description: Retrieves a future renewals report.
      parameters:
        - name: periodStart
          in: query
          description: |-
            Date and time when the report starts.
            This date must be in the future.
          required: true
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2032-01
        - name: periodEnd
          in: query
          description: |-
            Date and time when the report ends.
            This date must be in the future.
          required: true
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2032-02
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FutureRenewals'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                periodStart: '2017-09-22T00:00:00Z',
                periodEnd: '2017-09-29T23:59:59Z',
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getFutureRenewals(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getFutureRenewals(
                '2022-10',
                '2022-11',
                limit: 5,
            );
  /experimental/reports/journal:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a journal report
      operationId: GetJournalReport
      x-sdk-operation-name: getJournal
      description: >-
        Retrieves a journal report which displays revenue for each account.


        A revenue journal is a detailed revenue waterfall report that describes
        revenue which is recognized at a certain month,

        aggregated by product ID, product accounting code, or plan ID.

        It contains information on booked revenue,

        recognized revenue for the aggregation field in the booked period,

        and the remaining revenue up to the selected month.
      parameters:
        - name: currency
          in: query
          description: Revenue currency.
          required: true
          schema:
            $ref: '#/components/schemas/CurrencyCode'
        - name: bookedFrom
          in: query
          description: >-
            Year and month from which revenue is booked.

            If this value is omitted, booked revenue is recorded from the first
            booked amount.
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2022-01
        - name: bookedTo
          in: query
          description: >-
            Year and month in which revenue is booked until.

            If this value is omitted, booked revenue is recorded until the most
            recently booked amount.
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2022-01
        - name: recognizedAt
          in: query
          description: Year and month when revenue is recognized.
          required: true
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2022-04
        - name: aggregationField
          in: query
          description: Report aggregation field.
          required: true
          schema:
            type: string
            enum:
              - product.accountingCode
              - product.id
              - plan.id
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportJournal'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                currency: 'USD',
                bookedFrom: '2022-01',
                bookedTo: '2022-06',
                recognizedAt: '2022-06',
                aggregationField: 'product.accountingCode',
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getJournal(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getJournal(
                'USD',
                '2022-04',
                'product.id',
                limit: 5,
            );
  /experimental/reports/kyc-acceptance-summary:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a KYC acceptance summary report
      operationId: GetKycAcceptanceSummaryReport
      x-sdk-operation-name: getKycAcceptanceSummary
      description: Retrieves a Know Your Customer (KYC) acceptance summary report.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Report retrieved.
          content:
            application/json:
              schema:
                type: object
                title: GetKycAcceptanceSummaryResponse
                properties:
                  data:
                    description: KYC acceptance data.
                    type: array
                    items:
                      type: object
                      description: Amount of accepted KYC documents.
                      readOnly: true
                      properties:
                        documentType:
                          allOf:
                            - description: Type of KYC document.
                              example: address-proof
                            - $ref: '#/components/schemas/KycDocumentTypes'
                        statusStatistics:
                          type: object
                          description: Statistics for each status.
                          properties:
                            accepted:
                              type: object
                              description: Statistics for the `accepted` status.
                              properties:
                                total:
                                  type: integer
                                  description: Total amount of accepted documents.
                                  example: 6
                                automatically:
                                  type: integer
                                  description: >-
                                    Amount of documents that have been accepted
                                    automatically.
                                  example: 4
                                manually:
                                  type: integer
                                  description: >-
                                    Amount of documents that have been accepted
                                    by reviewer.
                                  example: 2
                                afterAutoRejected:
                                  type: integer
                                  description: >-
                                    Amount of documents that have been rejected
                                    automatically and then accepted by reviewer.
                                  example: 2
                            rejected:
                              type: object
                              description: Statistics for the `rejected` status.
                              properties:
                                total:
                                  type: integer
                                  description: Total amount of rejected documents.
                                  example: 2
                                automatically:
                                  type: integer
                                  description: >-
                                    Amount of documents that have been rejected
                                    automatically.
                                  example: 1
                                manually:
                                  type: integer
                                  description: >-
                                    Amount of documents that have been rejected
                                    by reviewer.
                                  example: 1
                                afterAutoAccepted:
                                  type: integer
                                  description: >-
                                    Amount of documents that have been accepted
                                    automatically and then rejected by reviewer.
                                  example: 1
                            pending:
                              type: object
                              description: Statistics for the `pending` status.
                              properties:
                                total:
                                  type: integer
                                  description: Total amount of pending documents.
                                  example: 0
                            archived:
                              type: object
                              description: Statistics for the `archived` status.
                              properties:
                                total:
                                  type: integer
                                  description: Total amount of archived documents.
                                  example: 0
                        total:
                          type: integer
                          description: Total amount of documents.
                          example: 8
                        accuracyRate:
                          type: number
                          description: >-
                            Percentage of automatically accepted and rejected
                            documents that remain in the same status after
                            review.

                            Calculated based on the following: `(non-archived
                            total - accepted auto rejected - rejected auto
                            accepted)/non-archived total`.
                          example: 62.5
                        acceptanceRate:
                          type: number
                          description: >-
                            Percentage of accepted documents from the total
                            number of KYC documents.

                            Calculated based on the following: `accepted total /
                            total of non-archived documents`.
                          example: 75
                        manualReviewTime:
                          type: number
                          description: >-
                            Median duration in minutes between review and
                            created time for manually reviewed documents.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getKycAcceptanceSummary(
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
            );
  /experimental/reports/kyc-rejection-summary:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a KYC rejections report
      operationId: GetKycRejectionSummaryReport
      x-sdk-operation-name: getKycRejectionSummary
      description: >-
        Retrieves a Know Your Customer (KYC) rejection report by type and by
        rejection reasons.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportKycRejections'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getKycRejectionSummary(
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
            );
  /experimental/reports/kyc-request-summary:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a KYC requests report
      operationId: GetKycRequestSummaryReport
      x-sdk-operation-name: getKycRequestSummary
      description: >-
        Retrieves a Know Your Customer (KYC) request report by type and by
        rejection reasons.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportKycRequests'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getKycRequestSummary(
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
            );
  /experimental/reports/monthly-recurring-revenue:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a MRR report
      operationId: GetMonthlyRecurringRevenueReport
      x-sdk-operation-name: getMonthlyRecurringRevenue
      description: >-
        Retrieves a Monthly Recurring Revenue (MRR) report.


        Use MRR reports to view information on the predictable recurring revenue
        for your business over a period of months.
      parameters:
        - name: currency
          in: query
          description: Revenue currency.
          required: true
          schema:
            $ref: '#/components/schemas/CurrencyCode'
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2022-01
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2022-06
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportMonthlyRecurringRevenue'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const report = await api.reports.getMonthlyRecurringRevenue({
                periodStart: '2016-09',
                periodEnd: '2017-09',
                limit: 20,
                offset: 0,
                tz: 0
            });
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getMonthlyRecurringRevenue(
                'USD',
                '2022-01',
                '2022-03',
                limit: 5,
            );
  /experimental/reports/renewal-sales:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a renewal sales report
      operationId: GetRenewalSaleReport
      x-sdk-operation-name: getRenewalSales
      description: Retrieves a renewal sales report.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2022-01
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2022-02
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RenewalSales'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                periodStart: '2017-09',
                periodEnd: '2017-09',
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getRenewalSales(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getRenewalSales(
                '2022-01',
                '2022-03',
                limit: 5,
            );
  /experimental/reports/retention-percentage:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a retention percentage report
      operationId: GetRetentionPercentageReport
      x-sdk-operation-name: getRetentionPercentage
      description: Retrieves a retention percentage report.
      parameters:
        - name: aggregationField
          in: query
          description: Report aggregation field.
          required: true
          schema:
            type: string
            enum:
              - day
              - month
              - quarter
              - year
        - name: aggregationPeriod
          in: query
          description: Report aggregation period.
          required: true
          schema:
            type: string
            enum:
              - day
              - month
              - quarter
              - year
              - cycle
        - name: includeSwitchedSubscriptions
          in: query
          description: Specifies whether to include switched subscriptions.
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionCriteria'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportRetentionPercentage'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                aggregationField: 'month',
                aggregationPeriod: 'month',
                periodStart: '2016-09-01T00:00:00Z',
                periodEnd: '2017-09-01T00:00:00Z',
                includeSwitchedSubscriptions: false,
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getRetentionPercentage(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getRetentionPercentage(
                'day',
                'month',
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                limit: 5,
            );
  /experimental/reports/retention-value:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a retention value report
      operationId: GetRetentionValueReport
      x-sdk-operation-name: getRetentionValue
      description: >-
        Retrieves the total number of new customers for each aggregation period
        and the corresponding value for each customer over time.
      parameters:
        - name: aggregationField
          in: query
          description: Report aggregation field.
          required: true
          schema:
            type: string
            enum:
              - day
              - month
              - quarter
              - year
              - leadsSource
              - leadsMedium
              - leadsCampaign
              - leadsContent
              - leadsTerm
              - leadsAffiliate
              - leadsSubAffiliate
              - leadsSalesAgent
              - bin
        - name: aggregationPeriod
          in: query
          description: Report aggregation period.
          required: true
          schema:
            type: string
            enum:
              - day
              - month
              - quarter
              - year
        - name: includeRefunds
          in: query
          description: Specifies whether to include refunds.
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
        - name: includeDisputes
          in: query
          description: Specifies whether to include disputes.
          schema:
            type: string
            enum:
              - 'true'
              - 'false'
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionCriteria'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportRetentionValue'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                aggregationField: 'month',
                aggregationPeriod: 'month',
                periodStart: '2016-09-01T00:00:00Z',
                periodEnd: '2017-09-01T00:00:00Z',
                includeRefunds: true,
                includeDisputes: false,
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getRetentionValue(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getRetentionValue(
                'month',
                'day',
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                limit: 5,
            );
  /experimental/reports/revenue-waterfall:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a revenue waterfall report
      operationId: GetRevenueWaterfallReport
      x-sdk-operation-name: getRevenueWaterfall
      description: >-
        Retrieves a revenue waterfall report.


        Use revenue waterfall reports to view revenue that is recognized up to a
        given month.

        Revenue waterfall reports contain information on booked revenue,

        recognized revenue for the months in the issued period,

        and the remaining revenue up to the specified month.
      parameters:
        - name: currency
          in: query
          description: Revenue currency.
          required: true
          schema:
            $ref: '#/components/schemas/CurrencyCode'
        - name: issuedFrom
          in: query
          description: Date from which revenue invoice is issued.
          required: true
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2022-01
        - name: issuedTo
          in: query
          description: Date to which revenue invoice is issued.
          required: true
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2022-04
        - name: recognizedTo
          in: query
          description: Month up to which revenue is recognized.
          required: true
          schema:
            type: string
            pattern: ^\d{4}-\d{2}$
            example: 2022-04
      responses:
        '200':
          description: Report retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportRevenueWaterfall'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const report = await api.reports.getRevenueWaterfall({
                issuedFrom: '2016-09',
                issuedTo: '2017-09',
                recognizedTo: '2017-09',
                limit: 20,
                offset: 0,
                tz: 0
            });
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getRevenueWaterfall(
                'USD',
                '2022-01',
                '2022-02',
                '2022-02',
            );
  /experimental/reports/revenue-audit:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a revenue audit report
      operationId: GetRevenueAuditReport
      x-sdk-operation-name: getRevenueAudit
      description: >-
        Retrieves a revenue audit report which contains detailed journal
        entries.


        A revenue audit report is a combination of a granular [revenue
        waterfall](https://www.rebilly.com/docs/data-tables/revenue-recognition/#revenue-waterfall)
        and a journal report,

        which describes revenue per account.

        Use [`filter`](https://www.rebilly.com/docs/dev-docs/search-filters)
        `limit` and `offset` parameters to restrict the output.
      security:
        - SecretApiKey: []
        - JWT: []
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Revenue audit report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RevenueEntry'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getRevenueAudit(limit: 5);
  /experimental/reports/subscription-cancellation:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a subscription cancellation report
      operationId: GetSubscriptionCancellationReport
      x-sdk-operation-name: getSubscriptionCancellation
      description: Retrieves a subscription cancellation report.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - name: aggregationField
          in: query
          description: Report aggregation field.
          required: true
          schema:
            type: string
            enum:
              - planId
              - websiteId
              - canceledBy
              - cancelCategory
              - leadSource.source
              - leadSource.medium
              - leadSource.campaign
              - leadSource.content
              - leadSource.term
              - leadSource.affiliate
              - leadSource.subAffiliate
              - leadSource.salesAgent
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionCancellationReport'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: >-
            const params = {
                aggregationField: 'day',
                periodStart: '2017-09-21T00:00:00Z',
                periodEnd: '2017-09-28T23:59:59Z',
                limit: 20,
                offset: 0,
                tz: 0
            };

            const report = await
            api.reports.getSubscriptionCancellation(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getSubscriptionCancellation(
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                'leadSource.source',
                limit: 5,
            );
  /experimental/reports/subscription-renewal:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a subscription renewal report
      operationId: GetSubscriptionRenewalReport
      x-sdk-operation-name: getSubscriptionRenewal
      description: Retrieves a subscription renewal report.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionRenewal'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                periodStart: '2017-09-21T00:00:00Z',
                periodEnd: '2017-09-28T23:59:59Z',
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getSubscriptionRenewal(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getSubscriptionRenewal(
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                limit: 5,
            );
  /experimental/reports/tax:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a tax report
      operationId: GetTaxReport
      x-sdk-operation-name: getTax
      description: |-
        Retrieves a tax report, which displays taxes collected on sales.
        Tax amounts are aggregated by state and municipality.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - name: accountingMethod
          in: query
          description: Accounting method to use when generating the report.
          required: true
          schema:
            type: string
            enum:
              - cash
              - accrual
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportTax'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |
            const params = {
                periodStart: '2023-01-01 00:00-00',
                periodEnd: '2023-03-31 23:59:59',
                accountingMethod: 'cash',
                limit: 20,
                offset: 0,
            };
            const report = await api.reports.getTax(params);
  /experimental/reports/time-series-transaction:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a time series transactions report
      operationId: GetTimeSeriesTransactionReport
      x-sdk-operation-name: getTimeSeriesTransaction
      description: Retrieves a transactions report that is aggregated by time periods.
      parameters:
        - name: type
          in: query
          description: Type of report aggregation.
          required: true
          schema:
            type: string
            enum:
              - count
              - amount
              - approval-rate
              - incomplete-rate
        - name: subaggregate
          in: query
          description: Report subaggregate.
          required: true
          schema:
            type: string
            enum:
              - website
              - gateway-account
              - currency
              - plan
              - leads.source
              - leads.medium
              - leads.campaign
              - leads.content
              - leads.term
              - leads.affiliate
              - leads.subaffiliate
              - leads.sales-agent
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TimeSeriesTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                periodStart: '2017-08-29T00:00:00Z',
                periodEnd: '2017-09-29T23:59:59Z',
                type: 'count',
                subaggregate: 'gateway-account',
                limit: 20,
                offset: 0
            };
            const report = await api.reports.getTimeSeriesTransaction(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getTimeSeriesTransaction(
                'approval-rate',
                'leads.sales-agent',
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
            );
  /experimental/reports/transactions-time-dispute:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a transaction time dispute report
      operationId: GetTransactionTimeDisputeReport
      x-sdk-operation-name: getTransactionsTimeDispute
      description: >-
        Retrieves a dispute delay in days report.

        This report describes the amount of time between a transaction and a
        dispute.
      parameters:
        - name: aggregationField
          in: query
          description: Report aggregation field.
          required: true
          schema:
            type: string
            enum:
              - website
              - processor
              - currency
              - bin
              - country
              - rebillNumber
              - retryNumber
              - gatewayAccount
              - transactionAmount
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportDisputeDelays'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                aggregationField: 'website',
                periodStart: '2017-09-22T00:00:00Z',
                periodEnd: '2017-09-29T23:59:59Z',
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getTransactionsTimeDispute(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getTransactionsTimeDispute(
                'rebillNumber',
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                limit: 5,
            );
  /experimental/reports/transactions:
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Reports
      summary: Retrieve a transactions report
      operationId: GetTransactionReport
      x-sdk-operation-name: getTransactions
      description: Retrieves a transactions report.
      parameters:
        - name: periodStart
          in: query
          description: Date and time when the report starts.
          required: true
          schema:
            type: string
            format: date-time
        - name: periodEnd
          in: query
          description: Date and time when the report ends.
          required: true
          schema:
            type: string
            format: date-time
        - name: aggregationField
          in: query
          description: Report aggregation field.
          required: true
          schema:
            type: string
            enum:
              - website
              - currency
              - bin
              - rebillNumber
              - transactionResult
              - transactionType
              - gatewayAccount
              - gateway
              - retryNumber
              - plan
              - cardBrand
              - leadSource.source
              - leadSource.medium
              - leadSource.campaign
              - leadSource.content
              - leadSource.term
              - leadSource.affiliate
              - leadSource.subAffiliate
              - leadSource.salesAgent
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
      responses:
        '200':
          description: Report retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReportTransactions'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: JavaScript
          source: |-
            const params = {
                aggregationField: 'website',
                periodStart: '2017-09-22T00:00:00Z',
                periodEnd: '2017-09-29T23:59:59Z',
                limit: 20,
                offset: 0,
                tz: 0
            };
            const report = await api.reports.getTransactions(params);
        - lang: PHP
          source: |-
            $service = new \Rebilly\Sdk\Service($client);

            $report = $service->reports()->getTransactions(
                new \DateTimeImmutable('2022-01-01'),
                new \DateTimeImmutable('now'),
                'leadSource.subAffiliate',
                limit: 5,
            );
  /experimental/subscriptions/{subscriptionId}/summary-metrics:
    parameters:
      - name: subscriptionId
        in: path
        required: true
        description: ID of the subscription order.
        schema:
          type: string
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Reports
      tags:
        - Orders
      summary: Retrieve subscription order summary metrics
      operationId: GetSubscriptionSummaryMetricReport
      x-sdk-operation-name: getSubscriptionSummaryMetrics
      description: Retrieves summary metrics for a subscription order with a specified ID.
      responses:
        '200':
          description: Metrics retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubscriptionSummaryMetrics'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
      x-codeSamples:
        - lang: PHP
          source: >-
            $service = new \Rebilly\Sdk\Service($client);


            $report =
            $service->subscriptions()->getSubscriptionSummaryMetrics('subscriptionId');
  /storefront/account:
    get:
      x-products:
        - Storefront
      tags:
        - Storefront account
      summary: Retrieve Account
      operationId: StorefrontGetAccount
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: Retrieve account.
      parameters:
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: Account retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    patch:
      x-products:
        - Storefront
      tags:
        - Storefront account
      summary: Update Account
      operationId: StorefrontPatchAccount
      x-sdk-operation-name: update
      security:
        - CustomerJWT: []
      description: Register account.
      requestBody:
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/StorefrontAccount'
      responses:
        '200':
          description: Account updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/account/forgot-password:
    post:
      x-products:
        - Storefront
      tags:
        - Storefront account
      summary: Request a password reset
      operationId: StorefrontPostForgotPassword
      x-sdk-operation-name: requestPasswordReset
      security:
        - PublishableApiKey: []
      description: Sends an email with a link containing a token to reset a user password.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - username
              properties:
                username:
                  description: >-
                    Username of the account to which a verification email is
                    sent.
                  type: string
      responses:
        '204':
          description: Email sent.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/account/password:
    patch:
      x-products:
        - Storefront
      tags:
        - Storefront account
      summary: Change an account password
      operationId: StorefrontPatchAccountPassword
      x-sdk-operation-name: changePassword
      security:
        - CustomerJWT: []
      description: Changes an account password.
      requestBody:
        $ref: '#/components/requestBodies/PatchAccountPassword'
      responses:
        '200':
          description: Account password updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/account/resend-verification:
    post:
      x-products:
        - Storefront
      tags:
        - Storefront account
      summary: Resend email verification
      operationId: StorefrontPostAccountResendVerification
      x-sdk-operation-name: resendEmailVerification
      security:
        - PublishableApiKey: []
      description: Resends a verification email for an account with a specified username.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - username
              properties:
                username:
                  description: >-
                    Username of the account to which a verification email is
                    sent.
                  type: string
      responses:
        '204':
          description: Email sent.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/account/reset-password/{token}:
    parameters:
      - $ref: '#/components/parameters/token'
    post:
      x-products:
        - Storefront
      tags:
        - Storefront account
      summary: Finish password reset
      operationId: StorefrontPostResetPassword
      x-sdk-operation-name: confirmPasswordReset
      security:
        - PublishableApiKey: []
      description: Resets a user's account password.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - newPassword
              properties:
                newPassword:
                  type: string
                  example: newP@$$w0rd
                  description: New user account password.
      responses:
        '201':
          description: Password reset.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/account/verification/{token}:
    parameters:
      - $ref: '#/components/parameters/token'
    post:
      x-products:
        - Storefront
      tags:
        - Storefront account
      summary: Verify an account email
      operationId: StorefrontPostAccountVerification
      x-sdk-operation-name: verifyEmail
      security:
        - PublishableApiKey: []
      description: Verifies an account email.
      responses:
        '204':
          description: Account verified.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/billing-portals/{slug}:
    parameters:
      - name: slug
        in: path
        description: Resource slug.
        required: true
        schema:
          type: string
          maxLength: 100
          pattern: ^[@~\-\.\w]+$
    get:
      x-products:
        - Storefront
      tags:
        - Storefront billing portals
      summary: Retrieve a billing portal
      operationId: StorefrontGetBillingPortal
      x-sdk-operation-name: get
      description: Retrieve a billing portal with a specified slug.
      security: []
      responses:
        '200':
          description: Billing portal retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontBillingPortal'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /storefront/deposit-strategies/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      x-badges:
        - name: Experimental
      tags:
        - Storefront deposits
      summary: Retrieve a deposit strategy
      operationId: StorefrontGetDepositStrategy
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      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'
  /storefront/deposit-requests/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      x-badges:
        - name: Experimental
      tags:
        - Storefront deposits
      summary: Retrieve a deposit request
      operationId: StorefrontGetDepositRequest
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: Retrieves a deposit request with a specified ID.
      parameters:
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: Deposit request retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DepositRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /storefront/deposit:
    post:
      x-products:
        - Storefront
      x-badges:
        - name: Experimental
      tags:
        - Storefront deposits
      summary: Create a deposit
      operationId: StorefrontPostDeposit
      x-sdk-operation-name: create
      security:
        - CustomerJWT: []
      description: Creates a deposit transaction.
      requestBody:
        $ref: '#/components/requestBodies/PostDeposit'
      responses:
        '201':
          description: Transaction created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/checkout-forms/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront checkout forms
      summary: Retrieve a checkout form
      operationId: StorefrontGetCheckoutForm
      x-sdk-operation-name: get
      description: Retrieves a checkout form with a specified ID.
      security: []
      responses:
        '200':
          description: Checkout form retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontCheckoutForm'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /storefront/custom-fields/{resource}:
    parameters:
      - $ref: '#/components/parameters/storefrontCustomFieldResource'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront custom fields
      summary: Retrieve custom fields
      operationId: StorefrontGetCustomFieldCollection
      x-sdk-operation-name: getAll
      security:
        - CustomerJWT: []
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      description: Retrieves the custom fields schema for a specified resource.
      responses:
        '200':
          description: Schema of custom fields retrieved.
          content:
            application/json:
              schema:
                description: List of custom fields.
                type: array
                items:
                  $ref: '#/components/schemas/CustomField'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /storefront/invoices:
    get:
      x-products:
        - Storefront
      tags:
        - Storefront invoices
      summary: Retrieve invoices
      operationId: StorefrontGetInvoiceCollection
      x-sdk-operation-name: getAll
      security:
        - CustomerJWT: []
      description: Retrieve a list of invoices.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: Invoices retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StorefrontInvoice'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /storefront/invoices/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront invoices
      summary: Retrieve a Invoice
      operationId: StorefrontGetInvoice
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: Retrieves an invoice with a specified ID.
      parameters:
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: Invoice retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontInvoice'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    patch:
      x-products:
        - Storefront
      tags:
        - Storefront invoices
      summary: Update an invoice
      operationId: StorefrontPatchInvoice
      x-sdk-operation-name: update
      security:
        - CustomerJWT: []
      description: Updates an invoice with a specified ID.
      requestBody:
        $ref: '#/components/requestBodies/PatchInvoice'
      responses:
        '200':
          description: Invoice updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontInvoice'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/orders/{id}/upcoming-invoice:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront orders
      summary: Retrieve an upcoming order invoice
      operationId: StorefrontGetOrderUpcomingInvoice
      x-sdk-operation-name: getUpcomingInvoice
      security:
        - CustomerJWT: []
      description: >-
        Retrieves an upcoming invoice for a specified order.


        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/StorefrontUpcomingInvoice'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /storefront/kyc-documents:
    get:
      x-products:
        - Storefront
      tags:
        - Storefront KYC documents
      summary: Retrieve KYC documents
      operationId: StorefrontGetKycDocumentCollection
      x-sdk-operation-name: getAll
      security:
        - CustomerJWT: []
      description: Retrieves a list of KYC documents.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      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/StorefrontKycDocument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Storefront
      tags:
        - Storefront KYC documents
      summary: Create a KYC document
      operationId: StorefrontPostKycDocument
      x-sdk-operation-name: create
      security:
        - CustomerJWT: []
      description: Creates a KYC document.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorefrontKycDocument'
        description: KYC document resource.
        required: true
      responses:
        '201':
          description: KYC document created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontKycDocument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/kyc-documents/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront KYC documents
      summary: Retrieve a KYC Document
      operationId: StorefrontGetKycDocument
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: Retrieves a KYC document with a specified ID.
      responses:
        '200':
          description: KYC document retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontKycDocument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      x-products:
        - Storefront
      tags:
        - Storefront KYC documents
      summary: Update a KYC document
      operationId: StorefrontPatchKycDocument
      x-sdk-operation-name: update
      security:
        - CustomerJWT: []
      description: Updates a KYC document with a specified ID.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorefrontKycDocument'
        description: KYC document resource.
        required: true
      responses:
        '200':
          description: KYC document updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontKycDocument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/kyc-requests/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront KYC documents
      summary: Retrieve a KYC request
      operationId: StorefrontGetKycRequest
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: Retrieves a KYC request with a specified ID.
      parameters:
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: KYC request retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontKycRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /storefront/kyc-liveness-sessions:
    post:
      x-products:
        - Storefront
      tags:
        - Storefront KYC documents
      summary: Create a KYC liveness session
      operationId: StorefrontPostKycLivenessSession
      x-sdk-operation-name: create
      description: Creates a KYC liveness session.
      security:
        - CustomerJWT: []
      requestBody:
        $ref: '#/components/requestBodies/PostKycLivenessSession'
        description: KYC request resource.
        required: true
      responses:
        '201':
          description: KYC liveness session created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontKycLivenessSession'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/kyc-liveness-sessions/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront KYC documents
      summary: Retrieve a KYC liveness session
      operationId: StorefrontGetKycLivenessSession
      x-sdk-operation-name: get
      description: Retrieves a KYC liveness session with a specified ID.
      security:
        - CustomerJWT: []
      responses:
        '200':
          description: KYC liveness session retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontKycLivenessSession'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /storefront/kyc-liveness-sessions/{id}/finish:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Storefront
      tags:
        - Storefront KYC documents
      summary: Finish KYC liveness session
      operationId: StorefrontPostKycLivenessSessionFinish
      x-sdk-operation-name: finish
      description: Attempt to finalize a pending KYC liveness session.
      security:
        - CustomerJWT: []
      responses:
        '200':
          description: KYC liveness session finalization attempt successful.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontKycLivenessSession'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/login:
    post:
      x-products:
        - Storefront
      tags:
        - Storefront account
      summary: Create a session with username and password
      operationId: StorefrontPostLogin
      x-sdk-operation-name: login
      security:
        - PublishableApiKey: []
      description: Creates a session with a specified username and password.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - username
                - password
              properties:
                username:
                  description: User's username.
                  type: string
                password:
                  description: User's current password.
                  type: string
      responses:
        '201':
          description: Logged into account.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontCustomerJWT'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/logout:
    post:
      x-products:
        - Storefront
      tags:
        - Storefront account
      summary: Destroys the user's current session
      operationId: StorefrontPostLogout
      x-sdk-operation-name: logout
      security:
        - CustomerJWT: []
      description: Destroys the user's current session.
      responses:
        '204':
          description: Account logged out.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/orders:
    get:
      x-products:
        - Storefront
      tags:
        - Storefront orders
      summary: Retrieve orders
      operationId: StorefrontGetOrderCollection
      x-sdk-operation-name: getAll
      security:
        - CustomerJWT: []
      description: Retrieve a list of orders.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: List of orders retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StorefrontOrder'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /storefront/orders/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront orders
      summary: Retrieve an order
      operationId: StorefrontGetOrder
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      parameters:
        - $ref: '#/components/parameters/collectionExpand'
      description: Retrieve an order with a specified ID.
      responses:
        '200':
          description: Order retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontOrder'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      x-products:
        - Storefront
      tags:
        - Storefront orders
      summary: Update an order
      operationId: StorefrontPatchOrder
      x-sdk-operation-name: update
      security:
        - CustomerJWT: []
      description: Updates an order with a specified ID.
      requestBody:
        $ref: '#/components/requestBodies/PatchOrder'
      responses:
        '200':
          description: Order updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontOrder'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/orders/{id}/cancellation:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Storefront
      tags:
        - Storefront orders
      summary: Cancel an order
      operationId: StorefrontPostOrderCancellation
      x-sdk-operation-name: cancel
      security:
        - CustomerJWT: []
      description: Cancels an order with a specified ID.
      requestBody:
        $ref: '#/components/requestBodies/PostOrderCancellation'
      responses:
        '201':
          description: Order canceled.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontOrder'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/orders/{id}/pause:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Storefront
      tags:
        - Storefront orders
      summary: Pause a subscription order
      operationId: StorefrontPostOrderPause
      x-sdk-operation-name: pause
      security:
        - CustomerJWT: []
      description: Pauses an order with a specified ID.
      requestBody:
        $ref: '#/components/requestBodies/PostOrderPause'
      responses:
        '201':
          description: Order paused.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontOrder'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/subscriptions/{id}/change-items:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-badges:
        - name: Experimental
      x-products:
        - Storefront
      tags:
        - Storefront orders
      summary: Change subscription items
      operationId: StorefrontPostSubscriptionItemsChange
      x-sdk-operation-name: changeItems
      security:
        - CustomerJWT: []
      description: >-
        Creates a quote for requested changes to items and quantities.

        This operation applies the requested changes to the subscription when
        the quote is accepted.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostSubscriptionItemsChange'
        description: Change items request.
        required: true
      responses:
        '201':
          description: >-
            Quote for requested changes to items and quantities is created and
            issued.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontChangeOrderItems'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/subscription-reactivations:
    post:
      x-badges:
        - name: Experimental
      x-products:
        - Storefront
      tags:
        - Storefront orders
      summary: Reactivate a subscription
      operationId: StorefrontPostSubscriptionReactivation
      x-sdk-operation-name: reactivation
      security:
        - CustomerJWT: []
      description: >-
        Creates a quote for requested reactivation.

        This operation applies the requested reactivation to the subscription
        when the quote invoice is paid.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostSubscriptionReactivation'
        description: Change items request.
      responses:
        '201':
          description: Quote for requested reactivation is created and issued.
          headers:
            Location:
              $ref: '#/components/headers/Location'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontQuoteReactivateOrder'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
  /storefront/payment:
    post:
      x-products:
        - Storefront
      tags:
        - Storefront purchases
      summary: Perform a payment
      operationId: StorefrontPostPayment
      x-sdk-operation-name: payment
      security:
        - CustomerJWT: []
        - PublishableApiKey: []
      description: >-
        Performs a payment for a transaction or an invoice.


        If the customer's JSON Web Token (JWT) contains a `transactionId`, or
        `invoiceId` value,

        these values are used instead of the JWT value.

        The `transactionId` has a higher priority than the `invoiceId`.
      requestBody:
        $ref: '#/components/requestBodies/PostPayment'
      responses:
        '200':
          description: Transaction created.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontTransaction'
        '201':
          description: Transaction updated.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/payment-instruments:
    get:
      x-products:
        - Storefront
      tags:
        - Storefront payment instruments
      summary: Retrieve payment instruments
      operationId: StorefrontGetPaymentInstrumentCollection
      x-sdk-operation-name: getAll
      security:
        - CustomerJWT: []
      description: Retrieves a list of payment instruments.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of payment instruments retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StorefrontPaymentInstrument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
    post:
      x-products:
        - Storefront
      tags:
        - Storefront payment instruments
      summary: Create a payment instrument
      operationId: StorefrontPostPaymentInstrument
      x-sdk-operation-name: create
      security:
        - CustomerJWT: []
        - PublishableApiKey: []
      description: >-
        Creates a payment instrument.


        To use this operation,

        you must first create a payment token using
        [FramePay](https://www.rebilly.com/docs/dev-docs/framepay/),

        then provide the token ID in this operation.
      requestBody:
        $ref: '#/components/requestBodies/StorefrontPostPaymentInstrument'
      responses:
        '201':
          description: Payment instrument created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontPaymentInstrument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/payment-instruments/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront payment instruments
      summary: Retrieve a payment instrument
      operationId: StorefrontGetPaymentInstrument
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: Retrieves a payment instrument with a specified ID.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
      responses:
        '200':
          description: Payment instrument retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontPaymentInstrument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      x-products:
        - Storefront
      tags:
        - Storefront payment instruments
      summary: Update payment instrument
      operationId: StorefrontPatchPaymentInstrument
      x-sdk-operation-name: update
      security:
        - CustomerJWT: []
      description: >-
        Updates the values of a payment instrument with a specified ID.


        Use the Framepay payment token ID to update values.

        For more information, see
        [FramePay](https://www.rebilly.com/docs/dev-docs/framepay/).
      requestBody:
        $ref: '#/components/requestBodies/StorefrontPatchPaymentInstrument'
      responses:
        '200':
          description: Payment instrument updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontPaymentInstrument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/payment-instruments/{id}/deactivation:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-products:
        - Storefront
      tags:
        - Storefront payment instruments
      summary: Deactivate a payment instrument
      operationId: StorefrontPostPaymentInstrumentDeactivation
      x-sdk-operation-name: deactivate
      security:
        - CustomerJWT: []
      description: Deactivates a payment instrument with a specified ID.
      responses:
        '201':
          description: Payment instrument deactivated.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontPaymentInstrument'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
      x-codeSamples:
        - lang: JavaScript
          source: >
            const paymentInstrument = await
            api.paymentInstruments.deactivate({id: 'id-to-deactivate'});


            console.log(paymentInstrument.fields.status);
  /storefront/payment-instruments/{id}/setup:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront payment instruments
      summary: Retrieve a payment instrument setup transaction
      operationId: StorefrontGetPaymentInstrumentSetup
      x-sdk-operation-name: getSetupTransaction
      security:
        - CustomerJWT: []
      description: >-
        Retrieves the latest setup transaction for a payment instrument with a
        specified ID.


        For more information, see [Transactions](#Transactions).
      responses:
        '200':
          description: Setup transaction retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    post:
      x-products:
        - Storefront
      tags:
        - Storefront payment instruments
      summary: Create a setup payment instrument transaction
      operationId: StorefrontPostPaymentInstrumentSetup
      x-sdk-operation-name: setup
      security:
        - CustomerJWT: []
      description: >-
        Creates a setup payment instrument transaction.


        This operation makes the payment instrument available for further
        payments.

        Treat the response as a regular transaction.

        For example, approval links must be followed until the transaction is
        completed.
      requestBody:
        $ref: '#/components/requestBodies/SetupPaymentInstrumentRequest'
      responses:
        '201':
          description: Setup transaction created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/payout-requests:
    get:
      x-products:
        - Storefront
      tags:
        - Storefront transactions
      summary: Retrieve payout requests
      operationId: StorefrontGetPayoutRequestCollection
      x-sdk-operation-name: getAll
      security:
        - CustomerJWT: []
      description: Retrieves a list of payout requests.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of payout requests retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StorefrontPayoutRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /storefront/payout-requests/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront transactions
      summary: Retrieve a payout request
      operationId: StorefrontGetPayoutRequest
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: Retrieves a payout request with a specified ID.
      responses:
        '200':
          description: Payout request retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontPayoutRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      x-products:
        - Storefront
      tags:
        - Storefront transactions
      summary: Update a payout request
      operationId: StorefrontPatchPayoutRequest
      x-sdk-operation-name: update
      security:
        - CustomerJWT: []
      description: Update a payout request with a specified ID.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              required:
                - paymentInstrumentId
              properties:
                paymentInstrumentId:
                  type: string
                  description: >-
                    ID of the preferable payment instrument for the payout
                    request.
                  maxLength: 50
                  example: inst_0YVB8KPKNXCBR9EDX7JHSED75N
      responses:
        '200':
          description: Payout request updated.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontPayoutRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/plans:
    get:
      x-products:
        - Storefront
      tags:
        - Storefront plans
      summary: Retrieve a list of plans
      operationId: StorefrontGetPlanCollection
      x-sdk-operation-name: getAll
      security:
        - CustomerJWT: []
      description: Retrieves a list of plans.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: List of plans retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StorefrontPlan'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /storefront/plans/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront plans
      summary: Retrieve a plan
      operationId: StorefrontGetPlan
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: Retrieves a plan with a specified ID.
      parameters:
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: Plan retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontPlan'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /storefront/products:
    get:
      x-products:
        - Storefront
      tags:
        - Storefront products
      summary: Retrieve products
      operationId: StorefrontGetProductCollection
      x-sdk-operation-name: getAll
      security:
        - CustomerJWT: []
      description: Retrieves a list of products.
      parameters:
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionSort'
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionQuery'
      responses:
        '200':
          description: List of products retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StorefrontProduct'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /storefront/products/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront products
      summary: Retrieve a product
      operationId: StorefrontGetProduct
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: Retrieves a product with a specified ID.
      responses:
        '200':
          description: Product retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontProduct'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /storefront/purchase:
    post:
      x-products:
        - Storefront
      tags:
        - Storefront purchases
      summary: Make a purchase
      operationId: StorefrontPostPurchase
      x-sdk-operation-name: purchase
      description: >-
        Executes a purchase.


        A purchase can be completed both with and without authentication.

        Purchases that use a pre-created payment instrument must use
        authentication.


        To preview the purchase before completing it,

        use the [Purchase preview](./StorefrontPostPreviewPurchase) operation.
      security:
        - CustomerJWT: []
        - PublishableApiKey: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorefrontPurchase'
      responses:
        '201':
          description: Order created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontPurchase'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/preview-purchase:
    post:
      x-badges:
        - name: Experimental
      x-products:
        - Storefront
      tags:
        - Storefront purchases
      summary: Preview a purchase
      operationId: StorefrontPostPreviewPurchase
      x-sdk-operation-name: preview
      description: >-
        Previews a purchase.


        Use this operation to preview a purchase before completing it.


        A purchase can be completed both with and without authentication.

        Purchases that use a pre-created payment instrument must use
        authentication.


        > **Warning:** The shipping aspect of this API is experimental and may
        change to support multiple shipping methods.
      security:
        - CustomerJWT: []
        - PublishableApiKey: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/StorefrontOrderPreview'
      responses:
        '200':
          description: Purchase preview retrieved.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontOrderPreview'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/quotes/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-badges:
        - name: Experimental
      x-products:
        - Storefront
      tags:
        - Storefront quotes
      summary: Retrieve a quote
      operationId: StorefrontGetQuote
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: Retrieves a quote with a specified ID.
      parameters:
        - $ref: '#/components/parameters/mediaTypeJsonPdf'
        - $ref: '#/components/parameters/collectionExpand'
      responses:
        '200':
          description: Quote retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontQuote'
            application/pdf:
              schema:
                $ref: '#/components/schemas/StorefrontQuote'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /storefront/quotes/{id}/accept:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-badges:
        - name: Experimental
      x-products:
        - Storefront
      tags:
        - Storefront quotes
      summary: Accept a quote
      operationId: StorefrontPostQuoteAcceptance
      x-sdk-operation-name: accept
      security:
        - CustomerJWT: []
      description: Accepts an issued quote with specified ID.
      responses:
        '200':
          description: Quote accepted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontQuote'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/quotes/{id}/reject:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    post:
      x-badges:
        - name: Experimental
      x-products:
        - Storefront
      tags:
        - Storefront quotes
      summary: Reject a quote
      operationId: StorefrontPostQuoteRejection
      x-sdk-operation-name: reject
      security:
        - CustomerJWT: []
      description: Rejects an issued quote with specified ID.
      responses:
        '200':
          description: Quote rejected.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontQuote'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/ready-to-pay:
    post:
      x-products:
        - Storefront
      tags:
        - Storefront purchases
      summary: Ready to pay
      operationId: StorefrontPostReadyToPay
      x-sdk-operation-name: readyToPay
      security:
        - CustomerJWT: []
        - PublishableApiKey: []
      description: >-
        Retrieves available payment methods for a specific transaction or
        purchase.


        The order in which the payment methods are displayed to the customer
        must 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/puteventrule) and
        [Gateway
        accounts](https://www.rebilly.com/catalog/all/gateway-accounts).


        If this operation to pay is used with a transaction-scoped JSON Web
        Token (JWT), all fields are ignored except `riskMetadata`.
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReadyToPay'
      responses:
        '200':
          description: Payment methods retrieved.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReadyToPayMethods'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/ready-to-payout:
    post:
      x-products:
        - Storefront
      tags:
        - Storefront purchases
      summary: Ready to payout
      operationId: StorefrontPostReadyToPayout
      x-sdk-operation-name: readyToPayout
      security:
        - CustomerJWT: []
      description: >-
        Retrieves available payment methods for a specific payout amount and
        currency.


        The order in which the payment methods are displayed to the customer
        must 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-payout` action on the
        `ready-to-payout-requested` event.

        If no rules match for the specific request, all methods supported by the
        gateway accounts are sent.


        To invert this behavior, place all matching rules at the end of the
        `ready-to-payout-requested` event in the rules engine,

        and include an empty `paymentMethods` property for the
        `adjust-ready-to-payout` action.


        For more information, see [Update event
        rules](https://www.rebilly.com/catalog/all/rules/puteventrule/) and
        [Gateway
        accounts](https://www.rebilly.com/catalog/all/gateway-accounts).
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ReadyToPayout'
      responses:
        '200':
          description: Payment methods retrieved.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReadyToPayoutMethods'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/register:
    post:
      x-products:
        - Storefront
      tags:
        - Storefront account
      summary: Register Account
      operationId: StorefrontPostRegister
      x-sdk-operation-name: register
      security:
        - PublishableApiKey: []
      description: Register account.
      requestBody:
        $ref: '#/components/requestBodies/PostRegister'
      responses:
        '201':
          description: Account registered.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontAccount'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/subscriptions:
    post:
      x-badges:
        - name: Experimental
      x-products:
        - Storefront
      tags:
        - Storefront orders
      summary: Create a subscription
      operationId: StorefrontPostSubscription
      x-sdk-operation-name: create
      description: Creates a subscription order in a billing portal.
      security:
        - CustomerJWT: []
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PostSubscription'
        description: Create an order request.
        required: true
      responses:
        '201':
          description: Subscription created.
          headers:
            Location:
              $ref: '#/components/headers/Location'
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontOrder'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '422':
          $ref: '#/components/responses/ValidationError'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/transactions:
    get:
      x-products:
        - Storefront
      tags:
        - Storefront transactions
      summary: Retrieve transactions
      operationId: StorefrontGetTransactionCollection
      x-sdk-operation-name: getAll
      security:
        - CustomerJWT: []
      description: Retrieve a list of transactions.
      parameters:
        - $ref: '#/components/parameters/collectionLimit'
        - $ref: '#/components/parameters/collectionOffset'
        - $ref: '#/components/parameters/collectionFilter'
        - $ref: '#/components/parameters/collectionQuery'
        - $ref: '#/components/parameters/collectionSort'
      responses:
        '200':
          description: Transactions retrieved.
          headers:
            Pagination-Total:
              $ref: '#/components/headers/Pagination-Total'
            Pagination-Limit:
              $ref: '#/components/headers/Pagination-Limit'
            Pagination-Offset:
              $ref: '#/components/headers/Pagination-Offset'
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/StorefrontTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
  /storefront/transactions/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront transactions
      summary: Retrieve a transaction
      operationId: StorefrontGetTransaction
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: Retrieves a transaction with a specified ID.
      responses:
        '200':
          description: Transaction retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /storefront/transactions/{id}/{token}/continue:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/token'
    post:
      x-products:
        - Storefront
      tags:
        - Storefront transactions
      summary: Finish a transaction KYC verification
      operationId: StorefrontPostKycRequestContinue
      x-sdk-operation-name: finishKyc
      security:
        - CustomerJWT: []
      description: >-
        Process a KYC interrupted transaction with a specified ID.


        Use this operation to process the transaction after all documents of the
        KYC request with a specified token have been uploaded.
      responses:
        '200':
          description: KYC verification finished.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          $ref: '#/components/responses/Conflict'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/transactions/{id}/{token}/bypass:
    parameters:
      - $ref: '#/components/parameters/resourceId'
      - $ref: '#/components/parameters/token'
    post:
      x-products:
        - Storefront
      tags:
        - Storefront transactions
      summary: Skip a transaction KYC verification
      operationId: StorefrontPostKycRequestBypass
      x-sdk-operation-name: skipKyc
      security:
        - CustomerJWT: []
      description: >-
        Skips an optional KYC request with a specified token, for a transaction
        with a specified ID.


        Use this operation to skip a KYC request that has been marked as
        optional in a transaction flow, so that you can further process the
        transaction.
      responses:
        '200':
          description: KYC verification skipped.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/StorefrontTransaction'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /storefront/websites/{id}:
    parameters:
      - $ref: '#/components/parameters/resourceId'
    get:
      x-products:
        - Storefront
      tags:
        - Storefront websites
      summary: Retrieve a website
      operationId: StorefrontGetWebsite
      x-sdk-operation-name: get
      security:
        - CustomerJWT: []
      description: |-
        Retrieves a website with a specified ID.
        Use this operation to find the website name, logo, or more.
      responses:
        '200':
          description: Website retrieved.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Website'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
  /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: GetTagsRulesCollection
      x-sdk-operation-name: getAllTagsRules
      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: PostTagRules
      x-sdk-operation-name: createTagsRule
      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: GetTagsRule
      x-sdk-operation-name: getTagsRule
      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: PutTagsRule
      x-sdk-operation-name: updateTagsRule
      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: DeleteTagsRule
      x-sdk-operation-name: deleteTagsRule
      description: Deletes a tags rule with a specified ID.
      responses:
        '204':
          description: Tags rule deleted.
          headers:
            X-RateLimit-Limit:
              $ref: '#/components/headers/X-RateLimit-Limit'
            X-RateLimit-Remaining:
              $ref: '#/components/headers/X-RateLimit-Remaining'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
webhooks:
  application-instance-disabled:
    post:
      summary: Application instance was disabled
      operationId: application-instance-disabled
      x-products:
        - Users
      tags:
        - Application owners
      requestBody:
        $ref: '#/components/requestBodies/ApplicationInstanceDisabled'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  application-instance-enabled:
    post:
      summary: Application instance was enabled
      operationId: application-instance-enabled
      x-products:
        - Users
      tags:
        - Application owners
      requestBody:
        $ref: '#/components/requestBodies/ApplicationInstanceEnabled'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  aml-list-possibly-matched:
    post:
      summary: AML list possibly matched
      operationId: aml-list-possibly-matched
      x-products:
        - Core
      tags:
        - AML
      requestBody:
        $ref: '#/components/requestBodies/CustomerWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  balance-transaction-settled:
    post:
      summary: Balance transaction settled
      operationId: balance-transaction-settled
      tags:
        - Balance transactions
      x-products:
        - Users
      requestBody:
        $ref: '#/components/requestBodies/InvoiceRevenueRecognized'
      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-downtime-ended:
    post:
      summary: Gateway account downtime ended
      operationId: gateway-account-downtime-ended
      x-products:
        - Users
      tags:
        - Gateway accounts
      requestBody:
        $ref: '#/components/requestBodies/GatewayAccountWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  gateway-account-downtime-started:
    post:
      summary: Gateway account downtime started
      operationId: gateway-account-downtime-started
      x-products:
        - Users
      tags:
        - Gateway accounts
      requestBody:
        $ref: '#/components/requestBodies/GatewayAccountWebhook'
      responses:
        2XX:
          description: Returns any 2xx status to indicate that data is received.
  gateway-account-limit-reached:
    post:
      summary: Gateway account limit reached
      operationId: gateway-account-limit-reached
      x-products:
        - Users
      tags:
        - Gateway accounts
      requestBody:
        $ref: '#/components/requestBodies/GatewayAccountAndGatewayAccountLimit'
      responses:
        2XX:
          description: Returns any 2xx status to indicate that data is received.
  gateway-account-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.
  nsf-response-received:
    post:
      summary: NSF response received
      operationId: nsf-response-received
      x-products:
        - Core
      tags:
        - Transactions
      requestBody:
        $ref: '#/components/requestBodies/TransactionWebhook'
      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.
  data-export-completed:
    post:
      summary: Data export completed
      operationId: data-export-completed
      x-products:
        - Reports
      tags:
        - Data exports
      requestBody:
        $ref: '#/components/requestBodies/DataExportWebhook'
      responses:
        2xx:
          description: Returns any 2xx status to indicate that data is received.
  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.
