{"openapi":"3.1.0","info":{"title":"Open Collective (BYOK) API","version":"0.1.0","description":"Open Collective (BYOK) lets an AI assistant read your own Open Collective data through the Open Collective API with a key you supply (Open Collective personal token). Read-only: 7 tools (search_accounts, find_collectives_by_tag, get_account, list_account_transactions, list_account_expenses, list_account_updates, list_hosted_accounts). The BYOK key travels with each request, is used for that one...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-opencollective.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-opencollective/docs"},"termsOfService":"https://connectorbay.com/byok-opencollective/terms"},"servers":[{"url":"https://byok-opencollective.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-opencollective/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/search_accounts":{"post":{"operationId":"search_accounts","summary":"Search Open Collective accounts (collectives, funds, projects, organizations, individuals) by text. Returns slug, type, ","description":"Search Open Collective accounts (collectives, funds, projects, organizations, individuals) by text. Returns slug, type, description, website, balance and total received. Use for \"Find Open Collective collectives about reforestation\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search_term":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Text to search for in names, descriptions, tags and slugs.","title":"Search Term"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"}},"title":"search_accountsArguments","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/find_collectives_by_tag":{"post":{"operationId":"find_collectives_by_tag","summary":"List collectives, funds and projects that carry a tag such as climate, open-source, education or food, with balance and ","description":"List collectives, funds and projects that carry a tag such as climate, open-source, education or food, with balance and total received. Use for \"Which Open Collective collectives are tagged climate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tag":{"description":"Tag to match, for example 'climate' or 'open source'.","maxLength":60,"title":"Tag","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"}},"required":["tag"],"title":"find_collectives_by_tagArguments","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_account":{"post":{"operationId":"get_account","summary":"Get one account by slug: type, description, website, currency, tags, social links, country, current balance, total recei","description":"Get one account by slug: type, description, website, currency, tags, social links, country, current balance, total received and spent, contributors and contributions counts. Use for \"How much has the babel collective received and what is its balance\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"slug":{"description":"Open Collective account slug, the last part of the profile URL (for example 'babel' for opencollective.com/babel).","maxLength":100,"title":"Slug","type":"string"}},"required":["slug"],"title":"get_accountArguments","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_account_transactions":{"post":{"operationId":"list_account_transactions","summary":"List an account's ledger transactions (newest first): kind (contribution, expense, fee ...), credit or debit, amount, de","description":"List an account's ledger transactions (newest first): kind (contribution, expense, fee ...), credit or debit, amount, description, date and the other party. Use for \"What contributions did the babel collective receive this year\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"slug":{"description":"Open Collective account slug, the last part of the profile URL (for example 'babel' for opencollective.com/babel).","maxLength":100,"title":"Slug","type":"string"},"type":{"anyOf":[{"enum":["CREDIT","DEBIT"],"type":"string"},{"type":"null"}],"default":null,"description":"CREDIT for money in or DEBIT for money out; omit for both.","title":"Type"},"date_from":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records on or after this ISO 8601 date-time, for example 2026-01-01T00:00:00Z.","title":"Date From"},"date_to":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records before this ISO 8601 date-time.","title":"Date To"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"}},"required":["slug"],"title":"list_account_transactionsArguments","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_account_expenses":{"post":{"operationId":"list_account_expenses","summary":"List expense requests paid or pending for an account, with description, type, status, tags, amount and payee; filter by ","description":"List expense requests paid or pending for an account, with description, type, status, tags, amount and payee; filter by type, text and dates. Use for \"What expenses has the babel collective paid recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"slug":{"description":"Open Collective account slug, the last part of the profile URL (for example 'babel' for opencollective.com/babel).","maxLength":100,"title":"Slug","type":"string"},"type":{"anyOf":[{"enum":["INVOICE","RECEIPT","FUNDING_REQUEST","GRANT","UNCLASSIFIED","CHARGE"],"type":"string"},{"type":"null"}],"default":null,"description":"Expense type: INVOICE, RECEIPT, FUNDING_REQUEST, GRANT, UNCLASSIFIED or CHARGE; omit for all.","title":"Type"},"search_term":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Text to search for in names, descriptions, tags and slugs.","title":"Search Term"},"date_from":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records on or after this ISO 8601 date-time, for example 2026-01-01T00:00:00Z.","title":"Date From"},"date_to":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records before this ISO 8601 date-time.","title":"Date To"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"}},"required":["slug"],"title":"list_account_expensesArguments","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_account_updates":{"post":{"operationId":"list_account_updates","summary":"List the published updates (news posts) of an account with title, summary, tags and publication date. Use for \"What rece","description":"List the published updates (news posts) of an account with title, summary, tags and publication date. Use for \"What recent updates did the babel collective publish\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"slug":{"description":"Open Collective account slug, the last part of the profile URL (for example 'babel' for opencollective.com/babel).","maxLength":100,"title":"Slug","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"}},"required":["slug"],"title":"list_account_updatesArguments","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_hosted_accounts":{"post":{"operationId":"list_hosted_accounts","summary":"For a fiscal host account, list the collectives it hosts with type, active flag and balance, plus the host fee percent a","description":"For a fiscal host account, list the collectives it hosts with type, active flag and balance, plus the host fee percent and total hosted collectives. Use for \"Which collectives does the opensource fiscal host manage\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"slug":{"description":"Slug of the fiscal host account, for example 'opensource'.","maxLength":100,"title":"Slug","type":"string"},"search_term":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Text to search for in names, descriptions, tags and slugs.","title":"Search Term"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many records to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"}},"required":["slug"],"title":"list_hosted_accountsArguments","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}}}}