> ## Documentation Index
> Fetch the complete documentation index at: https://docs-consumer.voucher.allride.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Update the billing account

> Changes your billing data (JSON Merge Patch). `mode`, `paymentTermsDays`, `voidedRedemptionsBillable` and `preferredPaymentMethodType` are set by AllRide (`400 data-failed-validation` with item `admin-only-field`): AllRide decides whether you pay by SEPA Direct Debit or by bank transfer. Changing `vatId` or `address.country` resets `vatIdStatus` to `unverified` and starts a VIES check. The account status is re-derived in the same transaction. Allowed while your partner is suspended, so you can fix billing data. See the [billing guide](/consumer/billing).

**Required permissions:** `manage-consumer-billing` · **API keys:** not allowed · **Recent sign-in:** required for dashboard users (15 minutes)

> [!NOTE]
>
> Dashboard session only. API keys cannot call this operation.


## OpenAPI

````yaml /openapi/consumer.v1.json patch /consumer/v1/billing/account
openapi: 3.1.1
info:
  title: AllRide Voucher Consumer API
  version: 1.0.0
  description: >-
    The Consumer API (`/consumer/v1`) and the shared Workspace API
    (`/partner/v1`) of the AllRide Voucher Platform for Partner Consumers:
    browse your catalog, redeem vouchers, manage redemption entities and
    Redemption Links, configure email OTP, read analytics and billing, and
    administer your workspace. Start with the
    [quickstart](https://docs-consumer.voucher.allride.io/quickstart). This
    document lists the sandbox server; production uses
    `https://api.voucher.allride.io`.
  contact:
    name: AllRide
    url: https://allride.io
servers:
  - url: https://api.voucher-staging.allride.io
    description: Sandbox
security:
  - apiKey: []
tags:
  - name: Catalog
    description: >-
      Browse the providers, voucher sets and categories AllRide makes available
      to you.
  - name: Catalog settings
    description: >-
      Turn providers and voucher sets on or off for your channels and keep your
      own settings and references.
  - name: Redemptions
    description: >-
      Redeem vouchers (single or batch), read issued codes and links, and void
      redemptions.
  - name: Redemption entities
    description: Your end customers or accounts, identified by your own opaque `refId`.
  - name: Redemption links
    description: >-
      Shareable links that let an end customer redeem on an AllRide-hosted
      landing page.
  - name: Email (SMTP and templates)
    description: >-
      Email OTP Gate settings, your SMTP configuration and the OTP email
      templates.
  - name: Analytics
    description: Redemption, entity and link statistics in your partner time zone.
  - name: Billing
    description: >-
      Billing account, contacts, payment methods, invoices (including
      Stornorechnungen), payments, usage and balance.
  - name: Pricing
    description: Your resolved Price Terms per voucher set and your Price Acceptances.
  - name: Partner
    description: >-
      Your partner record, settings, principal introspection, API access and the
      developer reference.
  - name: Members
    description: Users of your partner and their invitations.
  - name: Groups
    description: Groups, their permissions and the permission catalog.
  - name: API keys
    description: API keys of your partner (dashboard only).
  - name: Webhook endpoints
    description: Webhook endpoints, their secrets and the event types you can subscribe to.
  - name: Webhook deliveries
    description: The webhook delivery log and replays.
  - name: IP allowlist
    description: Source address ranges allowed to call the API.
  - name: Custom domains
    description: Your own host names for Redemption Link landing pages.
  - name: Workspace branding
    description: Workspace Branding (dashboards and landing pages) and brand assets.
  - name: Single sign-on
    description: SAML and OIDC connections for your users.
  - name: Audit log
    description: Every change made in your partner, by whom and when.
paths:
  /consumer/v1/billing/account:
    patch:
      tags:
        - Billing
      summary: Update the billing account
      description: >-
        Changes your billing data (JSON Merge Patch). `mode`,
        `paymentTermsDays`, `voidedRedemptionsBillable` and
        `preferredPaymentMethodType` are set by AllRide (`400
        data-failed-validation` with item `admin-only-field`): AllRide decides
        whether you pay by SEPA Direct Debit or by bank transfer. Changing
        `vatId` or `address.country` resets `vatIdStatus` to `unverified` and
        starts a VIES check. The account status is re-derived in the same
        transaction. Allowed while your partner is suspended, so you can fix
        billing data. See the [billing guide](/consumer/billing).


        **Required permissions:** `manage-consumer-billing` · **API keys:** not
        allowed · **Recent sign-in:** required for dashboard users (15 minutes)
      operationId: consumer.billing-account.update
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateBillingAccountBody'
            examples:
              po-and-language:
                summary: Set a purchase order reference and the invoice language
                value:
                  purchaseOrderReference: PO-2026-17
                  invoiceLanguage: en
              xrechnung:
                summary: Switch to XRechnung with a Leitweg-ID
                value:
                  eInvoiceFormat: xrechnung-cii
                  buyerReference: 04011000-12345-67
      responses:
        '200':
          description: OK
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
            Idempotency-Key-Ignored:
              $ref: '#/components/headers/IdempotencyKeyIgnored'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BillingAccountResponse'
              examples:
                default:
                  summary: OK
                  value:
                    data:
                      id: 30017
                      resource: billing-account
                      status: active
                      mode: invoiced
                      legalName: Example Transit GmbH
                      address:
                        line1: Musterstraße 1
                        line2: null
                        postalCode: '70173'
                        city: Stuttgart
                        region: null
                        country: DE
                      vatId: DE123456789
                      vatIdStatus: valid
                      vatIdCheckedAt: '2026-10-22T09:05:00Z'
                      taxTreatment: domestic
                      buyerReference: null
                      purchaseOrderReference: PO-2026-17
                      invoiceLanguage: de
                      paymentTermsDays: 14
                      preferredPaymentMethodType: sepa-debit
                      defaultPaymentMethodId: 42017
                      eInvoiceFormat: zugferd-en16931
                      creditBalance:
                        value: 0
                        label: €0.00
                      standing: good-standing
                      missingItems: []
                      bankTransferInstructions:
                        iban: DE00 0000 0000 0000 0000 00
                        bic: EXAMPLEXXX
                        accountHolderName: AllRide GmbH
                        bankName: Example Bank
                      createdAt: '2026-10-22T09:00:00Z'
                      updatedAt: '2026-11-02T08:10:00Z'
                      _links:
                        self:
                          href: >-
                            https://api.voucher.allride.io/consumer/v1/billing/account
                          type: application/json
                        invoices:
                          href: >-
                            https://api.voucher.allride.io/consumer/v1/billing/invoices
                          type: application/json
        '400':
          description: Bad Request
          x-error-codes:
            - malformed-json
            - invalid-header
            - data-failed-validation
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                malformed-json:
                  summary: Malformed JSON
                  value:
                    errors:
                      - message: >-
                          The body is not valid UTF-8 JSON or nests deeper than
                          32 levels.
                        statusCode: 400
                        errorCode: malformed-json
                invalid-header:
                  summary: Invalid header
                  value:
                    errors:
                      - message: >-
                          A standard or platform header is malformed or missing;
                          `more.validationErrors[].property` names it.
                        statusCode: 400
                        errorCode: invalid-header
                data-failed-validation:
                  summary: Data failed validation
                  value:
                    errors:
                      - message: >-
                          One or more properties or parameters are invalid; each
                          is listed in `more.validationErrors` with its property
                          path and violated constraint. Unknown properties and
                          query parameters are refused as well.
                        statusCode: 400
                        errorCode: data-failed-validation
                        more:
                          validationErrors:
                            - property: preferredPaymentMethodType
                              constraint: admin-only-field
                              message:
                                en: Only AllRide can change this property.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Not found.
          x-error-codes:
            - route-not-found
            - billing-account-not-found
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                route-not-found:
                  summary: Route not found
                  value:
                    errors:
                      - message: No operation exists for this path.
                        statusCode: 404
                        errorCode: route-not-found
                billing-account-not-found:
                  summary: Billing account not found
                  value:
                    errors:
                      - message: Your partner has no billing account (yet).
                        statusCode: 404
                        errorCode: billing-account-not-found
        '409':
          description: Conflict
          x-error-codes:
            - billing-account-closed
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                billing-account-closed:
                  summary: Billing account closed
                  value:
                    errors:
                      - message: >-
                          The billing account is closed; it accepts no further
                          changes or payment methods.
                        statusCode: 409
                        errorCode: billing-account-closed
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  schemas:
    UpdateBillingAccountBody:
      type: object
      description: >-
        JSON Merge Patch of your billing account: absent = unchanged, `null` =
        clear. `mode`, `paymentTermsDays`, `voidedRedemptionsBillable` and
        `preferredPaymentMethodType` are set by AllRide (400
        `data-failed-validation` with item `admin-only-field`).
      properties:
        legalName:
          type: string
          minLength: 1
          maxLength: 200
          description: Legal name.
        address:
          type: object
          properties:
            line1:
              type: string
              minLength: 1
              maxLength: 100
              description: Street and number.
            line2:
              type:
                - string
                - 'null'
              maxLength: 100
              description: Additional line.
            postalCode:
              type: string
              minLength: 1
              maxLength: 16
              description: Postal code.
            city:
              type: string
              minLength: 1
              maxLength: 100
              description: City.
            region:
              type:
                - string
                - 'null'
              maxLength: 100
              description: Region.
            country:
              type: string
              pattern: ^[A-Z]{2}$
              description: ISO 3166-1 alpha-2 country code.
          required: []
          additionalProperties: false
          description: Address fields to change.
        vatId:
          type:
            - string
            - 'null'
          pattern: ^[A-Z]{2}[0-9A-Z+*.]{2,12}$
          description: VAT ID; `null` clears it.
        buyerReference:
          type:
            - string
            - 'null'
          maxLength: 200
          description: Buyer reference (Leitweg-ID).
        purchaseOrderReference:
          type:
            - string
            - 'null'
          maxLength: 100
          description: Purchase order reference.
        invoiceLanguage:
          $ref: '#/components/schemas/Locale'
          description: Invoice language.
        eInvoiceFormat:
          type: string
          enum:
            - zugferd-en16931
            - xrechnung-cii
          description: 'E-invoice format. Treat as an open set: new values may be added.'
      additionalProperties: false
    BillingAccountResponse:
      type: object
      description: Single-object envelope around a `BillingAccount`.
      properties:
        data:
          $ref: '#/components/schemas/BillingAccount'
      required:
        - data
      additionalProperties: false
    ErrorResponse:
      type: object
      description: >-
        Error body of every 4xx and 5xx response (`Content-Type:
        application/json`).
      properties:
        errors:
          type: array
          minItems: 1
          items:
            $ref: '#/components/schemas/ErrorEntry'
          description: The errors; in v1 always exactly one.
      required:
        - errors
      additionalProperties: false
    Locale:
      type: string
      enum:
        - de
        - en
      description: 'Supported locale. Treat as an open set: new values may be added.'
    BillingAccount:
      type: object
      description: >-
        Your billing account (consumer view). One per consumer partner, created
        automatically.
      properties:
        id:
          $ref: '#/components/schemas/ULong'
          description: Numeric id of the resource, unique per resource type.
        resource:
          type: string
          enum:
            - billing-account
          description: Always `billing-account`.
        status:
          type: string
          enum:
            - incomplete
            - active
            - closed
          description: >-
            Derived status: `incomplete` while `missingItems` is not empty
            (invoicing is blocked), `active` when complete, `closed` by AllRide.
            Treat as an open set: new values may be added.
        mode:
          type: string
          enum:
            - invoiced
            - not-billed
          description: >-
            `invoiced` (default) or `not-billed` (usage is recorded and
            estimated but no documents are issued). Set by AllRide. Treat as an
            open set: new values may be added.
        legalName:
          type: string
          minLength: 1
          maxLength: 200
          description: Legal name printed on documents.
        address:
          $ref: '#/components/schemas/BillingPostalAddress'
          description: Billing address.
        vatId:
          type:
            - string
            - 'null'
          pattern: ^[A-Z]{2}[0-9A-Z+*.]{2,12}$
          description: >-
            VAT ID, upper case without spaces; its country prefix must match
            `address.country` (Greece: `EL`).
        vatIdStatus:
          type: string
          enum:
            - not-provided
            - unverified
            - valid
            - invalid
            - check-unavailable
          description: >-
            Result of the VIES check. Changing `vatId` or `address.country`
            resets it to `unverified`. Treat as an open set: new values may be
            added.
        vatIdCheckedAt:
          anyOf:
            - $ref: '#/components/schemas/Instant'
            - type: 'null'
          description: When VIES last checked the VAT ID.
        taxTreatment:
          type: string
          enum:
            - domestic
            - eu-reverse-charge
            - non-eu-not-taxable
          description: >-
            Derived tax treatment. Treat as an open set: new values may be
            added.
        buyerReference:
          type:
            - string
            - 'null'
          maxLength: 200
          description: >-
            Buyer reference (BT-10); your Leitweg-ID, required for
            `xrechnung-cii`.
        purchaseOrderReference:
          type:
            - string
            - 'null'
          maxLength: 100
          description: Purchase order reference printed on invoices (BT-13).
        invoiceLanguage:
          $ref: '#/components/schemas/Locale'
          description: Language of invoices and billing emails.
        paymentTermsDays:
          type: integer
          minimum: 0
          maximum: 60
          description: Days from issue date to due date (default 14). Set by AllRide.
        preferredPaymentMethodType:
          type: string
          enum:
            - sepa-debit
            - bank-transfer
          description: >-
            How you pay, set by AllRide (read-only for you; default
            `sepa-debit`): with `sepa-debit` you set up a SEPA Direct Debit
            mandate; with `bank-transfer` you pay each invoice by bank transfer.
            Treat as an open set: new values may be added.
        defaultPaymentMethodId:
          anyOf:
            - $ref: '#/components/schemas/ULong'
            - type: 'null'
          description: The active default SEPA Direct Debit payment method.
        eInvoiceFormat:
          type: string
          enum:
            - zugferd-en16931
            - xrechnung-cii
          description: >-
            E-invoice format: ZUGFeRD PDF/A-3 with EN 16931 XML (default) or
            XRechnung CII for public-sector buyers. Treat as an open set: new
            values may be added.
        creditBalance:
          $ref: '#/components/schemas/Money'
          description: >-
            Unallocated credit (for example an overpayment, or payments of an
            invoice cancelled with a Stornorechnung), applied to your next
            invoices.
        standing:
          type: string
          enum:
            - good-standing
            - reminded
            - dunning-1
            - dunning-2
            - delinquent
          description: >-
            Dunning level of your worst open invoice. Treat as an open set: new
            values may be added.
        missingItems:
          type: array
          items:
            type: string
            enum:
              - legal-name
              - address
              - invoice-contact
              - vat-id
              - buyer-reference
            description: 'Missing item. Treat as an open set: new values may be added.'
          description: What blocks invoicing; empty when the account is complete.
        bankTransferInstructions:
          type:
            - object
            - 'null'
          properties:
            iban:
              type: string
              description: IBAN of AllRide's receiving account for your bank transfers.
            bic:
              type: string
              description: BIC.
            accountHolderName:
              type: string
              description: Account holder.
            bankName:
              type: string
              description: Bank name.
          required:
            - iban
            - bic
            - accountHolderName
            - bankName
          additionalProperties: false
          description: >-
            Where to pay by bank transfer (AllRide's receiving account, not your
            bank data). Always use the reference printed on the invoice.
        createdAt:
          $ref: '#/components/schemas/Instant'
          description: Creation time.
        updatedAt:
          $ref: '#/components/schemas/Instant'
          description: Last change.
        _links:
          type: object
          description: >-
            Related resources you may follow (HAL style). A link is present only
            when you hold the target's permissions.
          properties:
            self:
              $ref: '#/components/schemas/Link'
              description: This resource.
            invoices:
              $ref: '#/components/schemas/Link'
              description: Your invoices.
          required:
            - self
          additionalProperties: false
      required:
        - id
        - resource
        - status
        - mode
        - legalName
        - address
        - vatId
        - vatIdStatus
        - vatIdCheckedAt
        - taxTreatment
        - buyerReference
        - purchaseOrderReference
        - invoiceLanguage
        - paymentTermsDays
        - preferredPaymentMethodType
        - defaultPaymentMethodId
        - eInvoiceFormat
        - creditBalance
        - standing
        - missingItems
        - bankTransferInstructions
        - createdAt
        - updatedAt
        - _links
      additionalProperties: false
    ErrorEntry:
      type: object
      description: One error. Branch on `errorCode`; ignore members you do not know.
      properties:
        message:
          type: string
          description: >-
            Human-readable message. For 5xx errors it is always the generic
            `Something went wrong on our side`.
        statusCode:
          type: integer
          description: The HTTP status.
        errorCode:
          type: string
          description: Stable kebab-case error code, listed in the error catalog.
        requestId:
          type: string
          description: >-
            5xx only: the request id (also in the `X-Request-Id` header). Quote
            it when you contact support.
        more:
          type: object
          additionalProperties: true
          description: >-
            Additional details for some codes, for example `validationErrors`
            (array of `ValidationError`) or `requiredPermissions`. The members
            per code are listed in the error catalog.
          properties:
            validationErrors:
              type: array
              items:
                $ref: '#/components/schemas/ValidationError'
              description: Invalid properties or parameters.
      required:
        - message
        - statusCode
        - errorCode
      additionalProperties: true
    ULong:
      type: integer
      format: uint64
      minimum: 0
      maximum: 18446744073709552000
      x-bigint: true
      description: >-
        Unsigned 64-bit integer (ids and large counters). May exceed 2^53; parse
        with a BigInt-safe JSON parser in JavaScript.
    BillingPostalAddress:
      type: object
      properties:
        line1:
          type: string
          minLength: 1
          maxLength: 100
          description: Street and number.
        line2:
          type:
            - string
            - 'null'
          maxLength: 100
          description: Additional address line.
        postalCode:
          type: string
          minLength: 1
          maxLength: 16
          description: Postal code.
        city:
          type: string
          minLength: 1
          maxLength: 100
          description: City.
        region:
          type:
            - string
            - 'null'
          maxLength: 100
          description: Region or state.
        country:
          type: string
          pattern: ^[A-Z]{2}$
          description: ISO 3166-1 alpha-2 country code.
      required:
        - line1
        - line2
        - postalCode
        - city
        - region
        - country
      additionalProperties: false
      description: Billing address, printed on documents.
    Instant:
      type: string
      format: date-time
      description: >-
        RFC 3339 timestamp in UTC with `Z`, millisecond precision, truncated: no
        fraction when the milliseconds are zero (`2026-11-01T00:00:00Z`),
        otherwise exactly three digits (`2026-10-21T17:42:10.120Z`). Inputs must
        carry an offset and are normalised to UTC.
      example: '2026-11-01T00:00:00Z'
    Money:
      type: object
      description: >-
        An amount in euros: `value` in cent (2900 = €29.00). All amounts are in
        euros (EUR). In requests send `value`; a `label` you send is ignored.
      properties:
        value:
          type: integer
          minimum: 0
          description: Amount in cent (2900 = €29.00).
        label:
          type: string
          readOnly: true
          description: >-
            Server-formatted amount in the response locale (`€5.00` in English,
            `5,00 €` in German).
      required:
        - value
        - label
      additionalProperties: false
      example:
        value: 2900
        label: 29,00 €
    Link:
      type: object
      description: A link to a related resource.
      properties:
        href:
          type: string
          format: uri
          description: Absolute URL.
        type:
          type: string
          description: Media type of the target, usually `application/json`.
      required:
        - href
        - type
      additionalProperties: false
    ValidationError:
      type: object
      description: >-
        One invalid property or parameter of a `data-failed-validation` error
        (also used for item failures of batch operations and content checks).
      properties:
        property:
          type: string
          description: >-
            Path of the offending property in your request body
            (`items[2].quantity`), or the name of the query parameter, path
            parameter or header.
        constraint:
          type: string
          description: >-
            The violated rule as a kebab-case item code, for example `required`,
            `too-long`, `invalid-id`, `unknown-field`. See the validation item
            codes in the error catalog.
        params:
          type: object
          additionalProperties: true
          description: >-
            Parameters of the constraint, for example `min` and `max` for
            `invalid-page` or `allowed` for `invalid-sort`.
        value:
          description: The rejected value, when it is safe to return.
        message:
          type: object
          description: Explanation per locale.
          properties:
            en:
              type: string
              description: English message.
            de:
              type: string
              description: German message.
          required:
            - en
          additionalProperties: false
      required:
        - property
        - constraint
        - message
      additionalProperties: true
  headers:
    XRequestId:
      description: Request id (yours if you sent a valid `X-Request-Id`, else generated).
      schema:
        type: string
    IdempotencyKeyIgnored:
      description: '`true` when you sent `Idempotency-Key` on a method that ignores it.'
      schema:
        type: string
        enum:
          - 'true'
    RetryAfter:
      description: Seconds to wait before retrying or polling.
      schema:
        type: integer
  responses:
    Unauthorized:
      description: 'Unauthorized: the credential is missing or invalid.'
      x-error-codes:
        - unauthenticated
        - token-invalid
        - token-expired
        - api-key-invalid
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            unauthenticated:
              summary: Authentication required
              value:
                errors:
                  - message: No credential was sent with the request.
                    statusCode: 401
                    errorCode: unauthenticated
            token-invalid:
              summary: Invalid credential
              value:
                errors:
                  - message: >-
                      The credential cannot be verified for this surface (wrong
                      scheme, signature or credential kind).
                    statusCode: 401
                    errorCode: token-invalid
            token-expired:
              summary: Credential expired
              value:
                errors:
                  - message: The dashboard ID token has expired.
                    statusCode: 401
                    errorCode: token-expired
            api-key-invalid:
              summary: Invalid API key
              value:
                errors:
                  - message: >-
                      The API key is unknown, revoked, expired, past its roll
                      grace period or belongs to the other environment
                      (`vk_test_` against production or `vk_live_` against the
                      sandbox).
                    statusCode: 401
                    errorCode: api-key-invalid
    Forbidden:
      description: 'Forbidden: an access gate refused the request.'
      x-error-codes:
        - partner-role-missing
        - partner-suspended
        - partner-offboarded
        - api-access-inactive
        - ip-not-allowed
        - mfa-required
        - sso-required
        - missing-permission
        - reauthentication-required
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            partner-role-missing:
              summary: Partner role missing
              value:
                errors:
                  - message: >-
                      Your partner lacks the role (provider or consumer) this
                      surface needs.
                    statusCode: 403
                    errorCode: partner-role-missing
                    more:
                      requiredRole: consumer
            partner-suspended:
              summary: Partner suspended
              value:
                errors:
                  - message: >-
                      Your partner is suspended: writes are refused (billing
                      writes from the dashboard excepted).
                    statusCode: 403
                    errorCode: partner-suspended
            partner-offboarded:
              summary: Partner offboarded
              value:
                errors:
                  - message: Your partner has been offboarded; every route is refused.
                    statusCode: 403
                    errorCode: partner-offboarded
            api-access-inactive:
              summary: API access inactive
              value:
                errors:
                  - message: >-
                      API access of your partner is not active (not yet granted,
                      revoked, or the partner is suspended), so API keys are
                      refused.
                    statusCode: 403
                    errorCode: api-access-inactive
            ip-not-allowed:
              summary: IP address not allowed
              value:
                errors:
                  - message: >-
                      The request's source address is not in your IP allowlist
                      while enforcement is on.
                    statusCode: 403
                    errorCode: ip-not-allowed
            mfa-required:
              summary: Multi-factor authentication required
              value:
                errors:
                  - message: >-
                      Your partner requires multi-factor authentication for
                      dashboard users.
                    statusCode: 403
                    errorCode: mfa-required
            sso-required:
              summary: Single sign-on required
              value:
                errors:
                  - message: >-
                      Your partner enforces single sign-on for this user's email
                      domain.
                    statusCode: 403
                    errorCode: sso-required
            missing-permission:
              summary: Missing permission
              value:
                errors:
                  - message: >-
                      The membership or API key lacks a permission the operation
                      requires, including non-delegable permissions called with
                      an API key.
                    statusCode: 403
                    errorCode: missing-permission
                    more:
                      requiredPermissions:
                        - create-consumer-redemptions
            reauthentication-required:
              summary: Recent sign-in required
              value:
                errors:
                  - message: >-
                      The operation needs a sign-in within the last 15 minutes
                      (dashboard users only).
                    statusCode: 403
                    errorCode: reauthentication-required
    InternalError:
      description: Unexpected failure; quote the `requestId`.
      x-error-codes:
        - internal-error
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            internal-error:
              summary: Internal error
              value:
                errors:
                  - message: Something went wrong on our side
                    statusCode: 500
                    errorCode: internal-error
                    requestId: 0c9f2ea5-fe09-463c-8f96-b6cae67800ad
    ServiceUnavailable:
      description: Temporarily unavailable; retry after `Retry-After`.
      x-error-codes:
        - service-unavailable
        - db-unavailable
        - query-timeout
      headers:
        X-Request-Id:
          $ref: '#/components/headers/XRequestId'
        Retry-After:
          $ref: '#/components/headers/RetryAfter'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          examples:
            service-unavailable:
              summary: Service unavailable
              value:
                errors:
                  - message: Something went wrong on our side
                    statusCode: 503
                    errorCode: service-unavailable
                    requestId: 0c9f2ea5-fe09-463c-8f96-b6cae67800ad
            db-unavailable:
              summary: Database unavailable
              value:
                errors:
                  - message: Something went wrong on our side
                    statusCode: 503
                    errorCode: db-unavailable
                    requestId: 0c9f2ea5-fe09-463c-8f96-b6cae67800ad
            query-timeout:
              summary: Query timeout
              value:
                errors:
                  - message: Something went wrong on our side
                    statusCode: 503
                    errorCode: query-timeout
                    requestId: 0c9f2ea5-fe09-463c-8f96-b6cae67800ad
  securitySchemes:
    apiKey:
      type: http
      scheme: bearer
      bearerFormat: vk_live_<keyId>_<secret>
      description: >-
        Your API key in `Authorization: Bearer <key>`. Use `vk_test_…` keys
        against the sandbox and `vk_live_…` keys against production.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.