Saltar al contenido principal
DocumentaciónModelos · console.latam.ccsio.ai

Organization provider connections

An organization's own provider connections and the models it serves through them, each visible to that organization alone.

Menú de la documentación

Las descripciones de las operaciones y los campos son las del contrato, en inglés.

GET/models/v1/organizations/{org}/providers

List the organization's provider connections

Credencial
API key
Permiso
model-providers.manage

Lists the provider connections the organization created: an external HTTPS API reached with the organization's own API key, with the models the organization added to each. Each carries the status of its key (set, version and fingerprint), never the key.

Leer más

Organization-scoped: the organization in the path must be the caller's own, and the caller must hold `model-providers.manage` there (root, organization_admin, or a custom role that carries it); a platform operator holds no access to an organization's provider connections, and any other caller is refused 403 `policy-denied` at the request boundary. The operations answer 503 `model-providers-disabled` while the plane's switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off, which is the default.

curl
curl "https://console.latam.ccsio.ai/models/v1/organizations/{org}/providers" \
  -H "Authorization: Bearer $CCSIO_API_KEY"

Parámetros

NombreEnDescripción
X-Request-ID
opcional
headerstring

Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form.

org
obligatorio
pathstring

Organization identifier (C7 identifier). It must be the caller's own organization.

Respuestas

  • 200

    Success.

    Esquema
    ListOrganizationProvidersResponse
    • providersarray of OrganizationProviderobligatorio
      • provider_idstringobligatorio

        pattern ^mp-[0-9a-hjkmnp-tv-z]{26}$

      • organization_idstringobligatorio

        The organization that owns the connection.

        pattern ^[a-z][a-z0-9._-]{0,63}$

      • display_namestringobligatorio

        1 to 80 characters

      • base_urlstringobligatorio

        The provider's base URL: https on a public DNS name (never an address, localhost or an internal-looking zone), at most 100 characters of letters, digits and . _ : / -, no userinfo, query or fragment, no trailing slash, and not on or under a host of CONTROL_PROVIDER_DENY_HOSTS. A deployment of the connection calls the base URL plus /chat/completions, /responses or /embeddings.

        at most 100 characters

      • protocolstringobligatorio

        always "openai-compat"

      • statestringobligatorio

        Valores permitidos: "enabled""disabled"

      • processing_locationstringobligatorio

        Where the provider processes the data, as declared by whoever configured the connection (free text, up to 120 characters).

        at most 120 characters

      • credentialobjectobligatorio

        The status of a connection's API key, and the only thing any route says about it. `set` is false when the connection has no key; the other members are present exactly when it has one.

        • setbooleanobligatorio
        • versionintegeropcional

          The version of the stored key, from one global sequence that never issues a number twice.

          at least 1

        • fingerprintstringopcional

          An ellipsis and the last four characters of the key, or the ellipsis alone for a key shorter than twelve characters.

          1 to 8 characters

        • updated_atstring (date-time)opcional
        • updated_bystringopcional
      • data_processing_acknowledged_bystringobligatorio

        Who acknowledged, when the connection was created, that requests to its models are processed by the provider.

      • data_processing_acknowledged_atstring (date-time)obligatorio
      • modelsarray of OrganizationProviderModelobligatorio

        The models added to the connection, sorted by name.

      • created_atstring (date-time)obligatorio
      • updated_atstring (date-time)obligatorio
      • created_bystringobligatorio
      • updated_bystringobligatorio
  • 400

    Client refusal unrelated to authentication, including malformed input, a denied or failed request.

  • 401

    The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:

    Leer más

    Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled

  • 402

    The organization has to pay first: its standing is payment_required.

    Leer más

    The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required

  • 403

    The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.

    Leer más

    Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)

  • 405

    The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    The organization's provider connections cannot be used on this deployment. Codes: model-providers-disabled (the switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off; nothing was read or written), credential-store-unavailable (no encryption keyring is configured, so a key cannot be sealed), provider-deny-hosts-unset (CONTROL_PROVIDER_DENY_HOSTS is unset, so a base URL cannot be checked), providers-unavailable (the connection store is not composed).

POST/models/v1/organizations/{org}/providers

Connect the organization's own provider with its API key

Credencial
API key
Permiso
model-providers.manage
Cuerpo de la solicitud
Cuerpo de hasta 65536 bytes

Creates a provider connection owned by the organization: a base URL on a public HTTPS host and one API key.

Leer más

