> ## 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 provider toggle and settings

> Turns a provider on or off for you and edits your provider setting (JSON Merge Patch). The setting is created on the first save. Turning the provider off makes all its sets answer 409 `voucher-set-unavailable` on redeem. Changing `autoEnableNewVoucherSets` keeps the current toggle of every set already visible. See [Catalog and toggles](/consumer/catalog).

**Required permissions:** `manage-consumer-catalog` · **API keys:** allowed



## OpenAPI

````yaml /openapi/consumer.v1.json patch /consumer/v1/catalog/providers/{providerId}
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/catalog/providers/{providerId}:
    patch:
      tags:
        - Catalog settings
      summary: Update provider toggle and settings
      description: >-
        Turns a provider on or off for you and edits your provider setting (JSON
        Merge Patch). The setting is created on the first save. Turning the
        provider off makes all its sets answer 409 `voucher-set-unavailable` on
        redeem. Changing `autoEnableNewVoucherSets` keeps the current toggle of
        every set already visible. See [Catalog and toggles](/consumer/catalog).


        **Required permissions:** `manage-consumer-catalog` · **API keys:**
        allowed
      operationId: consumer.catalog-providers.update
      parameters:
        - name: providerId
          in: path
          required: true
          description: Id of the provider partner.
          schema:
            $ref: '#/components/schemas/ULong'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateCatalogProviderBody'
            examples:
              disable:
                summary: Turn the provider off
                value:
                  setting:
                    enabled: false
              settings:
                summary: Position and external reference
                value:
                  setting:
                    position: 1
                    externalRef: '3'
      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/ConsumerCatalogProviderResponse'
              examples:
                default:
                  summary: OK
                  value:
                    data:
                      id: 1030
                      resource: consumer-catalog-provider
                      slug: acme-scooters
                      availability: active
                      voucherSetCounts:
                        upcoming: 1
                        active: 1
                        deactivationScheduled: 0
                      nextActiveFrom: '2026-11-01T00:00:00Z'
                      earliestDeactivateAt: null
                      profile:
                        displayName:
                          de: Acme Scooters
                          en: Acme Scooters
                        tagline:
                          de: E-Scooter und E-Bikes
                          en: E-scooters and e-bikes
                        description: null
                        termsText: null
                        termsUrl: https://acme-scooters.example.com/terms
                        privacyUrl: https://acme-scooters.example.com/privacy
                        websiteUrl: https://acme-scooters.example.com
                        supportUrl: null
                        appLinks:
                          appStoreUrl: https://apps.apple.com/app/id0000000001
                          playStoreUrl: null
                        defaultCategoryId: 7017
                        countries:
                          - DE
                      profileRevisionNo: 2
                      listingBranding:
                        primaryColor: '#14d0e8'
                        secondaryColor: null
                        backgroundColor: '#0b1f33'
                        surfaceColor: null
                        textColor: '#ffffff'
                        accentColor: null
                        buttonColor: '#14d0e8'
                        buttonTextColor: '#0b1f33'
                        buttonBorderColor: null
                        logoAssetId: 3095
                        logoDarkAssetId: null
                        iconAssetId: null
                        heroImageAssetId: null
                        faviconAssetId: null
                        emailLogoAssetId: null
                        fontFamily: inter
                        cornerRadius: md
                        extensions: null
                        assetUrls:
                          logo:
                            assetId: 3095
                            url: >-
                              https://assets.voucher.allride.io/acme-scooters/3095.png
                            width: 320
                            height: 80
                            variants: null
                          logoDark: null
                          icon: null
                          hero: null
                      providerToggle: true
                      featured: true
                      effectiveCategoryId: 7017
                      setting:
                        enabled: true
                        autoEnableNewVoucherSets: true
                        position: 1
                        featured: true
                        categoryOverrideId: null
                        settings:
                          schemaVersion: 1
                          minClientVersion: 3.0.24
                        externalRef: '3'
                        updatedAt: '2026-10-20T10:00:00Z'
                      _links:
                        self:
                          href: >-
                            https://api.voucher.allride.io/consumer/v1/catalog/providers/1030
                          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: name
                              constraint: required
                              message:
                                en: This property is required.
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          description: Not found.
          x-error-codes:
            - route-not-found
            - provider-not-found
            - category-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
                provider-not-found:
                  summary: Provider not found
                  value:
                    errors:
                      - message: >-
                          The provider does not exist or has no voucher set
                          visible to you.
                        statusCode: 404
                        errorCode: provider-not-found
                category-not-found:
                  summary: Category not found
                  value:
                    errors:
                      - message: The category does not exist or is archived.
                        statusCode: 404
                        errorCode: category-not-found
        '409':
          description: Conflict
          x-error-codes:
            - external-ref-taken
          headers:
            X-Request-Id:
              $ref: '#/components/headers/XRequestId'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                external-ref-taken:
                  summary: External reference taken
                  value:
                    errors:
                      - message: >-
                          Another provider or voucher set setting of your
                          partner already uses this `externalRef`.
                        statusCode: 409
                        errorCode: external-ref-taken
        '500':
          $ref: '#/components/responses/InternalError'
        '503':
          $ref: '#/components/responses/ServiceUnavailable'
