Skip to main content
DocumentationIdentity and access · console.latam.ccsio.ai

Access requests

A team's requests for access to a model or an MCP server, and the decision of the organization's administrators.

Documentation menu

The descriptions of the operations and fields are the contract’s own, in English.

GET/identity/v1/organizations/{org}/teams/{team}/access

What the organization holds and how one team stands with each

Credential
API key
Permission
teams.update

Needs teams.update for the named team: its administrator, or an administrator of the organization.

Read more

Lists the organization's models (the ones it holds access to, directly or through a model group) and its MCP servers (the ones it installed), each with the team's standing: every_team (nothing restricts it), this_team (restricted to teams that include this one) or other_teams (restricted to teams that do not). Only other_teams can be asked for. pending_request_id is the team's pending request for the item, if any. Models come first, each kind sorted by subject. Failures: 400 name-invalid; 404 team-not-found; 409 access-not-requestable (an archived team); 500 server faults.

curl
curl "https://console.latam.ccsio.ai/identity/v1/organizations/{org}/teams/{team}/access" \
  -H "Authorization: Bearer $CCSIO_API_KEY"

Parameters

NameInDescription
X-Request-ID
optional
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
required
pathstring

The organization id (C7 identifier). A value outside the pattern is refused with 400 name-invalid.

team
required
pathstring

The team id (C7 identifier). A value outside the pattern is refused with 400 name-invalid.

Responses

  • 200

    The organization's models and MCP servers with the team's standing.

    Schema
    TeamAccess
    • organization_idstringrequired

      The organization (the path value).

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

    • team_idstringrequired

      The team (the path value).

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

    • itemsarray of TeamAccessItemrequired
      • kindstringrequired

        Allowed values: "model""mcp_server"

      • subjectstringrequired

        The model reference, or the MCP server's alias.

        pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

      • titlestring or nullrequired

        An MCP server's title; null for a model, whose reference is its name.

      • standingstringrequired

        every_team: nothing restricts it, so every team is served. this_team: it is restricted to teams and this is one of them. other_teams: it is restricted to teams and this is not one of them; the only standing that can be asked for.

        Allowed values: "every_team""this_team""other_teams"

      • pending_request_idstring or nullrequired

        The team's pending access request for this item; null when it has none.

        pattern ^[0-9A-HJKMNP-TV-Z]{26}$

  • 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:

    Read more

    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.

    Read more

    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.

    Read more

    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 requested resource or path was 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.

  • 409

    The request conflicts with the current state of the resource or with an invariant it protects (a taken name, a role still in use, an organization that must not be deleted, an archived team, the last active root, a seat or service account limit).

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    A dependency the operation needs is not configured on this plane or could not be reached, and nothing was changed. `error.code` names it; an operation lists the ones it can answer besides the boundary's. Retry later. Codes: support-audit-unavailable (the request boundary: an operator's read under an open support session could not be recorded, so nothing was served)

GET/identity/v1/organizations/{org}/teams/{team}/access-requests

List one team's access requests

Credential
API key
Permission
teams.update

Needs teams.update for the named team: its administrator, or an administrator of the organization. The team's requests, newest first; status narrows to one state. At most limit requests are returned (100 when it is left out, 200 at most); there is no cursor.

Read more

A team that does not exist has no requests: the list is empty, never a 404. decidable is true only for a pending request when the caller also holds the permission that gives its kind of access (team-entitlements.manage for a model, mcp.manage for an MCP server). Failures: 400 invalid-request (status outside the four states, or limit not a whole number between 1 and 200); 400 name-invalid; 500 server faults.

curl
curl "https://console.latam.ccsio.ai/identity/v1/organizations/{org}/teams/{team}/access-requests" \
  -H "Authorization: Bearer $CCSIO_API_KEY"

Parameters

NameInDescription
X-Request-ID
optional
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
required
pathstring

The organization id (C7 identifier). A value outside the pattern is refused with 400 name-invalid.

team
required
pathstring

The team id (C7 identifier). A value outside the pattern is refused with 400 name-invalid.

status
optional
querystring

Optional. Narrows the list to one state; any other value is refused with 400 invalid-request.

limit
optional
queryinteger

Optional. How many requests to return, newest first: 1 to 200, 100 when it is left out. A value that is not a whole number between 1 and 200 is refused with 400 invalid-request.