The base URL follows the rule of the platform's connections (the public-URL rule, and not under a host of CONTROL_PROVIDER_DENY_HOSTS: 503 provider-deny-hosts-unset while that setting is unset); the key is sealed under the audit keyring (503 credential-store-unavailable while the plane has none). The caller must acknowledge that requests to the connection's models leave the plane and are processed by the provider under the organization's own agreement with it: `data_processing_acknowledged` must be true (400 data-processing-not-acknowledged otherwise), and who acknowledged it and when is recorded on the connection. An organization holds at most 10 live connections (409 model-provider-limit). Nothing is callable until a model is added to the connection. Organization-scoped: the organization in the path must be the caller's own, and the caller must hold `model-providers.manage` there (root, organization_admin, or a custom role that carries it); a platform operator holds no access to an organization's provider connections, and any other caller is refused 403 `policy-denied` at the request boundary. The operations answer 503 `model-providers-disabled` while the plane's switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off, which is the default. It is an audited management fact (security event `model_provider.created`) and the event never carries the key. The key is write-only: it is sealed in the database, never returned by any route, never logged and never part of an event or an error. Request body capped at 65536 bytes and decoded strictly: an unknown member or trailing data is a 400 invalid-request.

curl
curl -X POST "https://console.latam.ccsio.ai/models/v1/organizations/{org}/providers" \
  -H "Authorization: Bearer $CCSIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "display_name": "string",
  "base_url": "string",
  "api_key": "string"
}'
Construido con los campos obligatorios del esquema: reemplaza los valores.

Parámetros

NombreEnDescripción
X-Request-ID
opcional
headerstring

Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form.

org
obligatorio
pathstring

Organization identifier (C7 identifier). It must be the caller's own organization.

Cuerpo de la solicitud application/json

CreateOrganizationProviderRequest
  • display_namestringobligatorio

    1 to 80 characters

  • base_urlstringobligatorio

    The provider's base URL: https on a public DNS name (never an address, localhost or an internal-looking zone), at most 100 characters of letters, digits and . _ : / -, no userinfo, query or fragment, no trailing slash, and not on or under a host of CONTROL_PROVIDER_DENY_HOSTS. A deployment of the connection calls the base URL plus /chat/completions, /responses or /embeddings.

    at most 100 characters

  • api_keystringobligatorio

    The provider's API key: 8 to 512 printable ASCII characters without spaces. Write-only: it is sealed in the database and no route, log, event or error ever returns it.

    8 to 512 characters · pattern ^[\x21-\x7E]{8,512}$

  • processing_locationstringopcional

    Where the provider processes the data, as declared by whoever configured the connection (free text, up to 120 characters).

    at most 120 characters

  • data_processing_acknowledgedbooleanopcional

    Must be true: the caller acknowledges that requests to the connection's models leave the plane and are processed by the provider. Omitted or false is refused 400 data-processing-not-acknowledged.

Respuestas

  • 201

    The connection was created and its key stored.

    Esquema
    OrganizationProvider
    • provider_idstringobligatorio

      pattern ^mp-[0-9a-hjkmnp-tv-z]{26}$

    • organization_idstringobligatorio

      The organization that owns the connection.

      pattern ^[a-z][a-z0-9._-]{0,63}$

    • display_namestringobligatorio

      1 to 80 characters

    • base_urlstringobligatorio

      The provider's base URL: https on a public DNS name (never an address, localhost or an internal-looking zone), at most 100 characters of letters, digits and . _ : / -, no userinfo, query or fragment, no trailing slash, and not on or under a host of CONTROL_PROVIDER_DENY_HOSTS. A deployment of the connection calls the base URL plus /chat/completions, /responses or /embeddings.

      at most 100 characters

    • protocolstringobligatorio

      always "openai-compat"

    • statestringobligatorio

      Valores permitidos: "enabled""disabled"

    • processing_locationstringobligatorio

      Where the provider processes the data, as declared by whoever configured the connection (free text, up to 120 characters).

      at most 120 characters

    • credentialobjectobligatorio

      The status of a connection's API key, and the only thing any route says about it. `set` is false when the connection has no key; the other members are present exactly when it has one.

      • setbooleanobligatorio
      • versionintegeropcional

        The version of the stored key, from one global sequence that never issues a number twice.

        at least 1

      • fingerprintstringopcional

        An ellipsis and the last four characters of the key, or the ellipsis alone for a key shorter than twelve characters.

        1 to 8 characters

      • updated_atstring (date-time)opcional
      • updated_bystringopcional
    • data_processing_acknowledged_bystringobligatorio

      Who acknowledged, when the connection was created, that requests to its models are processed by the provider.

    • data_processing_acknowledged_atstring (date-time)obligatorio
    • modelsarray of OrganizationProviderModelobligatorio

      The models added to the connection, sorted by name.

      • namestringobligatorio

        The name the organization gave the model, unique in the organization.

        pattern ^[a-z0-9][a-z0-9._-]{0,47}$

      • model_refstringobligatorio

        The model ref a request names in its model field: `byo:<org_id>:<name>`.

        pattern ^byo:[a-z][a-z0-9._-]{0,63}:[a-z0-9][a-z0-9._-]{0,47}$

      • upstream_modelstringobligatorio

        The model name the provider expects; the platform sends it as the request's model.

        1 to 128 characters · pattern ^[A-Za-z0-9][A-Za-z0-9._:/@-]*$

      • capabilitiesarray of stringobligatorio

        What the model serves: one to three of chat-completions, responses and embeddings (a value outside those three is never rendered).

        Valores permitidos: "chat-completions""embeddings""responses""audio-speech""audio-transcriptions""image-generations""decisions"

        at least 1 items · at most 3 items

      • statestringobligatorio

        `active` while the model can be called; `disabled` while its connection is disabled or holds no key.

        Valores permitidos: "active""disabled"

      • created_atstring (date-time)obligatorio
      • created_bystringobligatorio
    • created_atstring (date-time)obligatorio
    • updated_atstring (date-time)obligatorio
    • created_bystringobligatorio
    • updated_bystringobligatorio
  • 400

    Client refusal unrelated to authentication, including malformed input, a denied or failed request.

  • 401

    The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:

    Leer más

    Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled

  • 402

    The organization has to pay first: its standing is payment_required.

    Leer más

    The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required

  • 403

    The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.

    Leer más

    Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)

  • 405

    The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.

  • 409

    The request conflicts with what the organization holds and nothing was changed. Codes: model-provider-limit (the organization holds 10 connections), provider-model-limit (the connection holds 50 models), provider-model-exists (the model name is taken in the organization).

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    The organization's provider connections cannot be used on this deployment. Codes: model-providers-disabled (the switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off; nothing was read or written), credential-store-unavailable (no encryption keyring is configured, so a key cannot be sealed), provider-deny-hosts-unset (CONTROL_PROVIDER_DENY_HOSTS is unset, so a base URL cannot be checked), providers-unavailable (the connection store is not composed).

