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

# Update Several Providers' Visibility

> Turns the named providers on or off in one request, leaving every other provider untouched.

Turns the named providers on or off in one request. **Only the providers you list are touched** — every other provider keeps whatever it had, which is what separates this from [Replace the Provider Allowlist](/reference/organizations/whitelabel/replace-provider-allowlist).

Idempotent, and turning a provider off keeps its instruction override.

<Note>
  The whole request is validated before the first row is written: a repeated `provider_id` changes **nothing** rather than half of what you asked for.
</Note>

### Body

<ParamField body="providers" type="object[]" required>
  The providers whose visibility changes in this request. At most 500 entries, and each `provider_id` may appear at most once.

  <Expandable title="item">
    <ParamField body="provider_id" type="string" required>
      Yuno catalogue provider id in UPPER\_SNAKE\_CASE. Case-insensitive — normalized to upper case before the repeat check, so `stripe` and `STRIPE` count as the same entry.
    </ParamField>

    <ParamField body="visible" type="boolean" required>
      Whether your organization offers this provider. `visible: false` on a provider that is not on the allowlist is a no-op.
    </ParamField>
  </Expandable>
</ParamField>

### 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 PATCH '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 '{
      "providers": [
        { "provider_id": "STRIPE", "visible": true },
        { "provider_id": "DLOCAL", "visible": false }
      ]
    }'
  ```

  ```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"
      }
    ]
  }
  ```

  ```json 400 — repeated provider_id theme={"theme":{"light":"github-dark","dark":"github-dark-dimmed"}}
  {
    "title": "Bad Request",
    "status": 400,
    "detail": "provider_id must appear at most once per request; repeated: STRIPE"
  }
  ```
</CodeGroup>

### Errors

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


## OpenAPI

````yaml openapi/organizations/whitelabel/update-providers-visibility.json PATCH /whitelabel/providers
openapi: 3.1.0
info:
  title: White-label Providers API - Bulk Update Visibility
  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:
    patch:
      summary: Update Several Providers' Visibility
      description: >-
        Turns the named providers on or off in one request. Only the providers
        listed are touched — every other provider keeps whatever it had, which
        is what separates this from `PUT /v1/whitelabel/providers`.


        Every id is normalized and checked for repeats before the first row is
        written, so a request carrying a repeated id changes nothing rather than
        half of what it asked for. Idempotent, and turning a provider off keeps
        its instruction override.
      operationId: update-whitelabel-providers-visibility
      requestBody:
        required: true
        description: The providers whose visibility changes.
        content:
          application/json:
            schema:
              type: object
              required:
                - providers
              properties:
                providers:
                  type: array
                  description: >-
                    The providers whose visibility changes in this request. At
                    most 500 entries, each provider_id at most once.
                  maxItems: 500
                  items:
                    type: object
                    required:
                      - provider_id
                      - visible
                    properties:
                      provider_id:
                        type: string
                        description: Yuno catalogue provider id, UPPER_SNAKE_CASE.
                        example: STRIPE
                      visible:
                        type: boolean
                        description: Whether the organization offers this provider.
                        example: true
      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, an id that is not a valid
            catalogue id, or a repeated provider_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_id must appear at most once per request;
                      repeated: STRIPE
        '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>

````