components:
  schemas:
    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.
    UpdateCatalogProviderBody:
      type: object
      description: >-
        JSON Merge Patch of your provider setting; `setting` is merged
        recursively.
      properties:
        setting:
          type: object
          properties:
            enabled:
              type: boolean
              description: Provider Toggle.
            autoEnableNewVoucherSets:
              type: boolean
              description: >-
                Initial toggle of sets that become visible later. Changing it
                never flips the toggle of a set that is already visible.
            position:
              type:
                - integer
                - 'null'
              minimum: 0
              description: Sort position (0 or more); `null` clears.
            featured:
              type: boolean
              description: Featured flag.
            categoryOverrideId:
              anyOf:
                - $ref: '#/components/schemas/ULong'
                - type: 'null'
              description: An active category; `null` clears.
            settings:
              anyOf:
                - $ref: '#/components/schemas/JsonMetadata'
                - type: 'null'
              description: Your opaque JSON, replaced as a whole.
            externalRef:
              type:
                - string
                - 'null'
              minLength: 1
              maxLength: 64
              description: >-
                1-64 characters, unique among your provider settings; `null`
                clears.
          required: []
          additionalProperties: false
          description: Fields to change.
      required: []
      additionalProperties: false
    ConsumerCatalogProviderResponse:
      type: object
      description: Single-object envelope around a `ConsumerCatalogProvider`.
      properties:
        data:
          $ref: '#/components/schemas/ConsumerCatalogProvider'
      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
    JsonMetadata:
      type: object
      additionalProperties: true
      description: >-
        Free-form JSON object (at most 16 KiB, depth 5, 100 keys per object).
        The platform stores it as sent and never interprets it. Key order is not
        preserved.
      example:
        orderId: '8812'
        channel: app
    ConsumerCatalogProvider:
      type: object
      description: >-
        A provider with at least one voucher set visible to you, with your
        setting.
      properties:
        id:
          $ref: '#/components/schemas/ULong'
          description: Numeric id of the resource, unique per resource type.
        resource:
          type: string
          enum:
            - consumer-catalog-provider
          description: Always `consumer-catalog-provider`.
        slug:
          type: string
          description: Provider slug.
        availability:
          type: string
          enum:
            - upcoming
            - active
            - deactivation-scheduled
          description: >-
            `active` if any visible set is active, else `deactivation-scheduled`
            if any is, else `upcoming`. Treat as an open set: new values may be
            added.
        voucherSetCounts:
          type: object
          properties:
            upcoming:
              type: integer
              description: Visible upcoming sets.
            active:
              type: integer
              description: Visible active sets.
            deactivationScheduled:
              type: integer
              description: Visible sets scheduled for deactivation.
          required:
            - upcoming
            - active
            - deactivationScheduled
          additionalProperties: false
          description: Counts of visible voucher sets.
        nextActiveFrom:
          anyOf:
            - $ref: '#/components/schemas/Instant'
            - type: 'null'
          description: Earliest `activeFrom` among upcoming sets.
        earliestDeactivateAt:
          anyOf:
            - $ref: '#/components/schemas/Instant'
            - type: 'null'
          description: Earliest `deactivateAt` among visible sets.
        profile:
          $ref: '#/components/schemas/ProviderProfileContent'
          description: Live provider profile.
        profileRevisionNo:
          type: integer
          description: Revision number of the live profile.
        listingBranding:
          anyOf:
            - $ref: '#/components/schemas/ListingBrandingView'
            - type: 'null'
          description: Approved Listing Branding.
        providerToggle:
          type: boolean
          description: '= `setting.enabled`.'
        featured:
          type: boolean
          description: '= `setting.featured`.'
        effectiveCategoryId:
          anyOf:
            - $ref: '#/components/schemas/ULong'
            - type: 'null'
          description: '`setting.categoryOverrideId`, else the profile''s default category.'
        setting:
          $ref: '#/components/schemas/ConsumerProviderSettingView'
          description: Your setting for this provider.
        _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.
          required:
            - self
          additionalProperties: false
      required:
        - id
        - resource
        - slug
        - availability
        - voucherSetCounts
        - nextActiveFrom
        - earliestDeactivateAt
        - profile
        - profileRevisionNo
        - listingBranding
        - providerToggle
        - featured
        - effectiveCategoryId
        - setting
        - _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
    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'
    ProviderProfileContent:
      type: object
      description: The approved (live) profile of a provider.
      properties:
        displayName:
          $ref: '#/components/schemas/I18nText'
          description: >-
            Provider name shown to end customers (at most 80 characters per
            locale).
        tagline:
          anyOf:
            - $ref: '#/components/schemas/I18nText'
            - type: 'null'
          description: One-line tagline (at most 160 characters).
        description:
          anyOf:
            - $ref: '#/components/schemas/I18nMarkdown'
            - type: 'null'
          description: Description in restricted Markdown (at most 5,000 characters).
        termsText:
          anyOf:
            - $ref: '#/components/schemas/I18nMarkdown'
            - type: 'null'
          description: Provider-wide terms in restricted Markdown.
        termsUrl:
          type:
            - string
            - 'null'
          format: uri
          pattern: ^https://
          description: >-
            Provider terms and conditions URL; applies to all of the provider's
            voucher sets (a voucher set has no terms URL of its own).
        privacyUrl:
          type:
            - string
            - 'null'
          format: uri
          pattern: ^https://
          description: Provider privacy URL.
        websiteUrl:
          type:
            - string
            - 'null'
          format: uri
          pattern: ^https://
          description: Provider website.
        supportUrl:
          type:
            - string
            - 'null'
          format: uri
          pattern: ^https://
          description: Provider support page.
        appLinks:
          $ref: '#/components/schemas/ProviderAppLinks'
          description: >-
            App Store and Google Play links of the provider; voucher sets have
            no app links of their own.
        defaultCategoryId:
          anyOf:
            - $ref: '#/components/schemas/ULong'
            - type: 'null'
          description: Default category of the provider.
        countries:
          type: array
          items:
            type: string
            pattern: ^[A-Z]{2}$
          description: ISO 3166-1 alpha-2 countries; empty means all.
      required:
        - displayName
        - tagline
        - description
        - termsText
        - termsUrl
        - privacyUrl
        - websiteUrl
        - supportUrl
        - appLinks
        - defaultCategoryId
        - countries
      additionalProperties: false
    ListingBrandingView:
      type: object
      description: The provider's approved Listing Branding with rendered asset URLs.
      properties:
        primaryColor:
          type:
            - string
            - 'null'
          pattern: ^#[0-9a-f]{6}$
          description: '`primaryColor` as `#rrggbb`.'
        secondaryColor:
          type:
            - string
            - 'null'
          pattern: ^#[0-9a-f]{6}$
          description: '`secondaryColor` as `#rrggbb`.'
        backgroundColor:
          type:
            - string
            - 'null'
          pattern: ^#[0-9a-f]{6}$
          description: '`backgroundColor` as `#rrggbb`.'
        surfaceColor:
          type:
            - string
            - 'null'
          pattern: ^#[0-9a-f]{6}$
          description: '`surfaceColor` as `#rrggbb`.'
        textColor:
          type:
            - string
            - 'null'
          pattern: ^#[0-9a-f]{6}$
          description: '`textColor` as `#rrggbb`.'
        accentColor:
          type:
            - string
            - 'null'
          pattern: ^#[0-9a-f]{6}$
          description: '`accentColor` as `#rrggbb`.'
        buttonColor:
          type:
            - string
            - 'null'
          pattern: ^#[0-9a-f]{6}$
          description: '`buttonColor` as `#rrggbb`.'
        buttonTextColor:
          type:
            - string
            - 'null'
          pattern: ^#[0-9a-f]{6}$
          description: '`buttonTextColor` as `#rrggbb`.'
        buttonBorderColor:
          type:
            - string
            - 'null'
          pattern: ^#[0-9a-f]{6}$
          description: '`buttonBorderColor` as `#rrggbb`.'
        logoAssetId:
          anyOf:
            - $ref: '#/components/schemas/ULong'
            - type: 'null'
          description: Brand asset id (logoAssetId).
        logoDarkAssetId:
          anyOf:
            - $ref: '#/components/schemas/ULong'
            - type: 'null'
          description: Brand asset id (logoDarkAssetId).
        iconAssetId:
          anyOf:
            - $ref: '#/components/schemas/ULong'
            - type: 'null'
          description: Brand asset id (iconAssetId).
        heroImageAssetId:
          anyOf:
            - $ref: '#/components/schemas/ULong'
            - type: 'null'
          description: Brand asset id (heroImageAssetId).
        faviconAssetId:
          anyOf:
            - $ref: '#/components/schemas/ULong'
            - type: 'null'
          description: Brand asset id (faviconAssetId).
        emailLogoAssetId:
          anyOf:
            - $ref: '#/components/schemas/ULong'
            - type: 'null'
          description: Brand asset id (emailLogoAssetId).
        fontFamily:
          type:
            - string
            - 'null'
          enum:
            - inter
            - roboto
            - open-sans
            - lato
            - source-sans-3
            - system
            - null
          description: 'Font family. Treat as an open set: new values may be added.'
        cornerRadius:
          type:
            - string
            - 'null'
          enum:
            - none
            - sm
            - md
            - lg
            - full
            - null
          description: 'Corner radius. Treat as an open set: new values may be added.'
        extensions:
          anyOf:
            - $ref: '#/components/schemas/JsonMetadata'
            - type: 'null'
          description: Namespaced display hints (`x-…` or `<consumerSlug>.…` keys).
        assetUrls:
          type: object
          properties:
            logo:
              anyOf:
                - $ref: '#/components/schemas/AssetView'
                - type: 'null'
              description: Rendered `logo` asset.
            logoDark:
              anyOf:
                - $ref: '#/components/schemas/AssetView'
                - type: 'null'
              description: Rendered `logoDark` asset.
            icon:
              anyOf:
                - $ref: '#/components/schemas/AssetView'
                - type: 'null'
              description: Rendered `icon` asset.
            hero:
              anyOf:
                - $ref: '#/components/schemas/AssetView'
                - type: 'null'
              description: Rendered `hero` asset.
          required:
            - logo
            - logoDark
            - icon
            - hero
          additionalProperties: false
          description: Rendered assets derived from the asset ids.
      required:
        - primaryColor
        - secondaryColor
        - backgroundColor
        - surfaceColor
        - textColor
        - accentColor
        - buttonColor
        - buttonTextColor
        - buttonBorderColor
        - logoAssetId
        - logoDarkAssetId
        - iconAssetId
        - heroImageAssetId
        - faviconAssetId
        - emailLogoAssetId
        - fontFamily
        - cornerRadius
        - extensions
        - assetUrls
      additionalProperties: false
    ConsumerProviderSettingView:
      type: object
      description: Your setting for a provider.
      properties:
        enabled:
          type: boolean
          description: Provider Toggle; `false` when never saved.
        autoEnableNewVoucherSets:
          type: boolean
          description: >-
            Initial Voucher Set Toggle of sets of this provider that become
            visible later (default `true`). Not retroactive.
        position:
          type:
            - integer
            - 'null'
          minimum: 0
          description: Your sort position (0 or more).
        featured:
          type: boolean
          description: Featured flag.
        categoryOverrideId:
          anyOf:
            - $ref: '#/components/schemas/ULong'
            - type: 'null'
          description: Your category override.
        settings:
          anyOf:
            - $ref: '#/components/schemas/JsonMetadata'
            - type: 'null'
          description: >-
            Your own opaque JSON for this provider; the platform does not
            validate it.
        externalRef:
          type:
            - string
            - 'null'
          maxLength: 64
          description: >-
            Your own reference, unique among your provider settings (1-64
            characters).
        updatedAt:
          anyOf:
            - $ref: '#/components/schemas/Instant'
            - type: 'null'
          description: Last save; `null` when never saved.
      required:
        - enabled
        - autoEnableNewVoucherSets
        - position
        - featured
        - categoryOverrideId
        - settings
        - externalRef
        - updatedAt
      additionalProperties: false
    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
    I18nText:
      type: object
      description: >-
        Localised text: an object keyed by locale (`de`, `en`). Responses always
        return the full map; pick the locale on your side. Requests must include
        your partner's default locale.
      properties:
        de:
          type: string
          description: German text.
        en:
          type: string
          description: English text.
      additionalProperties: false
      example:
        de: 5 € Fahrguthaben
        en: €5 ride credit
    I18nMarkdown:
      type: object
      description: >-
        Localised restricted Markdown (paragraphs, line breaks, bold, italic,
        lists, headings level 3-4, https links). Render with a sanitising
        Markdown renderer, never as raw HTML.
      properties:
        de:
          type: string
          description: German Markdown.
        en:
          type: string
          description: English Markdown.
      additionalProperties: false
      example:
        de: Gültig für **alle** E-Scooter.
        en: Valid for **all** e-scooters.
    ProviderAppLinks:
      type: object
      description: App store links of a provider.
      properties:
        appStoreUrl:
          type:
            - string
            - 'null'
          format: uri
          pattern: ^https://
          description: App Store URL.
        playStoreUrl:
          type:
            - string
            - 'null'
          format: uri
          pattern: ^https://
          description: Google Play URL.
      required:
        - appStoreUrl
        - playStoreUrl
      additionalProperties: false
    AssetView:
      type: object
      description: A rendered brand asset with its dimensions.
      properties:
        assetId:
          $ref: '#/components/schemas/ULong'
          description: Brand asset id.
        url:
          type: string
          format: uri
          pattern: ^https://
          description: Immutable public URL of the asset.
        width:
          type: integer
          description: Width in pixels.
        height:
          type: integer
          description: Height in pixels.
        variants:
          type:
            - array
            - 'null'
          items:
            type: object
            properties:
              width:
                type: integer
                description: Width in pixels.
              url:
                type: string
                format: uri
                pattern: ^https://
                description: URL of the variant.
              format:
                type: string
                enum:
                  - webp
                  - png
                  - jpeg
                description: 'Image format. Treat as an open set: new values may be added.'
            required:
              - width
              - url
              - format
            additionalProperties: false
          description: Resized variants; `null` until generated.
      required:
        - assetId
        - url
        - width
        - height
        - variants
      additionalProperties: false
  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.