{"openapi":"3.1.0","info":{"title":"DatoCMS (BYOK) API","version":"0.1.0","description":"DatoCMS (BYOK) lets an AI assistant read your own DatoCMS data through the DatoCMS API with a key you supply (API token (the project's read-only token is enough)). Read-only: 10 tools (get_site, list_models, get_model, list_model_fields, list_records, get_record, list_uploads, get_upload, list_environments, list_deploy_events). The BYOK key travels with each request, is used for that one call...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-datocms.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-datocms/docs"},"termsOfService":"https://connectorbay.com/byok-datocms/terms"},"servers":[{"url":"https://byok-datocms.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-datocms/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/get_site":{"post":{"operationId":"get_site","summary":"Show the DatoCMS project: name, locales, time zone, internal domain and last data change. Use for \"What is my DatoCMS pr","description":"Show the DatoCMS project: name, locales, time zone, internal domain and last data change. Use for \"What is my DatoCMS project called and which locales does it have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_siteArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_models":{"post":{"operationId":"list_models","summary":"List the content models and block models with name, API key and flags (single-instance, block model, sortable, tree, dra","description":"List the content models and block models with name, API key and flags (single-instance, block model, sortable, tree, draft mode). Use for \"What content models does my DatoCMS project have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_modelsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_model":{"post":{"operationId":"get_model","summary":"Get one model or block model by id or API key. Use for \"Show the DatoCMS model blog_post\".","description":"Get one model or block model by id or API key. Use for \"Show the DatoCMS model blog_post\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Model ID or its API key, for example 'blog_post' or '1234'.","maxLength":100,"title":"Id","type":"string"}},"required":["id"],"title":"get_modelArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_model_fields":{"post":{"operationId":"list_model_fields","summary":"List the fields of one model: label, API key, type, localized flag and position. Use for \"What fields does the DatoCMS m","description":"List the fields of one model: label, API key, type, localized flag and position. Use for \"What fields does the DatoCMS model blog_post have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Model ID or its API key, for example 'blog_post'.","maxLength":100,"title":"Id","type":"string"}},"required":["id"],"title":"list_model_fieldsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_records":{"post":{"operationId":"list_records","summary":"List records (content items), optionally of one model, matching a text query or given ids, with their field values and p","description":"List records (content items), optionally of one model, matching a text query or given ids, with their field values and publication status. Block fields return block ids unless nested is true. Use for \"What blog post records do I have in DatoCMS\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"model":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only records of this model (model ID or API key; several can be comma separated, then field filters are not allowed).","title":"Model"},"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text to match in records (needs no model).","title":"Search"},"ids":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated record IDs to fetch (cannot be combined with model).","title":"Ids"},"order_by":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Sort rule like '_updated_at_DESC' or 'title_ASC'; needs exactly one model.","title":"Order By"},"version":{"anyOf":[{"enum":["current","published"],"type":"string"},{"type":"null"}],"default":null,"description":"current (latest, default) or published versions of the records.","title":"Version"},"nested":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return full block content instead of block ids.","title":"Nested"},"locale":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Locale code used when searching, for example 'en'; defaults to the project's main locale.","title":"Locale"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many items to return (1 to 500, default 30).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip (zero-based), for paging.","title":"Offset"}},"title":"list_recordsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_record":{"post":{"operationId":"get_record","summary":"Get one record by id with all field values and its status and timestamps. Use for \"Show DatoCMS record c89tCUarTvGKxA37a","description":"Get one record by id with all field values and its status and timestamps. Use for \"Show DatoCMS record c89tCUarTvGKxA37acCEWA\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Record ID, for example 'c89tCUarTvGKxA37acCEWA'.","maxLength":64,"title":"Id","type":"string"},"version":{"anyOf":[{"enum":["current","published"],"type":"string"},{"type":"null"}],"default":null,"description":"current (latest, default) or published version.","title":"Version"},"nested":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return full block content instead of block ids.","title":"Nested"}},"required":["id"],"title":"get_recordArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_uploads":{"post":{"operationId":"list_uploads","summary":"List media library uploads with file name, format, size, dimensions, URL and tags; optionally filtered by text. Use for ","description":"List media library uploads with file name, format, size, dimensions, URL and tags; optionally filtered by text. Use for \"Which images are in my DatoCMS media library\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Text to match in upload names, notes and tags.","title":"Search"},"ids":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated upload IDs to fetch.","title":"Ids"},"locale":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Locale code used when searching, for example 'en'; defaults to the project's main locale.","title":"Locale"},"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many items to return (1 to 500, default 30).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip (zero-based), for paging.","title":"Offset"}},"title":"list_uploadsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_upload":{"post":{"operationId":"get_upload","summary":"Get one media library upload by id. Use for \"Show DatoCMS upload 20042921\".","description":"Get one media library upload by id. Use for \"Show DatoCMS upload 20042921\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Upload ID, for example '20042921'.","maxLength":64,"title":"Id","type":"string"}},"required":["id"],"title":"get_uploadArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_environments":{"post":{"operationId":"list_environments","summary":"List the project's environments with status, primary flag, creation time and last data change. Use for \"Which environmen","description":"List the project's environments with status, primary flag, creation time and last data change. Use for \"Which environments does my DatoCMS project have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_environmentsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_deploy_events":{"post":{"operationId":"list_deploy_events","summary":"List deploy (build trigger) events with event type, time and data. Use for \"What deploys did DatoCMS run recently\".","description":"List deploy (build trigger) events with event type, time and data. Use for \"What deploys did DatoCMS run recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":500,"minimum":1,"type":"integer"},{"type":"null"}],"default":30,"description":"How many items to return (1 to 500, default 30).","title":"Limit"},"offset":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many items to skip (zero-based), for paging.","title":"Offset"}},"title":"list_deploy_eventsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}