GET/models/v1/organizations/{org}/providers/{provider}

Get one of the organization's provider connections

Credencial
API key
Permiso
model-providers.manage

Retrieves a connection of the organization by id, with the status of its key and its models. A connection that was deleted, or that belongs to another organization, is not found (400 provider-not-found: the same answer for both, so an id of another organization is not confirmed).

Leer más

Organization-scoped: the organization in the path must be the caller's own, and the caller must hold `model-providers.manage` there (root, organization_admin, or a custom role that carries it); a platform operator holds no access to an organization's provider connections, and any other caller is refused 403 `policy-denied` at the request boundary. The operations answer 503 `model-providers-disabled` while the plane's switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off, which is the default.

curl
curl "https://console.latam.ccsio.ai/models/v1/organizations/{org}/providers/{provider}" \
  -H "Authorization: Bearer $CCSIO_API_KEY"

Parámetros

NombreEnDescripción
X-Request-ID
opcional
headerstring

Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form.

org
obligatorio
pathstring

Organization identifier (C7 identifier). It must be the caller's own organization.

provider
obligatorio
pathstring

Provider connection identifier: mp- and 26 lowercase Crockford base32 characters.

Respuestas

  • 200

    Success.

    Esquema
    OrganizationProvider
    • provider_idstringobligatorio

      pattern ^mp-[0-9a-hjkmnp-tv-z]{26}$

    • organization_idstringobligatorio

      The organization that owns the connection.

      pattern ^[a-z][a-z0-9._-]{0,63}$

    • display_namestringobligatorio

      1 to 80 characters

    • base_urlstringobligatorio

      The provider's base URL: https on a public DNS name (never an address, localhost or an internal-looking zone), at most 100 characters of letters, digits and . _ : / -, no userinfo, query or fragment, no trailing slash, and not on or under a host of CONTROL_PROVIDER_DENY_HOSTS. A deployment of the connection calls the base URL plus /chat/completions, /responses or /embeddings.

      at most 100 characters

    • protocolstringobligatorio

      always "openai-compat"

    • statestringobligatorio

      Valores permitidos: "enabled""disabled"

    • processing_locationstringobligatorio

      Where the provider processes the data, as declared by whoever configured the connection (free text, up to 120 characters).

      at most 120 characters

    • credentialobjectobligatorio

      The status of a connection's API key, and the only thing any route says about it. `set` is false when the connection has no key; the other members are present exactly when it has one.

      • setbooleanobligatorio
      • versionintegeropcional

        The version of the stored key, from one global sequence that never issues a number twice.

        at least 1

      • fingerprintstringopcional

        An ellipsis and the last four characters of the key, or the ellipsis alone for a key shorter than twelve characters.

        1 to 8 characters

      • updated_atstring (date-time)opcional
      • updated_bystringopcional
    • data_processing_acknowledged_bystringobligatorio

      Who acknowledged, when the connection was created, that requests to its models are processed by the provider.

    • data_processing_acknowledged_atstring (date-time)obligatorio
    • modelsarray of OrganizationProviderModelobligatorio

      The models added to the connection, sorted by name.

      • namestringobligatorio

        The name the organization gave the model, unique in the organization.

        pattern ^[a-z0-9][a-z0-9._-]{0,47}$

      • model_refstringobligatorio

        The model ref a request names in its model field: `byo:<org_id>:<name>`.

        pattern ^byo:[a-z][a-z0-9._-]{0,63}:[a-z0-9][a-z0-9._-]{0,47}$

      • upstream_modelstringobligatorio

        The model name the provider expects; the platform sends it as the request's model.

        1 to 128 characters · pattern ^[A-Za-z0-9][A-Za-z0-9._:/@-]*$

      • capabilitiesarray of stringobligatorio

        What the model serves: one to three of chat-completions, responses and embeddings (a value outside those three is never rendered).

        Valores permitidos: "chat-completions""embeddings""responses""audio-speech""audio-transcriptions""image-generations""decisions"

        at least 1 items · at most 3 items

      • statestringobligatorio

        `active` while the model can be called; `disabled` while its connection is disabled or holds no key.

        Valores permitidos: "active""disabled"

      • created_atstring (date-time)obligatorio
      • created_bystringobligatorio
    • created_atstring (date-time)obligatorio
    • updated_atstring (date-time)obligatorio
    • created_bystringobligatorio
    • updated_bystringobligatorio
  • 400

    Client refusal unrelated to authentication, including malformed input, a denied or failed request.

  • 401

    The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:

    Leer más

    Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled

  • 402

    The organization has to pay first: its standing is payment_required.

    Leer más

    The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required

  • 403

    The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.

    Leer más

    Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)

  • 405

    The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    The organization's provider connections cannot be used on this deployment. Codes: model-providers-disabled (the switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off; nothing was read or written), credential-store-unavailable (no encryption keyring is configured, so a key cannot be sealed), provider-deny-hosts-unset (CONTROL_PROVIDER_DENY_HOSTS is unset, so a base URL cannot be checked), providers-unavailable (the connection store is not composed).