Responses

  • 200

    The team's requests.

    Schema
    ListAccessRequestsResponse
    • organization_idstringrequired

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

    • access_requestsarray of AccessRequestrequired
      • idstringrequired

        pattern ^[0-9A-HJKMNP-TV-Z]{26}$

      • organization_idstringrequired

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

      • team_idstringrequired

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

      • team_namestring or nullrequired

        The team's name when the request is read; null when the team is not known any more.

      • kindstringrequired

        Allowed values: "model""mcp_server"

      • subjectstringrequired

        The model reference or the MCP server's alias, as it was named when the request was made.

        pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

      • reasonstringrequired

        The requester's own words; empty when none were given.

        at most 500 characters

      • statusstringrequired

        pending until an administrator of the organization approves or rejects it, or the team's administrator cancels it; the other three states are final.

        Allowed values: "pending""approved""rejected""canceled"

      • requested_bystringrequired

        The requester's principal reference.

        pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

      • requester_emailstring or nullrequired

        Resolved when the request is read; null when the directory no longer knows the reference or it has no email.

      • requester_namestring or nullrequired

        Resolved when the request is read; null when the directory no longer knows the reference or it has no name.

      • requested_atstring (date-time)required

        RFC 3339, UTC; the time may carry fractional seconds.

      • decided_bystring or nullrequired

        Who approved, rejected or canceled it; null while it is pending.

        pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

      • decider_emailstring or nullrequired

        Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no email.

      • decider_namestring or nullrequired

        Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no name.

      • decided_atstring (date-time) or nullrequired

        When it was decided; null while it is pending.

      • decision_notestringrequired

        The decider's own words; empty when none were given.

        at most 500 characters

      • decidablebooleanrequired

        Whether the caller may approve or reject the request now: it is pending and the caller holds the permission that gives its kind of access. Always false in the answer of a create, an approval, a rejection and a cancellation.

  • 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:

    Read more

    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.

    Read more

    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.

    Read more

    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 requested resource or path was 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

    A dependency the operation needs is not configured on this plane or could not be reached, and nothing was changed. `error.code` names it; an operation lists the ones it can answer besides the boundary's. Retry later. Codes: support-audit-unavailable (the request boundary: an operator's read under an open support session could not be recorded, so nothing was served)

POST/identity/v1/organizations/{org}/teams/{team}/access-requests

Ask for a model or an MCP server for one team

Credential
API key
Permission
teams.update
Request body
Body up to 1 MiB

An access request is how a team asks for something its organization holds and has restricted to other teams: a model (the organization holds access to it and at least one team holds an entitlement of its own for it) or an MCP server (an installation restricted to teams).

Read more

Needs teams.update for the named team: its administrator, or an administrator of the organization. kind is model (subject: the model reference) or mcp_server (subject: the installation's alias). Only what the organization holds can be asked for, and only when the team does not already have it. The request is stored pending, with the caller as its requester, and asking gives nothing. Failures: 400 invalid-request (kind or subject missing, or an unknown member) / access-request-invalid (kind, subject or reason outside the contract); 400 name-invalid; 404 team-not-found; 409 access-not-requestable (the organization does not hold it, or the team is archived) / access-already-available (the team already has it) / access-request-pending (the team already has a pending request for it); 500 server faults.

curl
curl -X POST "https://console.latam.ccsio.ai/identity/v1/organizations/{org}/teams/{team}/access-requests" \
  -H "Authorization: Bearer $CCSIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "kind": "model",
  "subject": "string"
}'
Built from the schema’s required members: replace the values.

Parameters

NameInDescription
X-Request-ID
optional
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
required
pathstring

The organization id (C7 identifier). A value outside the pattern is refused with 400 name-invalid.

team
required
pathstring

The team id (C7 identifier). A value outside the pattern is refused with 400 name-invalid.

Request body application/json

