{"openapi":"3.1.0","info":{"title":"Coda Analytics (BYOK) API","version":"0.1.0","description":"Coda Analytics (BYOK) lets an AI assistant read your own Coda Analytics data through the Coda Analytics API with a key you supply (Coda API token). Read-only: 7 tools (get_analytics_last_updated, list_doc_analytics, get_doc_analytics_summary, list_page_analytics, list_pack_analytics, get_pack_analytics_summary, list_pack_formula_analytics). The BYOK key travels with each request, is used for that...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-coda-analytics.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-coda-analytics/docs"},"termsOfService":"https://connectorbay.com/byok-coda-analytics/terms"},"servers":[{"url":"https://byok-coda-analytics.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-coda-analytics/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_analytics_last_updated":{"post":{"operationId":"get_analytics_last_updated","summary":"Show when doc analytics and Pack analytics were last refreshed, so you know how fresh the numbers are. Use for \"When wer","description":"Show when doc analytics and Pack analytics were last refreshed, so you know how fresh the numbers are. Use for \"When were my Coda analytics last updated\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_analytics_last_updatedArguments","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_doc_analytics":{"post":{"operationId":"list_doc_analytics","summary":"List analytics per doc over a date range: views, copies, likes and sessions by device for each day (or cumulative). Need","description":"List analytics per doc over a date range: views, copies, likes and sessions by device for each day (or cumulative). Needs workspace analytics access; filter by doc ids, workspace, search text or published state. Use for \"Which of my Coda docs got the most sessions last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"doc_ids":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated doc ids to include.","title":"Doc Ids"},"workspace_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of this workspace id.","title":"Workspace Id"},"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only docs whose title contains this text.","title":"Query"},"is_published":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only published docs, false for only unpublished ones.","title":"Is Published"},"since_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"First day of the range, YYYY-MM-DD.","title":"Since Date"},"until_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Last day of the range, YYYY-MM-DD.","title":"Until Date"},"scale":{"anyOf":[{"enum":["daily","cumulative"],"type":"string"},{"type":"null"}],"default":null,"description":"daily for one row per day or cumulative for running totals; leave out for the service default.","title":"Scale"},"order_by":{"anyOf":[{"enum":["date","docId","title","createdAt","publishedAt","likes","copies","views","sessionsDesktop","sessionsMobile","sessionsOther","totalSessions"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field.","title":"Order By"},"direction":{"anyOf":[{"enum":["descending","ascending"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: ascending or descending.","title":"Direction"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Limit"},"page_token":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Next page token: the nextPageToken value from the previous answer. Leave out for the first page.","title":"Page Token"}},"title":"list_doc_analyticsArguments","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_doc_analytics_summary":{"post":{"operationId":"get_doc_analytics_summary","summary":"Get the total number of sessions across docs for a date range, optionally for published docs or one workspace only. Use ","description":"Get the total number of sessions across docs for a date range, optionally for published docs or one workspace only. Use for \"How many Coda doc sessions did we have in total this quarter\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"is_published":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only published docs, false for only unpublished ones.","title":"Is Published"},"since_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"First day of the range, YYYY-MM-DD.","title":"Since Date"},"until_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Last day of the range, YYYY-MM-DD.","title":"Until Date"},"workspace_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of this workspace id.","title":"Workspace Id"}},"title":"get_doc_analytics_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_page_analytics":{"post":{"operationId":"list_page_analytics","summary":"List analytics for the pages of one doc over a date range: views, sessions, users, average and median seconds viewed and","description":"List analytics for the pages of one doc over a date range: views, sessions, users, average and median seconds viewed and open tabs per day. Use for \"Which pages of my Coda doc AbCDeFGH are read the most\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"doc_id":{"description":"Doc id: the part after _d in the doc URL, or the id from the doc analytics list, for example 'AbCDeFGH'.","maxLength":200,"title":"Doc Id","type":"string"},"since_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"First day of the range, YYYY-MM-DD.","title":"Since Date"},"until_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Last day of the range, YYYY-MM-DD.","title":"Until Date"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Limit"},"page_token":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Next page token: the nextPageToken value from the previous answer. Leave out for the first page.","title":"Page Token"}},"required":["doc_id"],"title":"list_page_analyticsArguments","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_pack_analytics":{"post":{"operationId":"list_pack_analytics","summary":"List analytics per Pack you maintain over a date range: doc and workspace installs, invocation counts by kind and active","description":"List analytics per Pack you maintain over a date range: doc and workspace installs, invocation counts by kind and active-use numbers. Needs Pack analytics access. Use for \"How many installs did my Coda Packs get this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pack_ids":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated Pack ids to include.","title":"Pack Ids"},"workspace_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of this workspace id.","title":"Workspace Id"},"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only Packs whose name contains this text.","title":"Query"},"since_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"First day of the range, YYYY-MM-DD.","title":"Since Date"},"until_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Last day of the range, YYYY-MM-DD.","title":"Until Date"},"scale":{"anyOf":[{"enum":["daily","cumulative"],"type":"string"},{"type":"null"}],"default":null,"description":"daily for one row per day or cumulative for running totals; leave out for the service default.","title":"Scale"},"order_by":{"anyOf":[{"enum":["date","packId","name","createdAt","docInstalls","workspaceInstalls","numFormulaInvocations","numActionInvocations","numSyncInvocations","numMetadataInvocations","docsActivelyUsing","workspacesActivelyUsing","revenueUsd"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field.","title":"Order By"},"direction":{"anyOf":[{"enum":["descending","ascending"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: ascending or descending.","title":"Direction"},"is_published":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only published Packs, false for only unpublished ones.","title":"Is Published"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Limit"},"page_token":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Next page token: the nextPageToken value from the previous answer. Leave out for the first page.","title":"Page Token"}},"title":"list_pack_analyticsArguments","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_pack_analytics_summary":{"post":{"operationId":"get_pack_analytics_summary","summary":"Get total doc installs, workspace installs and invocations across Packs for a date range. Use for \"What are the total in","description":"Get total doc installs, workspace installs and invocations across Packs for a date range. Use for \"What are the total installs and invocations of my Coda Packs\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pack_ids":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated Pack ids to include.","title":"Pack Ids"},"workspace_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only items of this workspace id.","title":"Workspace Id"},"is_published":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for only published Packs, false for only unpublished ones.","title":"Is Published"},"since_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"First day of the range, YYYY-MM-DD.","title":"Since Date"},"until_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Last day of the range, YYYY-MM-DD.","title":"Until Date"}},"title":"get_pack_analytics_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_pack_formula_analytics":{"post":{"operationId":"list_pack_formula_analytics","summary":"List analytics per formula, action or sync table of one Pack: invocations, errors and median latency per day. Use for \"W","description":"List analytics per formula, action or sync table of one Pack: invocations, errors and median latency per day. Use for \"Which formulas of my Coda Pack 1001 fail most often\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"pack_id":{"description":"Numeric Pack id, for example 1001.","title":"Pack Id","type":"integer"},"pack_formula_names":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated formula names to include.","title":"Pack Formula Names"},"pack_formula_types":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated kinds to include: action, formula, sync, metadata.","title":"Pack Formula Types"},"since_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"First day of the range, YYYY-MM-DD.","title":"Since Date"},"until_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Last day of the range, YYYY-MM-DD.","title":"Until Date"},"scale":{"anyOf":[{"enum":["daily","cumulative"],"type":"string"},{"type":"null"}],"default":null,"description":"daily for one row per day or cumulative for running totals; leave out for the service default.","title":"Scale"},"order_by":{"anyOf":[{"enum":["date","formulaName","formulaType","formulaInvocations","medianLatencyMs","medianResponseSizeBytes","errors"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field.","title":"Order By"},"direction":{"anyOf":[{"enum":["descending","ascending"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction: ascending or descending.","title":"Direction"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results to return (1 to 100).","title":"Limit"},"page_token":{"anyOf":[{"maxLength":1000,"type":"string"},{"type":"null"}],"default":null,"description":"Next page token: the nextPageToken value from the previous answer. Leave out for the first page.","title":"Page Token"}},"required":["pack_id"],"title":"list_pack_formula_analyticsArguments","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}}}}