PATCH/models/v1/organizations/{org}/providers/{provider}

Change one of the organization's provider connections

Credencial
API key
Permiso
model-providers.manage
Cuerpo de la solicitud
Cuerpo de hasta 65536 bytes

Changes the display name, the processing location or the state of a connection (a disabled connection stops serving its models until it is enabled again), or its base URL.

Leer más

A change of the base URL requires a new `api_key` in the same request (400 provider-key-required otherwise), so a stored key never follows a changed host. With an `api_key` the key is replaced and takes a new version. The request must change something. Organization-scoped: the organization in the path must be the caller's own, and the caller must hold `model-providers.manage` there (root, organization_admin, or a custom role that carries it); a platform operator holds no access to an organization's provider connections, and any other caller is refused 403 `policy-denied` at the request boundary. The operations answer 503 `model-providers-disabled` while the plane's switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off, which is the default. It is an audited management fact (security event `model_provider.updated`) and the event never carries the key. The key is write-only: it is sealed in the database, never returned by any route, never logged and never part of an event or an error. Request body capped at 65536 bytes and decoded strictly: an unknown member or trailing data is a 400 invalid-request.

curl
curl -X PATCH "https://console.latam.ccsio.ai/models/v1/organizations/{org}/providers/{provider}" \
  -H "Authorization: Bearer $CCSIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Construido con los campos obligatorios del esquema: reemplaza los valores.

Parámetros

NombreEnDescripción
X-Request-ID
opcional
headerstring

Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form.

org
obligatorio
pathstring

Organization identifier (C7 identifier). It must be the caller's own organization.

provider
obligatorio
pathstring

Provider connection identifier: mp- and 26 lowercase Crockford base32 characters.

Cuerpo de la solicitud application/json

UpdateModelProviderRequest
  • display_namestringopcional

    1 to 80 characters

  • base_urlstringopcional

    The provider's base URL: https on a public DNS name (never an address, localhost or an internal-looking zone), at most 100 characters of letters, digits and . _ : / -, no userinfo, query or fragment, no trailing slash, and not on or under a host of CONTROL_PROVIDER_DENY_HOSTS. A deployment of the connection calls the base URL plus /chat/completions, /responses or /embeddings.

    at most 100 characters

  • api_keystringopcional

    The provider's API key: 8 to 512 printable ASCII characters without spaces. Write-only: it is sealed in the database and no route, log, event or error ever returns it.

    8 to 512 characters · pattern ^[\x21-\x7E]{8,512}$

  • processing_locationstringopcional

    Where the provider processes the data, as declared by whoever configured the connection (free text, up to 120 characters).

    at most 120 characters

  • statestringopcional

    Valores permitidos: "enabled""disabled"

