{"openapi":"3.1.0","info":{"title":"Datafold (BYOK) API","version":"0.1.0","description":"Datafold (BYOK) lets an AI assistant read your own Datafold data through the Datafold API with a key you supply (Datafold API key). Read-only: 11 tools (list_data_sources, get_data_source_summary, list_data_diffs, get_data_diff, list_monitors, get_monitor, list_monitor_runs, get_monitor_run, list_ci_runs, get_table_upstreams, get_table_downstreams). The BYOK key travels with each request, is used...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-datafold.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-datafold/docs"},"termsOfService":"https://connectorbay.com/byok-datafold/terms"},"servers":[{"url":"https://byok-datafold.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-datafold/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/list_data_sources":{"post":{"operationId":"list_data_sources","summary":"List the data sources (warehouses and databases) connected to Datafold with id, name, type, paused and accessible flags.","description":"List the data sources (warehouses and databases) connected to Datafold with id, name, type, paused and accessible flags. Connection options and secrets are not returned. Use for \"Which warehouses are connected to Datafold\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_data_sourcesArguments","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_data_source_summary":{"post":{"operationId":"get_data_source_summary","summary":"Get a short summary of one data source: id, name and type. Use for \"What is Datafold data source 1\".","description":"Get a short summary of one data source: id, name and type. Use for \"What is Datafold data source 1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"data_source_id":{"description":"Data source id (integer), from list_data_sources.","title":"Data Source Id","type":"integer"}},"required":["data_source_id"],"title":"get_data_source_summaryArguments","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_data_diffs":{"post":{"operationId":"list_data_diffs","summary":"List data diffs (comparisons of two tables or queries) newest first with status, result, tables, source and timing. Quer","description":"List data diffs (comparisons of two tables or queries) newest first with status, result, tables, source and timing. Queries and filters are not returned. Use for \"Which Datafold data diffs ran recently and did they find differences\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many diffs per page (1 to 100, default 100).","title":"Page Size"},"sort_order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Order direction.","title":"Sort Order"},"accessible_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"True to list only diffs on data sources you can access.","title":"Accessible Only"}},"title":"list_data_diffsArguments","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_data_diff":{"post":{"operationId":"get_data_diff","summary":"Get one data diff: status, result, tables, key columns, source, CI pull request details, timing and monitor link. Use fo","description":"Get one data diff: status, result, tables, key columns, source, CI pull request details, timing and monitor link. Use for \"What did Datafold data diff 100 find\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"datadiff_id":{"description":"Data diff id (integer).","title":"Datadiff Id","type":"integer"}},"required":["datadiff_id"],"title":"get_data_diffArguments","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_monitors":{"post":{"operationId":"list_monitors","summary":"List data monitors (metric, data diff, schema change, data test) with type, state, enabled flag, owner, tags and last ru","description":"List data monitors (metric, data diff, schema change, data test) with type, state, enabled flag, owner, tags and last run or alert. Use for \"Which Datafold monitors are failing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many monitors per page.","title":"Page Size"},"tags":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated tags to filter by.","title":"Tags"},"sort_order":{"anyOf":[{"enum":["asc","desc"],"type":"string"},{"type":"null"}],"default":"desc","description":"Order direction.","title":"Sort Order"}},"title":"list_monitorsArguments","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_monitor":{"post":{"operationId":"get_monitor","summary":"Get one monitor: name, description, type, state, schedule, owner, tags and last run or alert. Use for \"Show details of D","description":"Get one monitor: name, description, type, state, schedule, owner, tags and last run or alert. Use for \"Show details of Datafold monitor 5\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Monitor id (integer).","title":"Id","type":"integer"}},"required":["id"],"title":"get_monitorArguments","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_monitor_runs":{"post":{"operationId":"list_monitor_runs","summary":"List the runs of one monitor with state, start time and linked data diff. Use for \"How did the runs of Datafold monitor ","description":"List the runs of one monitor with state, start time and linked data diff. Use for \"How did the runs of Datafold monitor 5 go\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Monitor id (integer).","title":"Id","type":"integer"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many runs per page.","title":"Page Size"},"start_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs at or after this ISO 8601 time.","title":"Start Time"},"end_time":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs at or before this ISO 8601 time.","title":"End Time"}},"required":["id"],"title":"list_monitor_runsArguments","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_monitor_run":{"post":{"operationId":"get_monitor_run","summary":"Get one monitor run: state, start time, error and warnings. Use for \"Why did Datafold monitor 5 run 9 fail\".","description":"Get one monitor run: state, start time, error and warnings. Use for \"Why did Datafold monitor 5 run 9 fail\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Monitor id (integer).","title":"Id","type":"integer"},"run_id":{"description":"Run id (integer).","title":"Run Id","type":"integer"}},"required":["id","run_id"],"title":"get_monitor_runArguments","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_ci_runs":{"post":{"operationId":"list_ci_runs","summary":"List CI runs of a CI configuration with pull request number, branches, commit and status. Use for \"Which pull requests d","description":"List CI runs of a CI configuration with pull request number, branches, commit and status. Use for \"Which pull requests did Datafold CI check recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ci_config_id":{"description":"CI configuration id (integer), shown in the Datafold CI settings.","title":"Ci Config Id","type":"integer"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many runs to return.","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many runs to skip.","title":"Offset"}},"required":["ci_config_id"],"title":"list_ci_runsArguments","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_table_upstreams":{"post":{"operationId":"get_table_upstreams","summary":"List the upstream tables a table depends on, with their columns, down to a chosen depth. Use for \"Which tables feed db.s","description":"List the upstream tables a table depends on, with their columns, down to a chosen depth. Use for \"Which tables feed db.schema.orders\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"data_connection_id":{"description":"Data source id (integer), from list_data_sources.","title":"Data Connection Id","type":"integer"},"table_path":{"description":"Full table path such as 'db.schema.table' (case sensitive).","maxLength":200,"title":"Table Path","type":"string"},"max_depth":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":3,"description":"How many lineage hops to follow.","title":"Max Depth"}},"required":["data_connection_id","table_path"],"title":"get_table_upstreamsArguments","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_table_downstreams":{"post":{"operationId":"get_table_downstreams","summary":"List the downstream tables and assets that depend on a table, with their columns, down to a chosen depth. Use for \"What ","description":"List the downstream tables and assets that depend on a table, with their columns, down to a chosen depth. Use for \"What depends on db.schema.orders\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"data_connection_id":{"description":"Data source id (integer), from list_data_sources.","title":"Data Connection Id","type":"integer"},"table_path":{"description":"Full table path such as 'db.schema.table' (case sensitive).","maxLength":200,"title":"Table Path","type":"string"},"max_depth":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":3,"description":"How many lineage hops to follow.","title":"Max Depth"}},"required":["data_connection_id","table_path"],"title":"get_table_downstreamsArguments","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}}}}