{"openapi":"3.1.0","info":{"title":"Linkbreakers (BYOK) API","version":"0.1.0","description":"Linkbreakers (BYOK) lets an AI assistant read your own Linkbreakers data through the Linkbreakers API with a key you supply (Linkbreakers API token (workspace settings, API tokens)). Read-only: 9 tools (list_links, get_link, list_tags, list_custom_domains, list_directories, list_qr_code_templates, get_workspace_metrics, get_event_summary, get_allowances). The BYOK key travels with each request,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-linkbreakers.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-linkbreakers/docs"},"termsOfService":"https://connectorbay.com/byok-linkbreakers/terms"},"servers":[{"url":"https://byok-linkbreakers.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-linkbreakers/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_links":{"post":{"operationId":"list_links","summary":"List short links with name, short link, event count, folder, domain, expiry and dates; search by name, sort by date, nam","description":"List short links with name, short link, event count, folder, domain, expiry and dates; search by name, sort by date, name or events, or limit to one folder. Destinations and free-form metadata are left out. Use for \"Which of my Linkbreakers links got the most events\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Match on name or short link.","title":"Search"},"sort_by":{"anyOf":[{"enum":["LINK_SORT_FIELD_CREATED_AT","LINK_SORT_FIELD_UPDATED_AT","LINK_SORT_FIELD_SHORTLINK","LINK_SORT_FIELD_NAME","LINK_SORT_FIELD_EVENT_COUNT"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field.","title":"Sort By"},"sort_direction":{"anyOf":[{"enum":["SORT_DIRECTION_ASC","SORT_DIRECTION_DESC"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction (default newest or largest first).","title":"Sort Direction"},"view":{"anyOf":[{"enum":["LINK_VIEW_UNSPECIFIED","LINK_VIEW_DIRECTORY"],"type":"string"},{"type":"null"}],"default":null,"description":"Use LINK_VIEW_DIRECTORY with directory_id to list one folder (or the root when directory_id is empty).","title":"View"},"directory_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Folder id when view is LINK_VIEW_DIRECTORY.","title":"Directory Id"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 100, default 50).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's nextPageToken.","title":"Page Token"}},"title":"list_linksArguments","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_link":{"post":{"operationId":"get_link","summary":"Get one short link by id with name, short link, event count, folder, domain, expiry, fallback and dates. Use for \"Show m","description":"Get one short link by id with name, short link, event count, folder, domain, expiry, fallback and dates. Use for \"Show me details of one Linkbreakers link\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Link id (UUID).","maxLength":200,"title":"Id","type":"string"}},"required":["id"],"title":"get_linkArguments","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_tags":{"post":{"operationId":"list_tags","summary":"List the tags used on links (id, name, dates); search by name. Use for \"Which tags do I use in Linkbreakers\".","description":"List the tags used on links (id, name, dates); search by name. Use for \"Which tags do I use in Linkbreakers\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Match on name or short link.","title":"Search"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 100, default 50).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's nextPageToken.","title":"Page Token"}},"title":"list_tagsArguments","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_custom_domains":{"post":{"operationId":"list_custom_domains","summary":"List the custom domains of the workspace with status, certificate expiry, last check and last error. Use for \"Are my Lin","description":"List the custom domains of the workspace with status, certificate expiry, last check and last error. Use for \"Are my Linkbreakers custom domains active\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"status":{"anyOf":[{"maxLength":50,"type":"string"},{"type":"null"}],"default":null,"description":"Only domains with this status.","title":"Status"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 100, default 50).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's nextPageToken.","title":"Page Token"}},"title":"list_custom_domainsArguments","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_directories":{"post":{"operationId":"list_directories","summary":"List the folders that organise links (name, path, parent), optionally under one parent or recursively. Use for \"How are ","description":"List the folders that organise links (name, path, parent), optionally under one parent or recursively. Use for \"How are my Linkbreakers links organised in folders\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Match on name or short link.","title":"Search"},"parent_directory_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only folders under this parent folder id.","title":"Parent Directory Id"},"include_root":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Include the root folder (default false).","title":"Include Root"},"recursive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"Include nested sub-folders (default false).","title":"Recursive"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 100, default 50).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's nextPageToken.","title":"Page Token"}},"title":"list_directoriesArguments","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_qr_code_templates":{"post":{"operationId":"list_qr_code_templates","summary":"List the workspace QR code templates (name, description, usage count, dates); scope selects own or built-in ones. Use fo","description":"List the workspace QR code templates (name, description, usage count, dates); scope selects own or built-in ones. Use for \"Which QR code templates do I have in Linkbreakers\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Match on name or short link.","title":"Search"},"scope":{"anyOf":[{"maxLength":50,"type":"string"},{"type":"null"}],"default":null,"description":"Which templates to list.","title":"Scope"},"page_size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"Items per page (1 to 100, default 50).","title":"Page Size"},"page_token":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from the previous answer's nextPageToken.","title":"Page Token"}},"title":"list_qr_code_templatesArguments","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_workspace_metrics":{"post":{"operationId":"get_workspace_metrics","summary":"Get workspace totals: links, folders, QR templates, events, monthly events, members and platform credit usage. Use for \"","description":"Get workspace totals: links, folders, QR templates, events, monthly events, members and platform credit usage. Use for \"How big is my Linkbreakers workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_workspace_metricsArguments","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_event_summary":{"post":{"operationId":"get_event_summary","summary":"Get a summary of link events for the workspace or one link in a date range: total events, first and last event time, top","description":"Get a summary of link events for the workspace or one link in a date range: total events, first and last event time, top country, top city, top device type. Use for \"How many clicks did my Linkbreakers links get this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_date":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the range (RFC 3339, for example 2026-10-01T00:00:00Z).","title":"Start Date"},"end_date":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End of the range (RFC 3339).","title":"End Date"},"link_id":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only this link id.","title":"Link Id"}},"title":"get_event_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/get_allowances":{"post":{"operationId":"get_allowances","summary":"Get the plan and its usage allowances (links, domains, members and so on): limit, used, remaining, whether reached and t","description":"Get the plan and its usage allowances (links, domains, members and so on): limit, used, remaining, whether reached and the billing cycle dates. Use for \"How much of my Linkbreakers plan have I used\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_allowancesArguments","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}}}}