Respuestas

  • 200

    The connection after the change.

    Esquema
    OrganizationProvider
    • provider_idstringobligatorio

      pattern ^mp-[0-9a-hjkmnp-tv-z]{26}$

    • organization_idstringobligatorio

      The organization that owns the connection.

      pattern ^[a-z][a-z0-9._-]{0,63}$

    • display_namestringobligatorio

      1 to 80 characters

    • base_urlstringobligatorio

      The provider's base URL: https on a public DNS name (never an address, localhost or an internal-looking zone), at most 100 characters of letters, digits and . _ : / -, no userinfo, query or fragment, no trailing slash, and not on or under a host of CONTROL_PROVIDER_DENY_HOSTS. A deployment of the connection calls the base URL plus /chat/completions, /responses or /embeddings.

      at most 100 characters

    • protocolstringobligatorio

      always "openai-compat"

    • statestringobligatorio

      Valores permitidos: "enabled""disabled"

    • processing_locationstringobligatorio

      Where the provider processes the data, as declared by whoever configured the connection (free text, up to 120 characters).

      at most 120 characters

    • credentialobjectobligatorio

      The status of a connection's API key, and the only thing any route says about it. `set` is false when the connection has no key; the other members are present exactly when it has one.

      • setbooleanobligatorio
      • versionintegeropcional

        The version of the stored key, from one global sequence that never issues a number twice.

        at least 1

      • fingerprintstringopcional

        An ellipsis and the last four characters of the key, or the ellipsis alone for a key shorter than twelve characters.

        1 to 8 characters

      • updated_atstring (date-time)opcional
      • updated_bystringopcional
    • data_processing_acknowledged_bystringobligatorio

      Who acknowledged, when the connection was created, that requests to its models are processed by the provider.

    • data_processing_acknowledged_atstring (date-time)obligatorio
    • modelsarray of OrganizationProviderModelobligatorio

      The models added to the connection, sorted by name.

      • namestringobligatorio

        The name the organization gave the model, unique in the organization.

        pattern ^[a-z0-9][a-z0-9._-]{0,47}$

      • model_refstringobligatorio

        The model ref a request names in its model field: `byo:<org_id>:<name>`.

        pattern ^byo:[a-z][a-z0-9._-]{0,63}:[a-z0-9][a-z0-9._-]{0,47}$

      • upstream_modelstringobligatorio

        The model name the provider expects; the platform sends it as the request's model.

        1 to 128 characters · pattern ^[A-Za-z0-9][A-Za-z0-9._:/@-]*$

      • capabilitiesarray of stringobligatorio

        What the model serves: one to three of chat-completions, responses and embeddings (a value outside those three is never rendered).

        Valores permitidos: "chat-completions""embeddings""responses""audio-speech""audio-transcriptions""image-generations""decisions"

        at least 1 items · at most 3 items

      • statestringobligatorio

        `active` while the model can be called; `disabled` while its connection is disabled or holds no key.

        Valores permitidos: "active""disabled"

      • created_atstring (date-time)obligatorio
      • created_bystringobligatorio
    • created_atstring (date-time)obligatorio
    • updated_atstring (date-time)obligatorio
    • created_bystringobligatorio
    • updated_bystringobligatorio
  • 400

    Client refusal unrelated to authentication, including malformed input, a denied or failed request.

  • 401

    The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:

    Leer más

    Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled

  • 402

    The organization has to pay first: its standing is payment_required.

    Leer más

    The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required

  • 403

    The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.

    Leer más

    Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)

  • 405

    The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    The organization's provider connections cannot be used on this deployment. Codes: model-providers-disabled (the switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off; nothing was read or written), credential-store-unavailable (no encryption keyring is configured, so a key cannot be sealed), provider-deny-hosts-unset (CONTROL_PROVIDER_DENY_HOSTS is unset, so a base URL cannot be checked), providers-unavailable (the connection store is not composed).

DELETE/models/v1/organizations/{org}/providers/{provider}

Delete one of the organization's provider connections

Credencial
API key
Permiso
model-providers.manage

Deletes a connection: its key is removed for good, the connection is marked deleted (the row stays: usage facts and deployments name it), every model added to it stops serving and the organization's access to those models, and every team's, is revoked.

Leer más

Organization-scoped: the organization in the path must be the caller's own, and the caller must hold `model-providers.manage` there (root, organization_admin, or a custom role that carries it); a platform operator holds no access to an organization's provider connections, and any other caller is refused 403 `policy-denied` at the request boundary. The operations answer 503 `model-providers-disabled` while the plane's switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off, which is the default. It is an audited management fact (security event `model_provider.deleted`) and the event never carries the key.

curl
curl -X DELETE "https://console.latam.ccsio.ai/models/v1/organizations/{org}/providers/{provider}" \
  -H "Authorization: Bearer $CCSIO_API_KEY"

Parámetros

NombreEnDescripción
X-Request-ID
opcional
headerstring

Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form.

org
obligatorio
pathstring

Organization identifier (C7 identifier). It must be the caller's own organization.

provider
obligatorio
pathstring

