{"openapi":"3.1.0","info":{"title":"Polytomic (BYOK) API","version":"0.1.0","description":"Polytomic (BYOK) lets an AI assistant read your own Polytomic data through the Polytomic API with a key you supply (Polytomic user API key). Read-only: 10 tools (get_identity, get_organization, list_connection_types, list_connections, list_models, list_syncs, get_sync_status, list_sync_executions, list_bulk_syncs, list_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-polytomic.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-polytomic/docs"},"termsOfService":"https://connectorbay.com/byok-polytomic/terms"},"servers":[{"url":"https://byok-polytomic.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-polytomic/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_identity":{"post":{"operationId":"get_identity","summary":"Show which Polytomic identity the key belongs to: organization, role and key type. Use for \"Which Polytomic organization","description":"Show which Polytomic identity the key belongs to: organization, role and key type. Use for \"Which Polytomic organization is my API key for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_identityArguments","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_organization":{"post":{"operationId":"get_organization","summary":"Get the current organization: its ID and name. Use for \"What is my Polytomic organization called\".","description":"Get the current organization: its ID and name. Use for \"What is my Polytomic organization called\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_organizationArguments","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_connection_types":{"post":{"operationId":"list_connection_types","summary":"List the system types Polytomic can connect to (for example postgresql or hubspot) and whether each works as a source, d","description":"List the system types Polytomic can connect to (for example postgresql or hubspot) and whether each works as a source, destination or enrichment. Use for \"Which systems can Polytomic connect to\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_connection_typesArguments","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_connections":{"post":{"operationId":"list_connections","summary":"List the configured connections with type, status and the number of API calls in the last 24 hours. Credentials are not ","description":"List the configured connections with type, status and the number of API calls in the last 24 hours. Credentials are not picked. Use for \"Which Polytomic connections do I have and are they healthy\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_connectionsArguments","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 models (queries or tables that feed syncs) with their connection, type and tracking columns. Use for \"Which mod","description":"List the models (queries or tables that feed syncs) with their connection, type and tracking columns. Use for \"Which models are defined in Polytomic\".","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/list_syncs":{"post":{"operationId":"list_syncs","summary":"List model syncs with mode, target object, schedule frequency and whether each is active. Up to 50 per page. Use for \"Wh","description":"List model syncs with mode, target object, schedule frequency and whether each is active. Up to 50 per page. Use for \"Which Polytomic syncs are active and how often do they run\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only active syncs, false for only paused ones.","title":"Active"},"mode":{"anyOf":[{"enum":["create","update","updateOrCreate","replace","append","remove","snapshot"],"type":"string"},{"type":"null"}],"default":null,"description":"Only syncs with this mode.","title":"Mode"},"target_connection_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only syncs writing to this connection ID.","title":"Target Connection Id"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many syncs to return (maximum and default 50).","title":"Limit"},"page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor: the next_page_token from the previous answer. Leave out for the first page.","title":"Page Token"}},"title":"list_syncsArguments","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_sync_status":{"post":{"operationId":"get_sync_status","summary":"Get the run state of one sync: when it runs next and its current and last execution. Use for \"When does the Polytomic sy","description":"Get the run state of one sync: when it runs next and its current and last execution. Use for \"When does the Polytomic sync run next and did the last run work\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sync_id":{"description":"ID of the model sync, from list_syncs.","maxLength":200,"title":"Sync Id","type":"string"}},"required":["sync_id"],"title":"get_sync_statusArguments","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_sync_executions":{"post":{"operationId":"list_sync_executions","summary":"List past runs of one sync with status, start and end times and record counts (inserts, updates, deletes, errors). Use f","description":"List past runs of one sync with status, start and end times and record counts (inserts, updates, deletes, errors). Use for \"How did the last runs of this Polytomic sync go\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sync_id":{"description":"ID of the model sync, from list_syncs.","maxLength":200,"title":"Sync Id","type":"string"},"only_completed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to skip runs that are still going.","title":"Only Completed"},"ascending":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for oldest first (default newest first).","title":"Ascending"},"page_token":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor: the next_page_token from the previous answer. Leave out for the first page.","title":"Page Token"}},"required":["sync_id"],"title":"list_sync_executionsArguments","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_bulk_syncs":{"post":{"operationId":"list_bulk_syncs","summary":"List bulk syncs (warehouse and database replication) with mode, source and destination connection and whether each is ac","description":"List bulk syncs (warehouse and database replication) with mode, source and destination connection and whether each is active. Use for \"Which Polytomic bulk syncs replicate data into my warehouse\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only active bulk syncs, false for only paused ones.","title":"Active"}},"title":"list_bulk_syncsArguments","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_events":{"post":{"operationId":"list_events","summary":"List recent audit events of the organization (event type and time), up to 100. Use for \"What happened recently in my Pol","description":"List recent audit events of the organization (event type and time), up to 100. Use for \"What happened recently in my Polytomic organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only events of this type; see list_event_types.","title":"Type"},"starting_after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only events after this timestamp (RFC 3339).","title":"Starting After"},"ending_before":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only events before this timestamp (RFC 3339).","title":"Ending Before"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many events to return (1 to 100, default 10).","title":"Limit"}},"title":"list_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}}}}