CreateAccessRequest
  • kindstringrequired

    model (subject: the model reference) or mcp_server (subject: the installation's alias).

    Allowed values: "model""mcp_server"

  • subjectstringrequired

    The model reference (kind model) or the installation's alias (kind mcp_server).

    pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

  • reasonstringoptional

    Optional. Why the team needs it, in the requester's own words: at most 500 characters after trimming, no control character other than a line break or a tab (400 access-request-invalid otherwise).

    at most 500 characters

Responses

  • 200

    The pending request.

    Schema
    AccessRequest
    • idstringrequired

      pattern ^[0-9A-HJKMNP-TV-Z]{26}$

    • organization_idstringrequired

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

    • team_idstringrequired

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

    • team_namestring or nullrequired

      The team's name when the request is read; null when the team is not known any more.

    • kindstringrequired

      Allowed values: "model""mcp_server"

    • subjectstringrequired

      The model reference or the MCP server's alias, as it was named when the request was made.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • reasonstringrequired

      The requester's own words; empty when none were given.

      at most 500 characters

    • statusstringrequired

      pending until an administrator of the organization approves or rejects it, or the team's administrator cancels it; the other three states are final.

      Allowed values: "pending""approved""rejected""canceled"

    • requested_bystringrequired

      The requester's principal reference.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • requester_emailstring or nullrequired

      Resolved when the request is read; null when the directory no longer knows the reference or it has no email.

    • requester_namestring or nullrequired

      Resolved when the request is read; null when the directory no longer knows the reference or it has no name.

    • requested_atstring (date-time)required

      RFC 3339, UTC; the time may carry fractional seconds.

    • decided_bystring or nullrequired

      Who approved, rejected or canceled it; null while it is pending.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • decider_emailstring or nullrequired

      Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no email.

    • decider_namestring or nullrequired

      Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no name.

    • decided_atstring (date-time) or nullrequired

      When it was decided; null while it is pending.

    • decision_notestringrequired

      The decider's own words; empty when none were given.

      at most 500 characters

    • decidablebooleanrequired

      Whether the caller may approve or reject the request now: it is pending and the caller holds the permission that gives its kind of access. Always false in the answer of a create, an approval, a rejection and a cancellation.

  • 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:

    Read more

    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.

    Read more

    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.

    Read more

    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 requested resource or path was 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.

  • 409

    The request conflicts with the current state of the resource or with an invariant it protects (a taken name, a role still in use, an organization that must not be deleted, an archived team, the last active root, a seat or service account limit).

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    A dependency the operation needs is not configured on this plane or could not be reached, and nothing was changed. `error.code` names it; an operation lists the ones it can answer besides the boundary's. Retry later. Codes: support-audit-unavailable (the request boundary: an operator's read under an open support session could not be recorded, so nothing was served)

POST/identity/v1/organizations/{org}/teams/{team}/access-requests/{id}/cancel

Withdraw one team's pending request

Credential
API key
Permission
teams.update

Needs teams.update for the named team: its administrator, or an administrator of the organization. Ends a pending request of that team as canceled, with the caller as who ended it. Nothing else changes. Failures: 400 name-invalid; 404 access-request-not-found (an unknown request, an id that is not one, or a request of another team); 409 access-request-decided (it is not pending any more); 500 server faults.

curl
curl -X POST "https://console.latam.ccsio.ai/identity/v1/organizations/{org}/teams/{team}/access-requests/{id}/cancel" \
  -H "Authorization: Bearer $CCSIO_API_KEY"

Parameters

NameInDescription
X-Request-ID
optional
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
required
pathstring

The organization id (C7 identifier). A value outside the pattern is refused with 400 name-invalid.

team
required
pathstring

The team id (C7 identifier). A value outside the pattern is refused with 400 name-invalid.

id
required
pathstring

The access request's id (a ULID). A value that is not an id of this organization is answered as an unknown request (404 access-request-not-found), never as a malformed one.