Provider connection identifier: mp- and 26 lowercase Crockford base32 characters.

Respuestas

  • 204

    The connection was deleted.

  • 400

    Client refusal unrelated to authentication, including malformed input, a denied or failed request.

  • 401

    The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:

    Leer más

    Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled

  • 402

    The organization has to pay first: its standing is payment_required.

    Leer más

    The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required

  • 403

    The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.

    Leer más

    Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)

  • 405

    The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    The organization's provider connections cannot be used on this deployment. Codes: model-providers-disabled (the switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off; nothing was read or written), credential-store-unavailable (no encryption keyring is configured, so a key cannot be sealed), provider-deny-hosts-unset (CONTROL_PROVIDER_DENY_HOSTS is unset, so a base URL cannot be checked), providers-unavailable (the connection store is not composed).

PUT/models/v1/organizations/{org}/providers/{provider}/credential

Set or rotate the API key of one of the organization's connections

Credencial
API key
Permiso
model-providers.manage
Cuerpo de la solicitud
Cuerpo de hasta 65536 bytes

Stores a new API key for the connection under a new version (the version comes from one global sequence and is never reused); the next request carries it and the old value is never asked for again.

Leer más

The answer is the status of the key: whether one is set, its version and a fingerprint (an ellipsis and the last four characters, or the ellipsis alone for a key shorter than twelve characters). Organization-scoped: the organization in the path must be the caller's own, and the caller must hold `model-providers.manage` there (root, organization_admin, or a custom role that carries it); a platform operator holds no access to an organization's provider connections, and any other caller is refused 403 `policy-denied` at the request boundary. The operations answer 503 `model-providers-disabled` while the plane's switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off, which is the default. It is an audited management fact (security event `model_provider.credential_set`) and the event never carries the key. The key is write-only: it is sealed in the database, never returned by any route, never logged and never part of an event or an error. Request body capped at 65536 bytes and decoded strictly: an unknown member or trailing data is a 400 invalid-request.

curl
curl -X PUT "https://console.latam.ccsio.ai/models/v1/organizations/{org}/providers/{provider}/credential" \
  -H "Authorization: Bearer $CCSIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "api_key": "string"
}'
Construido con los campos obligatorios del esquema: reemplaza los valores.

Parámetros

NombreEnDescripción
X-Request-ID
opcional
headerstring

Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form.

org
obligatorio
pathstring

Organization identifier (C7 identifier). It must be the caller's own organization.

provider
obligatorio
pathstring

Provider connection identifier: mp- and 26 lowercase Crockford base32 characters.

Cuerpo de la solicitud application/json

SetModelProviderCredentialRequest
  • api_keystringobligatorio

    The provider's API key: 8 to 512 printable ASCII characters without spaces. Write-only: it is sealed in the database and no route, log, event or error ever returns it.

    8 to 512 characters · pattern ^[\x21-\x7E]{8,512}$

Respuestas

  • 200

    The key was stored.

    Esquema
    ModelProviderCredentialStatus
    • setbooleanobligatorio
    • versionintegeropcional

      The version of the stored key, from one global sequence that never issues a number twice.

      at least 1

    • fingerprintstringopcional

      An ellipsis and the last four characters of the key, or the ellipsis alone for a key shorter than twelve characters.

      1 to 8 characters

    • updated_atstring (date-time)opcional
    • updated_bystringopcional
  • 400

    Client refusal unrelated to authentication, including malformed input, a denied or failed request.

  • 401

    The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:

    Leer más

    Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled

  • 402

    The organization has to pay first: its standing is payment_required.

    Leer más

    The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required

  • 403

    The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.

    Leer más

    Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)

  • 405

    The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    The organization's provider connections cannot be used on this deployment. Codes: model-providers-disabled (the switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off; nothing was read or written), credential-store-unavailable (no encryption keyring is configured, so a key cannot be sealed), provider-deny-hosts-unset (CONTROL_PROVIDER_DENY_HOSTS is unset, so a base URL cannot be checked), providers-unavailable (the connection store is not composed).

POST/models/v1/organizations/{org}/providers/{provider}/models

Add a model to one of the organization's connections

Credencial
API key
Permiso
model-providers.manage
Cuerpo de la solicitud
Cuerpo de hasta 65536 bytes

Adds a model the connection serves.

Leer más

