openapi: 3.2.0 info: version: 2.0.0 x-latency-category: responsive x-endpoint-cost: light title: Telnyx kv namespaces API description: SIP trunking, SMS, MMS, Call Control and Telephony Data Services. contact: email: support@telnyx.com servers: - url: https://api.telnyx.com/v2 description: Version 2.0.0 of the Telnyx API security: - bearerAuth: [] tags: - name: kv namespaces description: Manage KV storage namespaces paths: /storage/kvs: get: description: Lists the KV namespaces for the authenticated user's organization. Results use page-based pagination (`page[number]`/`page[size]`). tags: - kv namespaces summary: List KV namespaces operationId: ListKvNamespaces parameters: - description: The page number to load. name: page[number] in: query schema: type: integer minimum: 1 default: 1 - description: The size of the page. Values above 250 are treated as 250. name: page[size] in: query schema: type: integer minimum: 1 maximum: 250 default: 20 responses: '200': description: KV namespaces retrieved successfully content: application/json: schema: $ref: '#/components/schemas/KvNamespaceListResponseWrapper' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Errors' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/GenericErrorResponse' post: description: 'Creates a new KV namespace. Provisioning is asynchronous: the namespace is returned with status `pending` and becomes usable once it reaches `provision_ok`.' tags: - kv namespaces summary: Create a KV namespace operationId: CreateKvNamespace requestBody: content: application/json: schema: $ref: '#/components/schemas/CreateKvNamespaceRequest' description: KV namespace creation request required: true responses: '201': description: KV namespace created successfully content: application/json: schema: $ref: '#/components/schemas/KvNamespaceResponseWrapper' '400': description: Bad request — missing or invalid `name` content: application/json: schema: $ref: '#/components/schemas/Errors' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Errors' '409': description: Conflict — a namespace with this name already exists for your organization content: application/json: schema: $ref: '#/components/schemas/Errors' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/GenericErrorResponse' /storage/kvs/{id}: delete: description: 'Deletes a KV namespace and all of the keys it contains. Deletion is asynchronous: the namespace is returned with status `deleting`. Deleting a namespace whose deletion is already in progress returns a `409`.' tags: - kv namespaces summary: Delete a KV namespace operationId: DeleteKvNamespace parameters: - description: KV namespace ID name: id in: path required: true schema: type: string format: uuid responses: '200': description: KV namespace deletion initiated content: application/json: schema: $ref: '#/components/schemas/KvNamespaceResponseWrapper' '400': description: Bad request — `id` is not a valid UUID content: application/json: schema: $ref: '#/components/schemas/Errors' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Errors' '404': description: KV namespace not found content: application/json: schema: $ref: '#/components/schemas/Errors' '409': description: Conflict — the namespace is already being deleted content: application/json: schema: $ref: '#/components/schemas/Errors' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/GenericErrorResponse' get: description: Retrieves a KV namespace by its ID, including its provisioning status. tags: - kv namespaces summary: Get a KV namespace operationId: GetKvNamespace parameters: - description: KV namespace ID name: id in: path required: true schema: type: string format: uuid responses: '200': description: KV namespace retrieved successfully content: application/json: schema: $ref: '#/components/schemas/KvNamespaceResponseWrapper' '400': description: Bad request — `id` is not a valid UUID content: application/json: schema: $ref: '#/components/schemas/Errors' '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/Errors' '404': description: KV namespace not found content: application/json: schema: $ref: '#/components/schemas/Errors' '500': description: Internal server error content: application/json: schema: $ref: '#/components/schemas/GenericErrorResponse' components: schemas: KvNamespace: type: object properties: record_type: type: string example: storage_kv id: type: string format: uuid example: 550e8400-e29b-41d4-a716-446655440000 name: type: string example: my-cache status: type: string description: Provisioning status. A namespace is usable once `status` is `provision_ok`. Once deletion completes, the namespace no longer appears in the API. enum: - pending - provision_ok - provision_failed - deleting - delete_failed example: provision_ok created_at: type: string format: date-time example: '2026-06-18T14:48:17Z' updated_at: type: string format: date-time example: '2026-06-18T14:48:17Z' CreateKvNamespaceRequest: type: object properties: name: type: string description: Namespace name. May contain lowercase letters, numbers, and hyphens only. pattern: ^[a-z0-9-]+$ minLength: 1 maxLength: 255 example: my-cache required: - name GenericErrorResponse: type: object properties: errors: type: array items: $ref: '#/components/schemas/edge-compute_Error' ErrorSource: type: object properties: parameter: type: string example: id pointer: type: string example: /id edge-compute_PaginationMeta: type: object properties: page_number: type: integer example: 1 page_size: type: integer example: 20 total_pages: type: integer example: 3 total_results: type: integer example: 52 KvNamespaceResponseWrapper: type: object properties: data: $ref: '#/components/schemas/KvNamespace' Errors: properties: errors: type: array items: $ref: '#/components/schemas/billing-group_Error' type: object edge-compute_Error: type: object properties: code: type: string example: '10005' detail: type: string example: The requested function does not exist or you don't have access to it meta: $ref: '#/components/schemas/ErrorMeta' source: $ref: '#/components/schemas/ErrorSource' title: type: string example: Function not found KvNamespaceListResponseWrapper: type: object properties: data: type: array items: $ref: '#/components/schemas/KvNamespace' meta: $ref: '#/components/schemas/edge-compute_PaginationMeta' ErrorMeta: type: object properties: url: type: string example: https://docs.telnyx.com/api/errors/10005 billing-group_Error: type: object required: - code - title properties: code: type: integer format: int32 title: type: string detail: type: string source: type: object properties: pointer: description: JSON pointer (RFC6901) to the offending entity. type: string parameter: description: Indicates which query parameter caused the error. type: string meta: type: object properties: {} additionalProperties: true securitySchemes: BearerAuth: type: http scheme: bearer bearerFormat: API key description: 'Telnyx API key supplied as `Authorization: Bearer `. In production, auth may be validated by the API gateway and forwarded via Telnyx auth headers.' Payment: type: apiKey in: header name: Authorization description: 'Machine Payment Protocol credential used on paid retries, sent as `Authorization: Payment ...`. Obtained by paying a challenge returned in the `WWW-Authenticate` header of a 402 response. This is not a Telnyx API key; initial challenge requests use standard bearer authentication instead.' agent-memory_bearerAuth: type: http scheme: bearer description: Telnyx API key bearerAuth: type: http scheme: bearer branded-calling_bearerAuth: type: http scheme: bearer description: Telnyx API key. Generate one at https://portal.telnyx.com/#/app/api-keys. collections_bearerAuth: type: http scheme: bearer description: Telnyx API key. Collections and results are automatically scoped to the authenticated user's organization. number-reputation_bearerAuth: type: http scheme: bearer description: Telnyx API key. Generate one at https://portal.telnyx.com/#/app/api-keys. oauthClientAuth: type: oauth2 flows: clientCredentials: tokenUrl: https://api.telnyx.com/v2/oauth/token scopes: admin: Administrative access to Telnyx resources authorizationCode: authorizationUrl: https://api.telnyx.com/v2/oauth/authorize tokenUrl: https://api.telnyx.com/v2/oauth/token refreshUrl: https://api.telnyx.com/v2/oauth/token scopes: admin: Administrative access to Telnyx resources description: OAuth 2.0 authentication for Telnyx API and MCP integrations outbound-voice-profiles_bearerAuth: type: http scheme: bearer bearerFormat: JWT pronunciation-dicts_bearerAuth: type: http scheme: bearer description: Telnyx API v2 key. Obtain from https://portal.telnyx.com rcs-registration_bearerAuth: type: http scheme: bearer bearerFormat: API key stored-payment-transactions_bearerAuth: type: http scheme: bearer bearerFormat: JWT transcriptions-search_bearerAuth: type: http scheme: bearer description: Telnyx API key. Results are automatically scoped to the authenticated user's organization. web-search_bearerAuth: type: http scheme: bearer description: Telnyx API key x-service-info: categories: - communication - developer-tools docs: apiReference: https://developers.telnyx.com homepage: https://telnyx.com llms: https://telnyx.com/llms.txt