Not offered over MCP, by design
These actions are deliberately not tools, so an agent holding one key can never mint, widen or hand out access. Each entry says who can do it and how.Add someone to a team
Who can do this: A caller holding members:write on that team.POST /v1/orgs/current/teams/{team_id}/members
- Auth: User session JWT only; responds 201
- Permission:
members:write, team-scoped - Body
user_id: an existing member of the organization - Body
role: admin, member or viewer; defaults to member
- The user must already be an organization member, or the call is refused.
- An org owner or admin already has implicit team admin access, so adding one is a 409.
- Adding someone who is already an explicit team member is a 409.
Create an admin key
Who can do this: An organization member holding the keys:write permission, signed in with a user session (a mak_ admin key cannot mint another).POST /v1/admin-keys
- Auth: User session JWT only; responds 201
- Permission:
keys:write - Body
name: string - Body
permissions: list, at least one; only these seven are grantable - keys:read, keys:write, org:read, alerts:read, alerts:write, limits:read, limits:write - and only ones the caller already holds, at a scope the caller already holds - Body
scope: self, team or org - Body
team_id: required when scope is team, forbidden otherwise - Body
expires_at: required, no default; must include a UTC offset and be at most 90 days from now
- The plaintext mak_ key is returned once, in the creation response.
- A banned user is refused even with a valid session.
- Rotation is not revocation: during the grace window both the old and the new key work.
Create an alert channel
Who can do this: An organization member holding alerts:write.POST /alerts/channels
- Auth: User session JWT or a mak_ admin key; responds 201
- Permission:
alerts:write - Body
channel_type: required; email, slack or webhook - Body
destination: required; the address or URL to deliver to - Body
is_enabled: default true
- A webhook channel is minted a signing secret and the plaintext comes back once as signing_secret; no later read returns it, because only the Secret Manager reference is kept.
- A webhook destination is resolved and checked at registration, so a host pointing at a private or reserved address is a 422.
- Outbound webhooks must be enabled for the deployment, or a webhook channel is refused.
Create an inference API key
Who can do this: An organization member holding keys:write.POST /v1/keys
- Auth: User session JWT or a mak_ admin key; responds 201
- Permission:
keys:write - Body
label: optional name - Body
org_id: optional; the org to create the key in - Body
team_id: optional
- The plaintext rsk_ key is returned once.
- A banned account is refused.
Create a custom organization role
Who can do this: An organization owner or admin who may manage roles.POST /v1/orgs/current/roles
- Auth: User session JWT only; responds 201
- Permission:
org:read, plus the right to manage roles - Body
name: required - Body
slug: optional; derived from name when omitted - Body
scope: self, team or org - Body
permissions: required list of organization permissions
- A role may not grant a permission, or a scope, the caller does not already hold.
- An empty permissions list is refused rather than stored: it would read as authority and confer none.
- A slug already used in the organization is refused.
Invite someone to the organization
Who can do this: An organization member holding members:write at organization scope.POST /v1/orgs/current/members
- Auth: User session JWT only; responds 201
- Permission:
members:write - Body
email: required - Body
role: admin, member or viewer; defaults to member - owner cannot be invited or assigned, use POST /v1/orgs/current/transfer-ownership - Body
team_id: optional team to place them in - Body
custom_role_ids: optional list of custom role ids, at most 100
- This creates a pending invitation and mails a magic link; the invitee joins through POST /v1/invitations/accept.
- An email that already belongs to a member is a 409.
- custom_role_ids adds permissions on top of role; it never replaces it.
Register AWS Bedrock credentials
Who can do this: A signed-in member of the organization, acting on their own account’s credentials.POST /v1/provider-keys/aws
- Auth: User session JWT only; responds 201
- Body
credential_type: required; bedrock_api_key or iam_credentials, and it picks the fields below - Body
api_key: bedrock_api_key mode only - Body
access_key_id: iam_credentials mode only - Body
secret_access_key: iam_credentials mode only - Body
region: required AWS region - Body
team_id: required - Body
label: optional - Body
allow_fallback: default true - Body
allowed_models: optional list of model ids or brand/* entries
- The credentials are validated against AWS before anything is stored; an invalid pair is a 422 and leaves no row and no secret.
- A Bedrock API key is permanently tied to the region it was created in.
- allow_fallback: false stops a failing key falling back to Mesh’s own credentials.
- Validation probes are rate-limited per account.
- The row is created inactive; activate it with PATCH /v1/provider-keys/{pk_id} and
{"is_active": true}, or routing will not use it.
Register Azure AI Foundry credentials
Who can do this: A signed-in member of the organization, acting on their own account’s credentials.POST /v1/provider-keys/azure-foundry
- Auth: User session JWT only; responds 201
- Body
api_key: required; the project’s primary or secondary key - Body
endpoint: required; the full project endpoint URL, normalised on the way in - Body
team_id: required - Body
label: optional - Body
allow_fallback: default true - Body
allowed_models: optional list of model ids or brand/* entries
- Both values are validated against Azure before anything is stored.
- azure_foundry is the live provider; the older azure slug is retired and cannot be registered.
- The row is created inactive; activate it with PATCH /v1/provider-keys/{pk_id} and
{"is_active": true}, or routing will not use it.
Register a single-string provider key
Who can do this: An organization member holding provider_keys:write.POST /v1/provider-keys/{provider}
- Auth: User session JWT only; responds 201
- Permission:
provider_keys:write - Body
api_key: required - Body
team_id: required - Body
label: optional - Body
allow_fallback: default true - Body
allowed_models: optional list of model ids or brand/* entries
- The provider must support key-based BYOK; GET /v1/provider-keys/supported lists them and anything else is a 404.
- Order is catalogue check, probe, store, insert, so a key that cannot be routed or does not work leaves behind neither a secret nor a row.
- The row is created inactive; activate it with PATCH /v1/provider-keys/{pk_id} and
{"is_active": true}, or routing will not use it.
Register an OpenAI key
Who can do this: A signed-in member of the organization, acting on their own account’s credentials.POST /v1/provider-keys/openai
- Auth: User session JWT only; responds 201
- Body
api_key: required - Body
team_id: required - Body
label: optional - Body
allow_fallback: default true - Body
allowed_models: optional list of model ids or brand/* entries
- The key is validated against OpenAI before it is stored; an invalid one is a 422.
- Validation probes are rate-limited per account.
- The row is created inactive; activate it with PATCH /v1/provider-keys/{pk_id} and
{"is_active": true}, or routing will not use it.
Register a provider key by Secret Manager reference
Who can do this: A signed-in user, for their own account: owner may only name the caller.POST /v1/provider-keys/
- Auth: User session JWT only; responds 201
- Body
provider: provider slug, default openrouter - Body
secret_ref: required; a Secret Manager version resource name whose secret id starts with routerv-byok-<owner>- - Body
label: optional - Body
org_id: optional - Body
team_id: optional - Body
allowed_models: optional list of model ids or brand/* entries
- An UPSERT: posting again for a provider you already hold repoints that key instead of creating a second one, and is audited as provider_key.updated.
- A raw credential is refused with a 422 whenever a GCP project is configured; use the per-provider routes below to register one by value.
Register a Vertex AI service account
Who can do this: A signed-in member of the organization, acting on their own account’s credentials.POST /v1/provider-keys/vertex
- Auth: User session JWT only; responds 201
- Body
project_id: required - Body
private_key_id: required - Body
private_key: required - Body
client_email: required - Body
client_id: required - Body
client_x509_cert_url: required - Body
token_uri: defaults to https://oauth2.googleapis.com/token and is validated - Body
region: optional; omit or send global for the adapter default - Body
team_id: optional - Body
org_id: optional - Body
label: optional - Body
allow_fallback: default true - Body
allowed_models: optional list of model ids or brand/* entries
- The service account needs roles/aiplatform.user and aiplatform.endpoints.predict.
- It is validated against Vertex AI before anything is stored; an invalid account is a 422.
- token_uri is checked against an allowed host, so an arbitrary one is refused.
- The row is created inactive; activate it with PATCH /v1/provider-keys/{pk_id} and
{"is_active": true}, or routing will not use it.
Register an SSO identity provider
Who can do this: A signed-in organization owner or admin holding org:write at organization scope.POST /v1/orgs/current/sso
- Auth: User session JWT only; responds 201
- Permission:
org:write, and the org role owner or admin - Body
issuer: required; the IdP’s OIDC issuer URL - Body
client_id: required - Body
client_secret: required; stored in Secret Manager and never returned - Body
domain: required; the email domain this provider signs in
- This registers a new way to sign in to the organization, so it is a credential, not a setting.
- org:write alone is not enough: an organization API key holds it with no role, and the route needs the owner or admin role.
- It needs the Enterprise SSO entitlement, and serves no sign-in until the domain is verified.
Rotate an admin key
Who can do this: An organization member holding keys:write, who could create the same key today.POST /v1/admin-keys/{key_id}/rotate
- Auth: User session JWT only; responds 201
- Permission:
keys:write - Body
grace_hours: optional; defaults to 24, clamped to 168 - Body
expires_at: optional; UTC offset, at most 90 days out; omit to inherit the old key’s lifetime
- The successor’s plaintext is returned once.
- Rotation is not revocation: the old key keeps working until the grace window ends.
Rotate an alert channel’s signing secret
Who can do this: An organization member holding alerts:write.POST /alerts/channels/{channel_id}/rotate-secret
- Auth: User session JWT or a mak_ admin key
- Permission:
alerts:write
- The new signing secret is returned once; only its Secret Manager reference is stored.
- Rotation is not revocation: the previous secret keeps verifying for WEBHOOK_SECRET_GRACE_HOURS so the receiver can cut over.
- Only a webhook channel has a signing secret; any other type is a 422.
Replace a member’s custom roles
Who can do this: An organization owner or admin who may manage roles.PUT /v1/orgs/current/members/{target_user_id}/roles
- Auth: User session JWT only
- Permission:
members:read, plus the right to manage roles - Body
role_ids: the complete set the member should hold, at most 100
- SET semantics: an empty list clears every assignment.
- A role the caller could not grant themselves is refused.
- Assignments key on the membership row, so a member who was removed and re-invited starts from none.
Set up auto-recharge
Who can do this: Any signed-in user, for their own account.POST /v1/auto-recharge/setup
- Auth: User session JWT only; responds 201
- Body
recharge_amount_usd: default 10.00; bounded by the configured minimum and maximum - Body
threshold_usd: default 10.00; must not exceed the configured maximum - Body
return_url: required
- This creates a Cashfree ON_DEMAND mandate for a human to authorise; the mandate is not active until the AUTH webhook arrives.
- A suspended account is refused with 403 payments_unavailable.
- With TURNSTILE_ENFORCED on it needs an x-captcha-response token, and with BILLING_PROFILE_REQUIRED_FOR_PAYMENT on it answers 409 billing_profile_required.
- Charges on a mandate already authorised are not gated by this route.
Start a Cashfree checkout for credits
Who can do this: Any signed-in user, paying for their own account.POST /v1/checkout/cashfree/create-custom-payment
- Auth: User session JWT only
- Body
amount: required; INR before GST, must be positive - Body
country: optional; an attested country from the load balancer wins - Body
gstin: optional - Body
couponCode: optional - Body
gatewayFeePct: optional; the rate the page displayed, refused if it has changed
- Returns a payment-session id for cashfree-js to open; nothing is charged by this call.
- The FX rate is pinned on the pending row, so the credit is the amount the customer was quoted; no rate at all is a 503.
- A suspended account is refused with 403 payments_unavailable.
- With TURNSTILE_ENFORCED on it needs an x-captcha-response token, and with BILLING_PROFILE_REQUIRED_FOR_PAYMENT on it answers 409 billing_profile_required until the org has a billing profile.
Start a Stripe checkout for credits
Who can do this: Any signed-in user, paying for their own account.POST /v1/checkout/stripe/create-custom-payment
- Auth: User session JWT only
- Body
amount: required; USD cents, must be positive - Body
currency: must be usd - Body
country: optional; an attested country from the load balancer wins - Body
gstin: optional - Body
couponCode: optional - Body
description: optional - Body
gatewayFeePct: optional; the rate the page displayed, refused if it has changed
- Returns a hosted-checkout URL for a human to complete; nothing is charged by this call.
- A fully-covering coupon credits the balance directly and returns free: true with no gateway redirect.
- A suspended account is refused with 403 payments_unavailable.
- With TURNSTILE_ENFORCED on it needs an x-captcha-response token, and with BILLING_PROFILE_REQUIRED_FOR_PAYMENT on it answers 409 billing_profile_required until the org has a billing profile.
Test AWS Bedrock credentials without saving them
Who can do this: A signed-in member of the organization, acting on their own account’s credentials.POST /v1/provider-keys/test/aws
- Auth: User session JWT only; responds 200 with
{"status": "ok"} - Body
credential_type: bedrock_api_key or iam_credentials - Body
api_key: bedrock_api_key mode only - Body
access_key_id: iam_credentials mode only - Body
secret_access_key: iam_credentials mode only - Body
region: required AWS region - Body
team_id: required by the shared schema, unused here
- The credential travels in the request body and is not stored; invalid credentials are a 422.
- Probes are rate-limited per account, shared with registration.
- To check a key you already registered, POST /v1/provider-keys/test/{pk_id}/aws instead, which sends no credential.
Test Azure AI Foundry credentials without saving them
Who can do this: A signed-in member of the organization, acting on their own account’s credentials.POST /v1/provider-keys/test/azure-foundry
- Auth: User session JWT only; responds 200 with
{"status": "ok"} - Body
api_key: required - Body
endpoint: required; the full project endpoint URL
- Both values travel in the request body and are not stored; there is no team_id on this shape.
- To check a pair you already registered, POST /v1/provider-keys/test/{pk_id}/azure-foundry instead.
Test an OpenAI key without saving it
Who can do this: A signed-in member of the organization, acting on their own account’s credentials.POST /v1/provider-keys/test/openai
- Auth: User session JWT only; responds 200 with
{"status": "ok"} - Body
api_key: required - Body
team_id: required by the shared schema, unused here
- The key travels in the request body and is not stored.
- To check one you already registered, POST /v1/provider-keys/test/{pk_id}/openai instead.
Test a Vertex AI service account without saving it
Who can do this: A signed-in member of the organization, acting on their own account’s credentials.POST /v1/provider-keys/test/vertex
- Auth: User session JWT only; responds 200 with
{"status": "ok"} - Body
project_id: required - Body
private_key: required, with the other service-account fields - Body
client_email: required - Body
region: optional
- The service account travels in the request body and is not stored.
- An account that is valid but lacks the Vertex AI permissions is a 422 too.
- To check one you already registered, POST /v1/provider-keys/test/{pk_id}/vertex instead.
Transfer organization ownership
Who can do this: The current organization owner, and nobody else.POST /v1/orgs/current/transfer-ownership
- Auth: User session JWT only
- Body
user_id: the auth user id of an existing member
- The caller is demoted to admin and the target promoted to owner, atomically.
- The target must already be a member, or the call is a 404.
- A member whose account is banned cannot be made owner.
Repoint or disable an alert channel
Who can do this: An organization member holding alerts:write.PATCH /alerts/channels/{channel_id}
- Auth: User session JWT or a mak_ admin key
- Permission:
alerts:write - Body
destination: the new address or URL - Body
is_enabled: optional
- Repointing a webhook channel sends the organization’s signed deliveries to the new URL under the signing secret already in force, which this route neither rotates nor returns.
- Changing an email destination clears verified_at and kills any live verification token: consent is to an address, not to the row.
- channel_type cannot be changed here, and the new destination is validated like the original.
Change an inference API key’s reach
Who can do this: An organization member holding keys:write; an admin or owner for any key in the org, a member only for their own.PATCH /v1/keys/{key_id}
- Auth: User session JWT or a mak_ admin key
- Permission:
keys:write - Body
allowed_models: replaces the allowlist, which is what the key may reach - Body
blocked_models: applied after allowed_models, deny wins - Body
spend_cap_usd: raises or lowers the cap - Body
rpm: requests per minute - Body
rpd: requests per day - Body
tpm: tokens per minute - Body
model_limits: per-model overrides - Body
max_concurrent_sessions: at least 1, or null to fall back to the system default - Body
status: active or suspended - Body
routing_policy: inline retry and fallback policy, or null to clear it - Body
routing_policy_template_id: attach a template; sending both it and an inline policy is a 422 - Body
api_version: dated version pin, or null to inherit the baseline - Body
pii_policy: inline PII redaction policy, or null to fall through to the org default - Body
body_log_policy: inline body-log policy, or null to fall through to the org default - Body
fixed_provider: hard provider pin, or null to clear it - Body
allowed_ips: IP allowlist; null or an empty list lifts it - Body
strict_params: the key’s strict-params default - Body
label: optional - Body
default_model: optional
- This widens as well as narrows: allowed_models, spend_cap_usd and the rate limits all change what an existing credential may do.
- Setting an inline routing_policy detaches any template, and attaching a template clears any inline policy.
- allowed_ips of null or [] lifts the allowlist rather than refusing every address.
Change the auto-recharge amount or threshold
Who can do this: Any signed-in user, for their own account.PATCH /v1/auto-recharge
- Auth: User session JWT only
- Body
recharge_amount_usd: bounded by the configured minimum and maximum - Body
threshold_usd: must not exceed the configured maximum - Body
is_active: turns the mandate’s charging on or off
- It changes how much money moves automatically: the amount can be raised to the configured maximum, and is_active turns charging back on, without a further authorisation step.
- It needs a mandate that is not cancelled; otherwise it is a 404 pointing at POST /v1/auto-recharge/setup.
- DELETE /v1/auto-recharge cancels the mandate outright.
Rotate AWS Bedrock credentials
Who can do this: A signed-in member of the organization, acting on their own account’s credentials.PATCH /v1/provider-keys/aws/{pk_id}
- Auth: User session JWT only
- Body
api_key: rotates a bedrock_api_key credential - Body
access_key_id: with secret_access_key, rotates an iam_credentials one - Body
secret_access_key: sent together with access_key_id - Body
region: optional; validated before it is stored - Body
label: optional - Body
allow_fallback: optional - Body
allowed_models: optional list of model ids or brand/* entries
- Omit the credential fields to change metadata only; the stored secret is left alone.
- A rotation is validated against AWS before it replaces the stored credential.
- The key must already be a Bedrock key, or the call is a 422.
Rotate Azure AI Foundry credentials
Who can do this: An organization member holding provider_keys:write.PATCH /v1/provider-keys/azure-foundry/{pk_id}
- Auth: User session JWT only
- Permission:
provider_keys:write - Body
api_key: rotates the credential - Body
endpoint: changes the target project - Body
label: optional - Body
allow_fallback: optional - Body
allowed_models: optional list of model ids or brand/* entries
- api_key and endpoint are validated together before either is applied.
- label and allow_fallback update on their own, without a credential check.
Rotate a single-string provider key
Who can do this: An organization member holding provider_keys:write.PATCH /v1/provider-keys/generic/{pk_id}
- Auth: User session JWT only
- Permission:
provider_keys:write - Body
api_key: the new key; omit to change metadata only - Body
label: optional - Body
allow_fallback: optional - Body
allowed_models: optional list of model ids or brand/* entries
- This route serves only keys registered through POST /v1/provider-keys/{provider}; anything else is a 422.
Update or repoint a provider key
Who can do this: A signed-in member of the organization, acting on their own account’s credentials.PATCH /v1/provider-keys/{pk_id}
- Auth: User session JWT only
- Body
secret_ref: a new Secret Manager version resource name; this is how the credential is rotated - Body
label: optional - Body
is_active: optional - Body
allow_fallback: optional - Body
allowed_models: optional list of model ids or brand/* entries
- secret_ref is bound to the KEY’s owner, not the caller, so an org admin rotating a member’s key must use that member’s namespace.
- The cached secret is evicted at once when secret_ref changes; keeping the path and publishing a new secret version waits for the TTL.
- Activating a key deactivates every other key of the same owner for that provider, so
{"is_active": true}is a switch between them, not an addition.
Rotate an OpenAI key
Who can do this: An organization member holding provider_keys:write.PATCH /v1/provider-keys/openai/{pk_id}
- Auth: User session JWT only
- Permission:
provider_keys:write - Body
api_key: the new key; omit to change metadata only - Body
label: optional - Body
allow_fallback: optional - Body
allowed_models: optional list of model ids or brand/* entries
- The key must already be an OpenAI BYOK key, or the call is a 422.
Rotate a Vertex AI service account
Who can do this: An organization member holding provider_keys:write.PATCH /v1/provider-keys/vertex/{pk_id}
- Auth: User session JWT only
- Permission:
provider_keys:write - Body
private_key: rotates the credential; send any other service-account field you want changed with it - Body
region: optional - Body
label: optional - Body
allow_fallback: optional - Body
allowed_models: optional list of model ids or brand/* entries
- private_key alone starts a rotation: every other service-account field you omit falls back to the value already stored.
- Without private_key only label, region, allow_fallback and allowed_models are applied; the other service-account fields are ignored.
Change a member’s role or limits
Who can do this: An organization member holding members:write at organization scope.PATCH /v1/orgs/current/members/{target_user_id}
- Auth: User session JWT only
- Permission:
members:write - Body
role: admin, member or viewer; defaults to member - owner cannot be invited or assigned, use POST /v1/orgs/current/transfer-ownership - Body
member_rpm_limit: optional - Body
member_rpd_limit: optional - Body
member_tpm_limit: optional - Body
member_spend_cap: optional - Body
allowed_models: optional list of model ids or brand/* entries - Body
blocked_models: optional; deny wins
- The role field is the built-in one; custom roles are set with PUT /v1/orgs/current/members/{target_user_id}/roles.
- The owner’s own row accepts a model-policy edit only; anything touching role or limits is a 403.
Change a custom organization role
Who can do this: An organization owner or admin who may manage roles.PATCH /v1/orgs/current/roles/{role_id}
- Auth: User session JWT only
- Permission:
org:read, plus the right to manage roles - Body
name: optional - Body
scope: self, team or org - Body
permissions: REPLACES the whole set; omit to leave it alone
- Everyone holding the role gains whatever this adds, so it widens live access.
- The reach guard runs on the RESULTING set and scope, not the delta, so a modest role cannot be created and then widened past what the caller holds.
- slug is deliberately not updatable: clients refer to the role by it.
Change a team member’s role or limits
Who can do this: A caller holding members:write on that team.PATCH /v1/orgs/current/teams/{team_id}/members/{target_user_id}
- Auth: User session JWT only
- Permission:
members:write, team-scoped - Body
role: admin, member or viewer - Body
member_rpm_limit: optional - Body
member_rpd_limit: optional - Body
member_tpm_limit: optional - Body
member_spend_cap: optional
- Promoting to the team’s admin role widens what that person may do inside the team.
- This is the team role, which is separate from the organization role on PATCH /v1/orgs/current/members/{target_user_id}.
Not possible over MCP
MCP is a request-and-response protocol and these surfaces are streams. Use the REST or WebSocket API directly.Live full-duplex session
Who can do this: Any caller with an rsk_ key carrying the realtime:write scope.WSS /v1/live?model=<model-id>
- Auth: Sec-WebSocket-Protocol: openai-realtime, Bearer rsk_YOUR_KEY; fallback ?api_key=rsk_YOUR_KEY
- Permission:
realtime:write
- Errors arrive as a JSON text frame with
"type": "error"before the close.
Realtime speech-to-speech session
Who can do this: Any caller with an rsk_ key carrying the realtime:write scope.WSS /v1/realtime?model=<model-id>
- Auth: Sec-WebSocket-Protocol: openai-realtime, Bearer rsk_YOUR_KEY; fallback ?api_key=rsk_YOUR_KEY
- Permission:
realtime:write
- Errors arrive as a JSON text frame with
"type": "error"before the close. - The close code is deliberately generic (1000 even for an auth failure): read error.code, not the close code.
Streaming speech-to-text over WebSocket
Who can do this: Any caller with an rsk_ key carrying the realtime:write scope.WSS /v1/audio/transcriptions/realtime?model=<model-id>
- Auth: Sec-WebSocket-Protocol: Bearer rsk_YOUR_KEY, or ?api_key=rsk_YOUR_KEY
- Permission:
realtime:write
- Errors arrive as a JSON text frame with
"message_type": "error", then a normal close (1000).
Streaming text-to-speech over WebSocket
Who can do this: Any caller with an rsk_ key carrying the realtime:write scope.WSS /v1/audio/speech/stream/{voice_id}?model_id=<model-id>
- Auth: Sec-WebSocket-Protocol: Bearer rsk_YOUR_KEY, or ?api_key=rsk_YOUR_KEY
- Permission:
realtime:write
- Auth and scope failures arrive as a JSON text frame with
"type": "error", then a normal close (1000).
Token streaming for chat and responses
Who can do this: Any caller with an rsk_ key.POST /v1/chat/completions
- Auth: Authorization: Bearer rsk_YOUR_KEY
- Body
stream: true
- POST /v1/responses takes the same stream flag.
Not available as tools yet
These work today through the REST API. They are not MCP tools yet.Customer API surface not yet exposed as tools
Who can do this: Any holder of an rsk_ key with the matching scope. Worth knowing:- Covers audio TTS and STT, video, batches, memories, playground, usage, providers, errors, model detail, file delete and embed, /v1/messages, responses retrieve, template versions and catalog, and GET /v1/api-versions.
- There is no MCP tool for these yet; call the REST API directly with an rsk_ key, which works today.
- These are planned as tools; until they ship, the REST API is the way to do them.
Management plane not yet exposed as tools
Who can do this: An organization member with the relevant permission, using a mak_ admin key or a user session. Three exceptions: /v1/admin-keys is user-session only, because a mak_ bearer fails JWT verification and is refused before any handler runs; /v1/audit-logs takes a dashboard session or an rsk_ key, never a mak_ one; and GET /alerts/verify-email is authorised by the one-time token in the link it is reached from, not by a credential of yours. Worth knowing:- Covers key listing, updates and deletion under /v1/keys (not its POST), listing, reading and revoking mak_ keys under /v1/admin-keys, /alerts, /v1/webhooks/deliveries, /v1/routing-policy-templates and /v1/audit-logs.
- There is no MCP tool for these yet; call the REST API directly with a mak_ admin key or a user session JWT, which works today.
- These are planned as tools; until they ship, the REST API is the way to do them.
User and organization plane not yet exposed as tools
Who can do this: A signed-in user, with the role the action needs in their organization. Worth knowing:- Covers /v1/orgs, /v1/provider-keys, billing and checkout, auto-recharge, invitations, settings and the rest of the user session surface.
- There is no MCP tool for these yet; call the REST API directly with a user session JWT, which works today.
- These are planned as tools; until they ship, the REST API is the way to do them.