In one transaction core creates the catalog model `byo:<org_id>:<name>` in the organization's own placement, one deployment of it per capability (provider class CUSTOMER_HOSTED, reached over the public egress with the connection's stored key, active at once) and, through the entitlement mechanism, gives the ORGANIZATION access to the model: every member that belongs to the organization directly may call it by its `model_ref`, and a member that belongs to a team is admitted too. To restrict it to teams the organization uses the existing team entitlement routes (`POST /identity/v1/organizations/{org}/teams/{team}/entitlements`); a member that belongs to the organization directly, and not through a team, is never restricted by them. The model is visible to the organization alone: no other organization sees or calls it, and the name of another organization's model is not found. `name` is `^[a-z0-9][a-z0-9._-]{0,47}$`, `upstream_model` is the model name the provider expects, and `capabilities` lists one to three of chat-completions, responses and embeddings (a deployment per capability; any other value is refused 400 provider-invalid). A connection holds at most 50 models (409 provider-model-limit) and a name is unique in the organization (409 provider-model-exists). Requests to the model are recorded with provider class CUSTOMER_HOSTED and are never charged. Organization-scoped: the organization in the path must be the caller's own, and the caller must hold `model-providers.manage` there (root, organization_admin, or a custom role that carries it); a platform operator holds no access to an organization's provider connections, and any other caller is refused 403 `policy-denied` at the request boundary. The operations answer 503 `model-providers-disabled` while the plane's switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off, which is the default. It is an audited management fact (security event `model_provider.model_added`). Request body capped at 65536 bytes and decoded strictly: an unknown member or trailing data is a 400 invalid-request.

curl
curl -X POST "https://console.latam.ccsio.ai/models/v1/organizations/{org}/providers/{provider}/models" \
  -H "Authorization: Bearer $CCSIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "name": "string",
  "upstream_model": "string",
  "capabilities": [
    "chat-completions"
  ]
}'
Construido con los campos obligatorios del esquema: reemplaza los valores.

Parámetros

NombreEnDescripción
X-Request-ID
opcional
headerstring

Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form.

org
obligatorio
pathstring

Organization identifier (C7 identifier). It must be the caller's own organization.

provider
obligatorio
pathstring

Provider connection identifier: mp- and 26 lowercase Crockford base32 characters.

Cuerpo de la solicitud application/json

AddOrganizationProviderModelRequest
  • namestringobligatorio

    pattern ^[a-z0-9][a-z0-9._-]{0,47}$

  • upstream_modelstringobligatorio

    1 to 128 characters · pattern ^[A-Za-z0-9][A-Za-z0-9._:/@-]*$

  • capabilitiesarray of stringobligatorio

    One to three of chat-completions, responses and embeddings, with no duplicate; any other value is refused 400 provider-invalid.

    Valores permitidos: "chat-completions""embeddings""responses""audio-speech""audio-transcriptions""image-generations""decisions"

    at least 1 items · at most 3 items

Respuestas

  • 201

    The model was added.

    Esquema
    OrganizationProviderModel
    • namestringobligatorio

      The name the organization gave the model, unique in the organization.

      pattern ^[a-z0-9][a-z0-9._-]{0,47}$

    • model_refstringobligatorio

      The model ref a request names in its model field: `byo:<org_id>:<name>`.

      pattern ^byo:[a-z][a-z0-9._-]{0,63}:[a-z0-9][a-z0-9._-]{0,47}$

    • upstream_modelstringobligatorio

      The model name the provider expects; the platform sends it as the request's model.

      1 to 128 characters · pattern ^[A-Za-z0-9][A-Za-z0-9._:/@-]*$

    • capabilitiesarray of stringobligatorio

      What the model serves: one to three of chat-completions, responses and embeddings (a value outside those three is never rendered).

      Valores permitidos: "chat-completions""embeddings""responses""audio-speech""audio-transcriptions""image-generations""decisions"

      at least 1 items · at most 3 items

    • statestringobligatorio

      `active` while the model can be called; `disabled` while its connection is disabled or holds no key.

      Valores permitidos: "active""disabled"

    • created_atstring (date-time)obligatorio
    • created_bystringobligatorio
  • 400

    Client refusal unrelated to authentication, including malformed input, a denied or failed request.

  • 401

    The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:

    Leer más

    Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled

  • 402

    The organization has to pay first: its standing is payment_required.

    Leer más

    The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required

  • 403

    The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.

    Leer más

    Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)

  • 405

    The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.

  • 409

    The request conflicts with what the organization holds and nothing was changed. Codes: model-provider-limit (the organization holds 10 connections), provider-model-limit (the connection holds 50 models), provider-model-exists (the model name is taken in the organization).

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    The organization's provider connections cannot be used on this deployment. Codes: model-providers-disabled (the switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off; nothing was read or written), credential-store-unavailable (no encryption keyring is configured, so a key cannot be sealed), provider-deny-hosts-unset (CONTROL_PROVIDER_DENY_HOSTS is unset, so a base URL cannot be checked), providers-unavailable (the connection store is not composed).

DELETE/models/v1/organizations/{org}/providers/{provider}/models/{name}

Remove a model from one of the organization's connections

Credencial
API key
Permiso
model-providers.manage

Removes a model: its deployments stop serving and are disabled, and the organization's access to it, with every team's, is revoked. The name may then be added again.

Leer más

