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

# Replace the Provider Allowlist

> Replaces the whole set of providers your organization offers with the ids in the body.

Replaces the whole set of providers your organization offers with the ids in the body.

**A provider the body omits stops being offered.** This is a replace, not a merge — use [Update Several Providers' Visibility](/reference/organizations/whitelabel/update-providers-visibility) to change some providers without restating the rest.

Removing a provider **keeps** its instruction override, so toggling it off and on again does not lose your wording.

### Body

<ParamField body="provider_ids" type="string[]" required>
  The complete set of provider ids your organization offers. UPPER\_SNAKE\_CASE catalogue ids (`[A-Z0-9_]`), at most 100 characters each, at most 500 entries. Case-insensitive — normalized to upper case.

  An **empty array is a legal request** and clears the allowlist, the same end state as [Clear the Provider Allowlist](/reference/organizations/whitelabel/clear-provider-allowlist). A save-everything admin screen therefore needs no special case for "the last provider was unticked".
</ParamField>

<Warning>
  Under the opt-in rule, an empty `provider_ids` leaves your organization with no allowlist entries at all — it is **not** a "show everything" switch. Send the ids you want to offer rather than clearing the list to widen it.
</Warning>

### Response

The refreshed overlay, in the same shape as [List the White-label Provider Overlay](/reference/organizations/whitelabel/list-providers).

<ResponseField name="filtered" type="boolean">
  Whether your organization has at least one allowlist entry, after this change.
</ResponseField>

<ResponseField name="providers" type="object[]">
  The union of your allowlist, your instruction overrides, and your logo overrides.
</ResponseField>

<CodeGroup>
  ```bash cURL theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}}
  curl -X PUT 'https://api.y.uno/v1/whitelabel/providers' \
    -H 'public-api-key: <YOUR_PUBLIC_KEY>' \
    -H 'private-secret-key: <YOUR_SECRET_KEY>' \
    -H 'Content-Type: application/json' \
    -d '{ "provider_ids": ["STRIPE", "ADYEN", "YUNO_3DS"] }'
  ```

  ```json 200 OK theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}}
  {
    "filtered": true,
    "providers": [
      {
        "provider_id": "ADYEN",
        "allowed": true,
        "has_instruction_override": false
      },
      {
        "provider_id": "STRIPE",
        "allowed": true,
        "has_instruction_override": true,
        "more_info_url": "https://docs.example.com/stripe"
      },
      {
        "provider_id": "YUNO_3DS",
        "allowed": true,
        "has_instruction_override": false,
        "logo_url": "https://s3.amazonaws.com/whitelabel/logo.png?X-Amz-Signature=..."
      }
    ]
  }
  ```

  ```json 400 Bad Request theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}}
  {
    "title": "Bad Request",
    "status": 400,
    "detail": "provider_ids contains an invalid catalogue id"
  }
  ```
</CodeGroup>

### Errors

<div className="code-nowrap-table dense-table">
  | HTTP  | Envelope            | When                                                                            |
  | ----- | ------------------- | ------------------------------------------------------------------------------- |
  | `400` | problem+json        | An unknown field, more than 500 ids, or an id that is not a valid catalogue id. |
  | `401` | `NOT_AUTHENTICATED` | Missing or invalid API keys.                                                    |
  | `413` | —                   | Request body larger than 256 KB.                                                |
</div>


## OpenAPI

````yaml openapi/organizations/whitelabel/replace-provider-allowlist.json PUT /whitelabel/providers
openapi: 3.1.0
info:
  title: White-label Providers API - Replace Allowlist
  version: 1.0.0
servers:
  - url: https://api-sandbox.y.uno/v1
  - url: https://api.eu.y.uno/v1
security:
  - sec0: []
    sec1: []
paths:
  /whitelabel/providers:
    put:
      summary: Replace the Provider Allowlist
      description: >-
        Replaces the whole set of providers your organization offers with the
        ids in the body. A provider the body omits stops being offered — this is
        a replace, not a merge; use `PATCH /v1/whitelabel/providers` to change
        some providers without restating the rest.


        An empty `provider_ids` is a legal request and clears the allowlist, the
        same end state as `DELETE /v1/whitelabel/providers`, so a
        save-everything admin screen needs no special case for "the last
        provider was unticked".


        Removing a provider keeps its instruction override, so toggling it off
        and on again does not lose your wording.
      operationId: replace-whitelabel-provider-allowlist
      requestBody:
        required: true
        description: The complete set of provider ids to offer.
        content:
          application/json:
            schema:
              type: object
              required:
                - provider_ids
              properties:
                provider_ids:
                  type: array
                  description: >-
                    The complete set of provider ids the organization offers.
                    UPPER_SNAKE_CASE catalogue ids (`[A-Z0-9_]`), at most 100
                    characters each, at most 500 entries.
                  maxItems: 500
                  items:
                    type: string
                    maxLength: 100
                  example:
                    - STRIPE
                    - ADYEN
                    - YUNO_3DS
      responses:
        '200':
          description: The refreshed overlay.
          content:
            application/json:
              schema:
                type: object
                properties:
                  filtered:
                    type: boolean
                    description: >-
                      Whether the organization has at least one allowlist entry.
                      Branch on this, never on the length of `providers` — the
                      list is also non-empty when the only entries are
                      instruction or logo overrides.
                    example: true
                  providers:
                    type: array
                    description: >-
                      The union of the allowlist, the instruction overrides, and
                      the logo overrides. A provider can carry custom wording or
                      a custom logo without being offered, in which case it
                      appears with `allowed: false`.
                    items:
                      type: object
                      properties:
                        provider_id:
                          type: string
                          description: Yuno catalogue provider id, UPPER_SNAKE_CASE.
                          example: STRIPE
                        allowed:
                          type: boolean
                          description: Whether the organization offers this provider.
                          example: true
                        has_instruction_override:
                          type: boolean
                          description: >-
                            Whether any instruction override exists. A cheap
                            badge flag, redundant with the content fields and
                            not authoritative for rendering them.
                          example: true
                        name:
                          type: string
                          description: >-
                            Display name replacing the catalogue's, when
                            overridden. Only Yuno-owned providers can carry one.
                          example: Acme Risk
                        instructions:
                          type: array
                          description: >-
                            Connection steps replacing the catalogue's, when
                            overridden. Absent means keep the catalogue's.
                          items:
                            type: object
                            additionalProperties: true
                            description: >-
                              One instruction step. Accepts `step`, `text`,
                              `text_link`, `link`, `type`,
                              `has_sub_instructions`, `sub_instructions_type`
                              and `sub_instructions` (nested up to 3 levels).
                              `text` and `text_link` are either a plain string
                              or a language map such as `{"EN": "...", "ES":
                              "..."}`. Every `link` must be https.
                        setup_instructions:
                          type: array
                          description: >-
                            Grouped setup steps replacing the catalogue's, when
                            overridden. Absent means keep the catalogue's.
                          items:
                            type: object
                            additionalProperties: true
                            description: >-
                              One setup group. Accepts `title`, `order`,
                              `instructions_type` and `instructions` (the same
                              step shape).
                        more_info_url:
                          type: string
                          format: uri
                          description: >-
                            Documentation link replacing the catalogue's, when
                            overridden. Always https.
                          example: https://docs.example.com/stripe
                        logo_url:
                          type: string
                          readOnly: true
                          description: >-
                            Read-only and ephemeral: a presigned URL minted on
                            this read and valid only for a short window. Never
                            store it — read the provider again for a fresh one.
                          example: >-
                            https://s3.amazonaws.com/whitelabel/logo.png?X-Amz-Signature=...
        '400':
          description: >-
            Validation error — unknown field, more than 500 ids, or an id that
            is not a valid catalogue id.
          content:
            application/json:
              schema:
                type: object
                properties:
                  type:
                    type: string
                    example: about:blank
                  title:
                    type: string
                    example: Bad Request
                  status:
                    type: integer
                    example: 400
                  detail:
                    type: string
                    example: provider_ids contains an invalid catalogue id
        '401':
          description: Unauthorized — invalid or missing API keys.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: string
                    example: NOT_AUTHENTICATED
                  messages:
                    type: array
                    items:
                      type: string
                    example:
                      - Not authenticated
        '413':
          description: Request body larger than 256 KB.
          content:
            application/json:
              schema:
                type: object
                properties:
                  code:
                    type: string
                    example: VALIDATION_ERROR
                  messages:
                    type: array
                    items:
                      type: string
                    example:
                      - Request body is too large
components:
  securitySchemes:
    sec0:
      type: apiKey
      in: header
      name: PUBLIC-API-KEY
      x-default: <Your PUBLIC-API-KEY>
    sec1:
      type: apiKey
      in: header
      name: PRIVATE-SECRET-KEY
      x-default: <Your PRIVATE-SECRET-KEY>

````