Responses

  • 200

    The canceled request.

    Schema
    AccessRequest
    • idstringrequired

      pattern ^[0-9A-HJKMNP-TV-Z]{26}$

    • organization_idstringrequired

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

    • team_idstringrequired

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

    • team_namestring or nullrequired

      The team's name when the request is read; null when the team is not known any more.

    • kindstringrequired

      Allowed values: "model""mcp_server"

    • subjectstringrequired

      The model reference or the MCP server's alias, as it was named when the request was made.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • reasonstringrequired

      The requester's own words; empty when none were given.

      at most 500 characters

    • statusstringrequired

      pending until an administrator of the organization approves or rejects it, or the team's administrator cancels it; the other three states are final.

      Allowed values: "pending""approved""rejected""canceled"

    • requested_bystringrequired

      The requester's principal reference.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • requester_emailstring or nullrequired

      Resolved when the request is read; null when the directory no longer knows the reference or it has no email.

    • requester_namestring or nullrequired

      Resolved when the request is read; null when the directory no longer knows the reference or it has no name.

    • requested_atstring (date-time)required

      RFC 3339, UTC; the time may carry fractional seconds.

    • decided_bystring or nullrequired

      Who approved, rejected or canceled it; null while it is pending.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • decider_emailstring or nullrequired

      Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no email.

    • decider_namestring or nullrequired

      Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no name.

    • decided_atstring (date-time) or nullrequired

      When it was decided; null while it is pending.

    • decision_notestringrequired

      The decider's own words; empty when none were given.

      at most 500 characters

    • decidablebooleanrequired

      Whether the caller may approve or reject the request now: it is pending and the caller holds the permission that gives its kind of access. Always false in the answer of a create, an approval, a rejection and a cancellation.

  • 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:

    Read more

    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.

    Read more

    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.

    Read more

    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 requested resource or path was 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.

  • 409

    The request conflicts with the current state of the resource or with an invariant it protects (a taken name, a role still in use, an organization that must not be deleted, an archived team, the last active root, a seat or service account limit).

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    A dependency the operation needs is not configured on this plane or could not be reached, and nothing was changed. `error.code` names it; an operation lists the ones it can answer besides the boundary's. Retry later. Codes: support-audit-unavailable (the request boundary: an operator's read under an open support session could not be recorded, so nothing was served)

GET/identity/v1/organizations/{org}/access-requests

List the organization's access requests

Credential
API key
Permission
Any ofteam-entitlements.managemcp.manage

Needs team-entitlements.manage or mcp.manage for the organization: whoever can give either kind of access. The organization's requests, newest first; status narrows to one state.

Read more

At most limit requests are returned (100 when it is left out, 200 at most); there is no cursor. decidable says whether this caller may approve or reject the request: it is pending and the caller holds the permission that gives that kind of access (team-entitlements.manage for a model, mcp.manage for an MCP server). Failures: 400 invalid-request (status outside the four states, or limit not a whole number between 1 and 200); 400 name-invalid; 500 server faults.

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

Parameters

NameInDescription
X-Request-ID
optional
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
required
pathstring

The organization id (C7 identifier). A value outside the pattern is refused with 400 name-invalid.

status
optional
querystring

Optional. Narrows the list to one state; any other value is refused with 400 invalid-request.

limit
optional
queryinteger

Optional. How many requests to return, newest first: 1 to 200, 100 when it is left out. A value that is not a whole number between 1 and 200 is refused with 400 invalid-request.

Responses

  • 200

    The organization's requests.

    Schema
    ListAccessRequestsResponse
    • organization_idstringrequired

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

    • access_requestsarray of AccessRequestrequired
      • idstringrequired

        pattern ^[0-9A-HJKMNP-TV-Z]{26}$

      • organization_idstringrequired

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

      • team_idstringrequired

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

      • team_namestring or nullrequired

        The team's name when the request is read; null when the team is not known any more.

      • kindstringrequired

        Allowed values: "model""mcp_server"

      • subjectstringrequired

        The model reference or the MCP server's alias, as it was named when the request was made.

        pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

      • reasonstringrequired

        The requester's own words; empty when none were given.

        at most 500 characters

      • statusstringrequired

        pending until an administrator of the organization approves or rejects it, or the team's administrator cancels it; the other three states are final.

        Allowed values: "pending""approved""rejected""canceled"

      • requested_bystringrequired

        The requester's principal reference.

        pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

      • requester_emailstring or nullrequired

        Resolved when the request is read; null when the directory no longer knows the reference or it has no email.

      • requester_namestring or nullrequired

        Resolved when the request is read; null when the directory no longer knows the reference or it has no name.

      • requested_atstring (date-time)required

        RFC 3339, UTC; the time may carry fractional seconds.

      • decided_bystring or nullrequired

        Who approved, rejected or canceled it; null while it is pending.

        pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

      • decider_emailstring or nullrequired

        Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no email.

      • decider_namestring or nullrequired

        Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no name.

      • decided_atstring (date-time) or nullrequired

        When it was decided; null while it is pending.

      • decision_notestringrequired

        The decider's own words; empty when none were given.

        at most 500 characters

      • decidablebooleanrequired

        Whether the caller may approve or reject the request now: it is pending and the caller holds the permission that gives its kind of access. Always false in the answer of a create, an approval, a rejection and a cancellation.

  • 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:

    Read more

    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.

    Read more

    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.

    Read more

    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 requested resource or path was 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

    A dependency the operation needs is not configured on this plane or could not be reached, and nothing was changed. `error.code` names it; an operation lists the ones it can answer besides the boundary's. Retry later. Codes: support-audit-unavailable (the request boundary: an operator's read under an open support session could not be recorded, so nothing was served)