Organization-scoped: the organization in the path must be the caller's own, and the caller must hold `model-providers.manage` there (root, organization_admin, or a custom role that carries it); a platform operator holds no access to an organization's provider connections, and any other caller is refused 403 `policy-denied` at the request boundary. The operations answer 503 `model-providers-disabled` while the plane's switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off, which is the default. It is an audited management fact (security event `model_provider.model_removed`).

curl
curl -X DELETE "https://console.latam.ccsio.ai/models/v1/organizations/{org}/providers/{provider}/models/{name}" \
  -H "Authorization: Bearer $CCSIO_API_KEY"

Parámetros

NombreEnDescripción
X-Request-ID
opcional
headerstring

Optional request ULID. A valid ULID (upper or lowercase) is honored; when the header is absent or invalid, the runtime mints the id. The response X-Request-ID header carries the canonical uppercase form.

org
obligatorio
pathstring

Organization identifier (C7 identifier). It must be the caller's own organization.

provider
obligatorio
pathstring

Provider connection identifier: mp- and 26 lowercase Crockford base32 characters.

name
obligatorio
pathstring

The name of a model added to a provider connection, the last part of its model ref `byo:<org_id>:<name>`.

Respuestas

  • 204

    The model was removed.

  • 400

    Client refusal unrelated to authentication, including malformed input, a denied or failed request.

  • 401

    The request carries no credential, more than one, or one the platform does not accept, and is refused before the operation runs; `error.code` says why. Supply exactly one credential. Codes: invalid-request (no credential, or both Authorization:

    Leer más

    Bearer and x-api-key), api-key-invalid (a value that is not a platform API key, or a key of a kind the platform does not accept), api-key-unknown, api-key-revoked, api-key-expired, bootstrap-disabled (the one-shot installation credential, once a key exists), token-malformed (a bearer token that is not a JWT), token-algorithm-unsupported, token-signature-invalid, token-claim-invalid, token-issuer-mismatch, token-audience-mismatch, token-expired, token-not-yet-valid, issuer-untrusted, issuer-residency-mismatch (the issuer belongs to another plane), issuer-resolution-unknown, jwks-unavailable, jwks-key-not-found, staff-token-inactive (a platform operator's token), staff-not-operator, staff-directory-unavailable, identity-not-provisioned (a verified identity with no account on this plane), organization-not-found (a verified identity or key whose organization this plane does not know), internal-error (a fault while the credential is checked is refused too, fail closed), context-cancelled

  • 402

    The organization has to pay first: its standing is payment_required.

    Leer más

    The request boundary applies this payment gate to every route except an organization's billing routes, the caller's own context, organization list, onboarding, session report and personal keys, the public routes, and the routes of platform operators, who administer an organization that has to pay. The operations the gate covers declare this response. On /v1 the refusal is rendered in the OpenAI error format. Code: payment-required

  • 403

    The credential is valid but may not do this here; the request is refused by the request boundary before the handler runs, and `error.code` says which refusal. An operation may add codes of its own.

    Leer más

    Codes: policy-denied (no role of the caller holds the permission the operation needs, or the credential class may not call it: a personal API key outside inference and MCP, a route that needs a signed-in person, the one-shot installation credential outside its three steps), tenant-mismatch (the organization a path, query, body or X-Tenant header names is not the caller's own), organization-provisioning, organization-suspended, organization-disabled, organization-deleted (the state of the caller's organization), user-disabled, residency-mismatch (the organization lives on another plane), organization-selection-required (a caller with more than one organization, or a platform operator, must name one in X-Organization-Id), organization-not-selectable, no-active-organization-membership, team-not-selectable (the X-Organization-Id or X-Team-Id the caller sent does not name an organization or team it may act in), identity-managed-by-provider (a person who is not a platform operator changes an organization's status, which belongs to the identity provider), support-session-required (a platform operator reads an organization's data without an open support session)

  • 404

    The connection holds no model of that name. Code: provider-model-not-found.

  • 405

    The path is claimed but the request method is not allowed. Go ServeMux returns its standard plain-text response and lists permitted methods in Allow.

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    The organization's provider connections cannot be used on this deployment. Codes: model-providers-disabled (the switch CONTROL_ORGANIZATION_MODEL_PROVIDERS is off; nothing was read or written), credential-store-unavailable (no encryption keyring is configured, so a key cannot be sealed), provider-deny-hosts-unset (CONTROL_PROVIDER_DENY_HOSTS is unset, so a base URL cannot be checked), providers-unavailable (the connection store is not composed).

Generado a partir de los contratos de la plataforma en el commit 5f833620.

Explora la plataforma

Obtén tu primera key API

El registro está abierto. Cuatro pasos hasta tu primera llamada: crea tu cuenta, crea tu organización, crea tu API key y empieza a usarla.

  1. 01Crea tu cuenta
  2. 02Crea tu organización
  3. 03Crea tu API key
  4. 04Empieza a usarla