{"openapi":"3.1.0","info":{"title":"Wufoo (BYOK) API","version":"0.1.0","description":"Wufoo (BYOK) lets an AI assistant read your own Wufoo data through the Wufoo API with a key you supply (Wufoo API key). Read-only: 8 tools (list_forms, get_form, list_form_fields, list_form_entries, count_form_entries, list_form_comments, list_reports, list_users). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it is only ever sent to...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-wufoo.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-wufoo/docs"},"termsOfService":"https://connectorbay.com/byok-wufoo/terms"},"servers":[{"url":"https://byok-wufoo.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-wufoo/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_forms":{"post":{"operationId":"list_forms","summary":"List the forms in the account with name, hash (the form id used elsewhere), URL title, public flag, entry limit and date","description":"List the forms in the account with name, hash (the form id used elsewhere), URL title, public flag, entry limit and dates. Use for \"What forms do I have in Wufoo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Wufoo account subdomain: the part before .wufoo.com, for example 'mycompany' for mycompany.wufoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many forms to return.","title":"Limit"},"page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["subdomain"],"title":"list_formsArguments","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":{"post":{"operationId":"get_form","summary":"Get one form's name, description, public flag, language, open and close dates and entry limit. Use for \"Show the details","description":"Get one form's name, description, public flag, language, open and close dates and entry limit. Use for \"Show the details of my Wufoo form s1afea8b1vk0jf7\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Wufoo account subdomain: the part before .wufoo.com, for example 'mycompany' for mycompany.wufoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"form":{"description":"Form hash (from list_forms, for example 's1afea8b1vk0jf7') or the form's URL title (for example 'contact-us').","maxLength":200,"title":"Form","type":"string"}},"required":["subdomain","form"],"title":"get_formArguments","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_form_fields":{"post":{"operationId":"list_form_fields","summary":"List a form's fields with API id (Field105 style), title, type, required flag and instructions. Use these ids in entry f","description":"List a form's fields with API id (Field105 style), title, type, required flag and instructions. Use these ids in entry filters and sorting. Use for \"What fields does my Wufoo form s1afea8b1vk0jf7 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Wufoo account subdomain: the part before .wufoo.com, for example 'mycompany' for mycompany.wufoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"form":{"description":"Form hash (from list_forms, for example 's1afea8b1vk0jf7') or the form's URL title (for example 'contact-us').","maxLength":200,"title":"Form","type":"string"}},"required":["subdomain","form"],"title":"list_form_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_form_entries":{"post":{"operationId":"list_form_entries","summary":"List a form's entries (submissions): EntryId, creation date and one FieldNN value per form field. Filter with up to thre","description":"List a form's entries (submissions): EntryId, creation date and one FieldNN value per form field. Filter with up to three conditions, sort, and page with page_start and page_size. Use for \"Show the newest entries of my Wufoo form s1afea8b1vk0jf7\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Wufoo account subdomain: the part before .wufoo.com, for example 'mycompany' for mycompany.wufoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"form":{"description":"Form hash (from list_forms, for example 's1afea8b1vk0jf7') or the form's URL title (for example 'contact-us').","maxLength":200,"title":"Form","type":"string"},"filter1":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Entry filter written as 'FieldID Operator Value', for example 'Field105 Contains hello' or 'EntryId Is_greater_than 10'. Operators: Contains, Does_not_contain, Begins_with, Ends_with, Is_less_than, Is_greater_than, Is_on, Is_before, Is_after, Is_not_equal_to, Is_equal_to, Is_not_NULL.","title":"Filter1"},"filter2":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Entry filter written as 'FieldID Operator Value', for example 'Field105 Contains hello' or 'EntryId Is_greater_than 10'. Operators: Contains, Does_not_contain, Begins_with, Ends_with, Is_less_than, Is_greater_than, Is_on, Is_before, Is_after, Is_not_equal_to, Is_equal_to, Is_not_NULL.","title":"Filter2"},"filter3":{"anyOf":[{"maxLength":300,"type":"string"},{"type":"null"}],"default":null,"description":"Entry filter written as 'FieldID Operator Value', for example 'Field105 Contains hello' or 'EntryId Is_greater_than 10'. Operators: Contains, Does_not_contain, Begins_with, Ends_with, Is_less_than, Is_greater_than, Is_on, Is_before, Is_after, Is_not_equal_to, Is_equal_to, Is_not_NULL.","title":"Filter3"},"match":{"anyOf":[{"enum":["AND","OR"],"type":"string"},{"type":"null"}],"default":"AND","description":"How several filters combine: AND (all must match) or OR (at least one).","title":"Match"},"sort":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Field ID to sort by, for example 'EntryId' or 'Field105'.","title":"Sort"},"sort_direction":{"anyOf":[{"enum":["ASC","DESC"],"type":"string"},{"type":"null"}],"default":"ASC","description":"ASC (lowest first) or DESC (highest first); applies only together with sort.","title":"Sort Direction"},"page_start":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of entries to skip from the start, for paging.","title":"Page Start"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many entries to return (1 to 100, default 25).","title":"Page Size"}},"required":["subdomain","form"],"title":"list_form_entriesArguments","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/count_form_entries":{"post":{"operationId":"count_form_entries","summary":"Count the entries of a form. Use for \"How many submissions has my Wufoo form s1afea8b1vk0jf7 received\".","description":"Count the entries of a form. Use for \"How many submissions has my Wufoo form s1afea8b1vk0jf7 received\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Wufoo account subdomain: the part before .wufoo.com, for example 'mycompany' for mycompany.wufoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"form":{"description":"Form hash (from list_forms, for example 's1afea8b1vk0jf7') or the form's URL title (for example 'contact-us').","maxLength":200,"title":"Form","type":"string"}},"required":["subdomain","form"],"title":"count_form_entriesArguments","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_form_comments":{"post":{"operationId":"list_form_comments","summary":"List the comments left on a form's entries in the entry manager: comment id, entry id, author, text and date. Use for \"W","description":"List the comments left on a form's entries in the entry manager: comment id, entry id, author, text and date. Use for \"What comments are on the entries of my Wufoo form s1afea8b1vk0jf7\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Wufoo account subdomain: the part before .wufoo.com, for example 'mycompany' for mycompany.wufoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"},"form":{"description":"Form hash (from list_forms, for example 's1afea8b1vk0jf7') or the form's URL title (for example 'contact-us').","maxLength":200,"title":"Form","type":"string"},"page_start":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of comments to skip, for paging.","title":"Page Start"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many comments to return (1 to 100, default 25).","title":"Page Size"}},"required":["subdomain","form"],"title":"list_form_commentsArguments","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_reports":{"post":{"operationId":"list_reports","summary":"List the account's reports with name, hash, URL title, public flag and dates. Use for \"What reports do I have in Wufoo\".","description":"List the account's reports with name, hash, URL title, public flag and dates. Use for \"What reports do I have in Wufoo\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Wufoo account subdomain: the part before .wufoo.com, for example 'mycompany' for mycompany.wufoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"}},"required":["subdomain"],"title":"list_reportsArguments","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_users":{"post":{"operationId":"list_users","summary":"List the users of the account with user name, whether they own the account and what they may create or administer. Use f","description":"List the users of the account with user name, whether they own the account and what they may create or administer. Use for \"Who are the users on my Wufoo account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subdomain":{"description":"Your Wufoo account subdomain: the part before .wufoo.com, for example 'mycompany' for mycompany.wufoo.com.","maxLength":200,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Subdomain","type":"string"}},"required":["subdomain"],"title":"list_usersArguments","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}}}}