{"openapi":"3.1.0","info":{"title":"Tally Analytics and Webhooks (BYOK) API","version":"0.1.0","description":"Tally Analytics and Webhooks (BYOK) lets an AI assistant read your own Tally Analytics and Webhooks data through the Tally Analytics and Webhooks API with a key you supply (API key (starts with tly-)). Read-only: 5 tools (get_form_visits, get_form_submission_counts, get_form_dimensions, list_workspace_folders, list_webhooks). The BYOK key travels with each request, is used for that one call only...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-tally-analytics-webhooks.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-tally-analytics-webhooks/docs"},"termsOfService":"https://connectorbay.com/byok-tally-analytics-webhooks/terms"},"servers":[{"url":"https://byok-tally-analytics-webhooks.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-tally-analytics-webhooks/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_form_visits":{"post":{"operationId":"get_form_visits","summary":"Get how many visits a form received over a period, as counts per time bucket (interval gives the bucket size). Use for \"","description":"Get how many visits a form received over a period, as counts per time bucket (interval gives the bucket size). Use for \"How many visits did my Tally form wMeEzG get in the last 30 days\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"form_id":{"description":"Tally form id (from the Tally forms list), for example 'wMeEzG'.","maxLength":200,"title":"Form Id","type":"string"},"period":{"description":"Time period of the analytics.","enum":["today","yesterday","24h","7d","30d","3m","6m","12m","all"],"title":"Period","type":"string"}},"required":["form_id","period"],"title":"get_form_visitsArguments","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_form_submission_counts":{"post":{"operationId":"get_form_submission_counts","summary":"Get completed and partial submission counts of a form over a period, per time bucket. Counts only, no answers. Use for \"","description":"Get completed and partial submission counts of a form over a period, per time bucket. Counts only, no answers. Use for \"How many completed and partial submissions did my Tally form wMeEzG get this week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"form_id":{"description":"Tally form id (from the Tally forms list), for example 'wMeEzG'.","maxLength":200,"title":"Form Id","type":"string"},"period":{"description":"Time period of the analytics.","enum":["today","yesterday","24h","7d","30d","3m","6m","12m","all"],"title":"Period","type":"string"}},"required":["form_id","period"],"title":"get_form_submission_countsArguments","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_form_dimensions":{"post":{"operationId":"get_form_dimensions","summary":"Get visitor breakdowns for a form over a period: counts by traffic source, browser, operating system, device type, count","description":"Get visitor breakdowns for a form over a period: counts by traffic source, browser, operating system, device type, country and city. Use for \"Where do the visitors of my Tally form wMeEzG come from\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"form_id":{"description":"Tally form id (from the Tally forms list), for example 'wMeEzG'.","maxLength":200,"title":"Form Id","type":"string"},"period":{"description":"Time period of the analytics.","enum":["today","yesterday","24h","7d","30d","3m","6m","12m","all"],"title":"Period","type":"string"}},"required":["form_id","period"],"title":"get_form_dimensionsArguments","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_workspace_folders":{"post":{"operationId":"list_workspace_folders","summary":"List the folders of a workspace with name, parent folder and dates (needs a Tally Pro subscription). Use for \"Which fold","description":"List the folders of a workspace with name, parent folder and dates (needs a Tally Pro subscription). Use for \"Which folders does my Tally workspace have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"workspace_id":{"description":"Tally workspace id (from the Tally workspaces list), for example 'mVBdWG'.","maxLength":200,"title":"Workspace Id","type":"string"}},"required":["workspace_id"],"title":"list_workspace_foldersArguments","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_webhooks":{"post":{"operationId":"list_webhooks","summary":"List the webhooks across your accessible forms with form id, subscribed event types, enabled flag and sync and creation ","description":"List the webhooks across your accessible forms with form id, subscribed event types, enabled flag and sync and creation dates. Target URL, signing secret and custom headers are not returned. Use for \"Which Tally webhooks are enabled and on which forms\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1 (default 1).","title":"Page"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Webhooks per page (1 to 100, default 25).","title":"Limit"}},"title":"list_webhooksArguments","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}}}}