POST/identity/v1/organizations/{org}/access-requests/{id}/approve

Approve a pending request and give the team the access

Credential
API key
Permission
Any ofteam-entitlements.managemcp.manage
Request body
Body up to 1 MiB

Needs team-entitlements.manage or mcp.manage for the organization, and for the request at hand the one that gives its kind of access: team-entitlements.manage for a model, mcp.manage for an MCP server (403 access-request-forbidden otherwise).

Read more

Approving gives the access: a model becomes a team-scoped model_access entitlement of the team, and an MCP server gains the team in the teams it is restricted to. Giving never narrows anybody: when the item has meanwhile been opened to every team, or the team already has it, nothing is written and the request is still recorded as approved. The body is optional (nothing, {} or a note); note is the approver's own words. Failures: 400 invalid-request (an unknown member) / access-request-invalid (the note); 400 name-invalid; 404 access-request-not-found; 409 access-request-decided (it is not pending any more) / access-not-requestable (the organization no longer holds the item; the request stays pending, to be rejected); 500 server faults.

curl
curl -X POST "https://console.latam.ccsio.ai/identity/v1/organizations/{org}/access-requests/{id}/approve" \
  -H "Authorization: Bearer $CCSIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Built from the schema’s required members: replace the values.

Parameters

NameInDescription
X-Request-ID
optional
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
required
pathstring

The organization id (C7 identifier). A value outside the pattern is refused with 400 name-invalid.

id
required
pathstring

The access request's id (a ULID). A value that is not an id of this organization is answered as an unknown request (404 access-request-not-found), never as a malformed one.

Request body application/json

DecideAccessRequest
  • notestringoptional

    Optional. The decider's own words: at most 500 characters after trimming, no control character other than a line break or a tab (400 access-request-invalid otherwise).

    at most 500 characters

Responses

  • 200

    The approved request.

    Schema
    AccessRequest
    • idstringrequired

      pattern ^[0-9A-HJKMNP-TV-Z]{26}$

    • organization_idstringrequired

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

    • team_idstringrequired

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

    • team_namestring or nullrequired

      The team's name when the request is read; null when the team is not known any more.

    • kindstringrequired

      Allowed values: "model""mcp_server"

    • subjectstringrequired

      The model reference or the MCP server's alias, as it was named when the request was made.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • reasonstringrequired

      The requester's own words; empty when none were given.

      at most 500 characters

    • statusstringrequired

      pending until an administrator of the organization approves or rejects it, or the team's administrator cancels it; the other three states are final.

      Allowed values: "pending""approved""rejected""canceled"

    • requested_bystringrequired

      The requester's principal reference.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • requester_emailstring or nullrequired

      Resolved when the request is read; null when the directory no longer knows the reference or it has no email.

    • requester_namestring or nullrequired

      Resolved when the request is read; null when the directory no longer knows the reference or it has no name.

    • requested_atstring (date-time)required

      RFC 3339, UTC; the time may carry fractional seconds.

    • decided_bystring or nullrequired

      Who approved, rejected or canceled it; null while it is pending.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • decider_emailstring or nullrequired

      Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no email.

    • decider_namestring or nullrequired

      Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no name.

    • decided_atstring (date-time) or nullrequired

      When it was decided; null while it is pending.

    • decision_notestringrequired

      The decider's own words; empty when none were given.

      at most 500 characters

    • decidablebooleanrequired

      Whether the caller may approve or reject the request now: it is pending and the caller holds the permission that gives its kind of access. Always false in the answer of a create, an approval, a rejection and a cancellation.

  • 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:

    Read more

    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.

    Read more

    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.

    Read more

    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 requested resource or path was 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.

  • 409

    The request conflicts with the current state of the resource or with an invariant it protects (a taken name, a role still in use, an organization that must not be deleted, an archived team, the last active root, a seat or service account limit).

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    A dependency the operation needs is not configured on this plane or could not be reached, and nothing was changed. `error.code` names it; an operation lists the ones it can answer besides the boundary's. Retry later. Codes: support-audit-unavailable (the request boundary: an operator's read under an open support session could not be recorded, so nothing was served)

