Crescendo Provisioning API
Tenant-scoped provisioning resources.
Tenant-scoped provisioning resources.
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/crescendo-provisioning-api"
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
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: Crescendo Platform MCP Provisioning API
version: 1.6.0
description: Public HTTP API for the Crescendo platform.
servers:
- url: https://platform.crescendo.ai
security:
- bearerAuth: []
- bearerTokenQuery: []
tags:
- name: Provisioning
description: Tenant-scoped provisioning resources.
paths:
/api/v1/provisioning/tenants/{tenantId}:
get:
tags:
- Provisioning
summary: Get a provisioning document
description: Reads a single tenant-scoped provisioning document.
operationId: getProvisioningTenant
parameters:
- $ref: '#/components/parameters/tenantId'
responses:
'200':
description: Provisioning document
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/PermissionDenied'
'404':
$ref: '#/components/responses/NotFound'
post:
tags:
- Provisioning
summary: Create or replace a provisioning document (POST = replace)
description: Creates a document if it does not exist, otherwise replaces the existing document (POST = replace).
operationId: postProvisioningTenant
parameters:
- $ref: '#/components/parameters/tenantId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
responses:
'200':
description: Replaced (existing document)
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'201':
description: Created (new document)
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/PermissionDenied'
put:
tags:
- Provisioning
summary: Update a provisioning document (PUT = merge update)
description: Updates an existing document by merging fields (PUT = merge update). Returns 404 if the document does not exist.
operationId: putProvisioningTenant
parameters:
- $ref: '#/components/parameters/tenantId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/PermissionDenied'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/provisioning/tenants/{tenantId}/{collection}:
get:
tags:
- Provisioning
summary: List a provisioning collection
description: Reads a collection and returns an array of `{ id, data }` objects.
operationId: listProvisioningCollection
parameters:
- $ref: '#/components/parameters/tenantId'
- $ref: '#/components/parameters/collection'
responses:
'200':
description: Collection entries
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningCollectionResponse'
examples:
example:
value:
- id: user-001
data:
email: owner@alpha.test
role: owner
- id: user-002
data:
email: viewer@alpha.test
role: viewer
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/PermissionDenied'
/api/v1/provisioning/tenants/{tenantId}/{collection}/{docId}:
get:
tags:
- Provisioning
summary: Get a provisioning document by ID
description: Reads a single document at the provided path.
operationId: getProvisioningDocument
parameters:
- $ref: '#/components/parameters/tenantId'
- $ref: '#/components/parameters/collection'
- $ref: '#/components/parameters/docId'
responses:
'200':
description: Provisioning document
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/PermissionDenied'
'404':
$ref: '#/components/responses/NotFound'
post:
tags:
- Provisioning
summary: Create or replace a provisioning document (POST = replace)
description: Creates a document if it does not exist, otherwise replaces the existing document (POST = replace).
operationId: postProvisioningDocument
parameters:
- $ref: '#/components/parameters/tenantId'
- $ref: '#/components/parameters/collection'
- $ref: '#/components/parameters/docId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
responses:
'200':
description: Replaced (existing document)
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'201':
description: Created (new document)
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/PermissionDenied'
put:
tags:
- Provisioning
summary: Update a provisioning document (PUT = merge update)
description: Updates an existing document by merging fields (PUT = merge update). Returns 404 if the document does not exist.
operationId: putProvisioningDocument
parameters:
- $ref: '#/components/parameters/tenantId'
- $ref: '#/components/parameters/collection'
- $ref: '#/components/parameters/docId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/PermissionDenied'
'404':
$ref: '#/components/responses/NotFound'
/api/v1/provisioning/tenants/{tenantId}/{collection}/{docId}/versions/current:
get:
tags:
- Provisioning
summary: Get the current version document
description: Reads the `versions/current` document for a versioned resource.
operationId: getProvisioningVersionCurrent
parameters:
- $ref: '#/components/parameters/tenantId'
- $ref: '#/components/parameters/collection'
- $ref: '#/components/parameters/docId'
responses:
'200':
description: Current version document
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/PermissionDenied'
'404':
$ref: '#/components/responses/NotFound'
post:
tags:
- Provisioning
summary: Create or replace the current version document (POST = replace)
description: Creates or replaces the `versions/current` document (POST = replace).
operationId: postProvisioningVersionCurrent
parameters:
- $ref: '#/components/parameters/tenantId'
- $ref: '#/components/parameters/collection'
- $ref: '#/components/parameters/docId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
responses:
'200':
description: Replaced (existing document)
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'201':
description: Created (new document)
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/PermissionDenied'
put:
tags:
- Provisioning
summary: Update the current version document (PUT = merge update)
description: Updates an existing `versions/current` document by merging fields (PUT = merge update). Returns 404 if the document does not exist.
operationId: putProvisioningVersionCurrent
parameters:
- $ref: '#/components/parameters/tenantId'
- $ref: '#/components/parameters/collection'
- $ref: '#/components/parameters/docId'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
responses:
'200':
description: Updated
content:
application/json:
schema:
$ref: '#/components/schemas/ProvisioningDocument'
'400':
$ref: '#/components/responses/BadRequest'
'401':
$ref: '#/components/responses/Unauthenticated'
'403':
$ref: '#/components/responses/PermissionDenied'
'404':
$ref: '#/components/responses/NotFound'
components:
responses:
PermissionDenied:
description: Permission denied
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
example:
value:
code: PermissionDenied
message: API key does not allow this operation
BadRequest:
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
example:
value:
code: BadRequest
message: Invalid request parameters
NotFound:
description: Not found
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
example:
value:
code: NotFound
message: Resource not found
Unauthenticated:
description: Unauthenticated
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
example:
value:
code: Unauthenticated
message: Authorization header with Bearer token is required
parameters:
docId:
name: docId
in: path
required: true
description: Document identifier within the collection.
schema:
type: string
tenantId:
name: tenantId
in: path
required: true
description: Tenant identifier.
schema:
type: string
collection:
name: collection
in: path
required: true
description: 'Collection name under the tenant (for example: `users`, `bots`, `jobs`).'
schema:
type: string
schemas:
ProvisioningCollectionEntry:
type: object
properties:
id:
type: string
data:
type: object
additionalProperties: true
required:
- id
- data
ProvisioningCollectionResponse:
type: array
items:
$ref: '#/components/schemas/ProvisioningCollectionEntry'
ProvisioningDocument:
type: object
description: Arbitrary JSON object representing the provisioning resource.
additionalProperties: true
ErrorResponse:
type: object
properties:
code:
type: string
message:
type: string
required:
- code
- message
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: API Key
bearerTokenQuery:
type: apiKey
in: query
name: bearer_token
description: Alternative to the Authorization header. Prefer the Authorization header whenever possible.