Cactal Secrets API
Manage a website's write-only secrets, which its server functions read from `env`. Values can be set and deleted but are never returned.
Manage a website's write-only secrets, which its server functions read from `env`. Values can be set and deleted but are never returned.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/cactal-ai:cactal-ai-secrets-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Cactal Ai Secrets API
version: 1.0.0
description: 'Operations tagged Secrets across 2 of this provider''s published API definitions: openapi.json, cactal-ai-openapi.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.cactal.ai/v1
security:
- apiKey: []
tags:
- name: Secrets
description: Manage a website's write-only secrets, which its server functions read from `env`. Values can be set and deleted but are never returned.
paths:
/websites/{websiteId}/secrets:
get:
operationId: websiteSecrets.list
summary: List secrets
description: Returns the names of a website's secrets with when each was created and last changed. Values are write-only and never returned. Server functions read secrets from `env` by name.
tags:
- Secrets
parameters:
- name: websiteId
in: path
required: true
schema:
type: string
minLength: 1
responses:
'200':
description: Secret names and timestamps.
content:
application/json:
schema:
type: object
properties:
items:
type: array
items:
type: object
properties:
name:
type: string
createdAt:
type: string
updatedAt:
type: string
required:
- name
- createdAt
- updatedAt
additionalProperties: false
manageUrl:
type: string
description: The website's settings, where a person adds or replaces secret values.
required:
- items
- manageUrl
additionalProperties: false
'400':
description: Validation failed. The response `message` names the first invalid field.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'401':
description: Missing, invalid, expired, or revoked API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'403':
description: The authenticated principal lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'404':
description: The resource does not exist or is outside the principal’s access scope.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'429':
description: Rate limit exceeded. Retry after the number of seconds in the `Retry-After` header.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
x-cactal-required-capability: websiteSecrets.manage
x-cactal-read-only: true
x-cactal-destructive: false
x-cactal-idempotent: true
servers:
- url: https://api.cactal.ai/v1
/websites/{websiteId}/secrets/{name}:
put:
operationId: websiteSecrets.set
summary: Set a secret
description: Creates or replaces the secret with this name. Names start with a letter or underscore and contain only letters, digits, and underscores. Values are up to 16,384 characters; they are stored encrypted, redacted from function output when 8 or more characters, and never returned. At most 100 secrets per website.
tags:
- Secrets
parameters:
- name: websiteId
in: path
required: true
schema:
type: string
minLength: 1
- name: name
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z_][A-Za-z0-9_]{0,127}$
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
value:
type: string
minLength: 1
maxLength: 16384
description: The secret value. It is stored encrypted and never returned.
required:
- value
responses:
'200':
description: The secret name and timestamps.
content:
application/json:
schema:
type: object
properties:
name:
type: string
createdAt:
type: string
updatedAt:
type: string
required:
- name
- createdAt
- updatedAt
additionalProperties: false
'400':
description: Validation failed. The response `message` names the first invalid field.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'401':
description: Missing, invalid, expired, or revoked API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'403':
description: The authenticated principal lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'404':
description: The resource does not exist or is outside the principal’s access scope.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'429':
description: Rate limit exceeded. Retry after the number of seconds in the `Retry-After` header.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
delete:
operationId: websiteSecrets.delete
summary: Delete a secret
description: Permanently deletes the secret with this name. `removed` is false when no such secret existed.
tags:
- Secrets
parameters:
- name: websiteId
in: path
required: true
schema:
type: string
minLength: 1
- name: name
in: path
required: true
schema:
type: string
pattern: ^[A-Za-z_][A-Za-z0-9_]{0,127}$
responses:
'200':
description: Whether a secret was removed.
content:
application/json:
schema:
type: object
properties:
removed:
type: boolean
required:
- removed
additionalProperties: false
'400':
description: Validation failed. The response `message` names the first invalid field.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'401':
description: Missing, invalid, expired, or revoked API key.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'403':
description: The authenticated principal lacks the required capability.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'404':
description: The resource does not exist or is outside the principal’s access scope.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
'429':
description: Rate limit exceeded. Retry after the number of seconds in the `Retry-After` header.
content:
application/json:
schema:
$ref: '#/components/schemas/ServiceError'
servers:
- url: https://api.cactal.ai/v1
components:
schemas:
ServiceError:
type: object
required:
- kind
- message
description: Canonical error body returned by every non-2xx response. Extra fields carry error-specific details.
properties:
kind:
type: string
enum:
- validation
- unauthorized
- forbidden
- not_found
- conflict
- rate_limited
- internal
description: Stable, machine-readable error category.
message:
type: string
description: Human-readable explanation of the failure.
suggestion:
type: string
description: What to do next when the failure has a known fix; may name the exact operation to call.
validValues:
type: array
items:
type: string
description: The acceptable values for the failing field, when the set is closed.
additionalProperties: true
securitySchemes:
apiKey:
type: http
scheme: bearer
description: Cactal API key. Create one in the dashboard or via `POST /apiKeys`. The plaintext key is shown once at creation.
x-refined-from:
- openapi.json
- cactal-ai-openapi.json