POST/identity/v1/organizations/{org}/access-requests/{id}/reject

Reject a pending request

Credential
API key
Permission
Any ofteam-entitlements.managemcp.manage
Request body
Body up to 1 MiB

Needs team-entitlements.manage or mcp.manage for the organization, and for the request at hand the one that gives its kind of access: team-entitlements.manage for a model, mcp.manage for an MCP server (403 access-request-forbidden otherwise). Records the refusal and who decided; nothing else changes.

Read more

The body is optional (nothing, {} or a note); note is the reason given to the team. Failures: 400 invalid-request (an unknown member) / access-request-invalid (the note); 400 name-invalid; 404 access-request-not-found; 409 access-request-decided (it is not pending any more); 500 server faults.

curl
curl -X POST "https://console.latam.ccsio.ai/identity/v1/organizations/{org}/access-requests/{id}/reject" \
  -H "Authorization: Bearer $CCSIO_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{}'
Built from the schema’s required members: replace the values.

Parameters

NameInDescription
X-Request-ID
optional
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
required
pathstring

The organization id (C7 identifier). A value outside the pattern is refused with 400 name-invalid.

id
required
pathstring

The access request's id (a ULID). A value that is not an id of this organization is answered as an unknown request (404 access-request-not-found), never as a malformed one.

Request body application/json

DecideAccessRequest
  • notestringoptional

    Optional. The decider's own words: at most 500 characters after trimming, no control character other than a line break or a tab (400 access-request-invalid otherwise).

    at most 500 characters

Responses

  • 200

    The rejected request.

    Schema
    AccessRequest
    • idstringrequired

      pattern ^[0-9A-HJKMNP-TV-Z]{26}$

    • organization_idstringrequired

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

    • team_idstringrequired

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

    • team_namestring or nullrequired

      The team's name when the request is read; null when the team is not known any more.

    • kindstringrequired

      Allowed values: "model""mcp_server"

    • subjectstringrequired

      The model reference or the MCP server's alias, as it was named when the request was made.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • reasonstringrequired

      The requester's own words; empty when none were given.

      at most 500 characters

    • statusstringrequired

      pending until an administrator of the organization approves or rejects it, or the team's administrator cancels it; the other three states are final.

      Allowed values: "pending""approved""rejected""canceled"

    • requested_bystringrequired

      The requester's principal reference.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • requester_emailstring or nullrequired

      Resolved when the request is read; null when the directory no longer knows the reference or it has no email.

    • requester_namestring or nullrequired

      Resolved when the request is read; null when the directory no longer knows the reference or it has no name.

    • requested_atstring (date-time)required

      RFC 3339, UTC; the time may carry fractional seconds.

    • decided_bystring or nullrequired

      Who approved, rejected or canceled it; null while it is pending.

      pattern ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$

    • decider_emailstring or nullrequired

      Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no email.

    • decider_namestring or nullrequired

      Resolved when the request is read; null while pending, or when the directory no longer knows the reference or it has no name.

    • decided_atstring (date-time) or nullrequired

      When it was decided; null while it is pending.

    • decision_notestringrequired

      The decider's own words; empty when none were given.

      at most 500 characters

    • decidablebooleanrequired

      Whether the caller may approve or reject the request now: it is pending and the caller holds the permission that gives its kind of access. Always false in the answer of a create, an approval, a rejection and a cancellation.

  • 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:

    Read more

    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.

    Read more

    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.

    Read more

    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 requested resource or path was 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.

  • 409

    The request conflicts with the current state of the resource or with an invariant it protects (a taken name, a role still in use, an organization that must not be deleted, an archived team, the last active root, a seat or service account limit).

  • 500

    Platform failure, rendered without internal cause details.

  • 503

    A dependency the operation needs is not configured on this plane or could not be reached, and nothing was changed. `error.code` names it; an operation lists the ones it can answer besides the boundary's. Retry later. Codes: support-audit-unavailable (the request boundary: an operator's read under an open support session could not be recorded, so nothing was served)

Generated from the platform contracts at commit 5f833620.

Explore the platform

Get your first API key

Registration is open. Four steps to your first call: create your account, create your organization, create your API key, and start using it.

  1. 01Create your account
  2. 02Create your organization
  3. 03Create your API key
  4. 04Start using it