{"openapi":"3.1.0","info":{"title":"Bloomerang (BYOK) API","version":"0.1.0","description":"Bloomerang (BYOK) lets an AI assistant read your own Bloomerang data through the Bloomerang API with a key you supply (Bloomerang CRM private API key). Read-only: 11 tools (get_organization, list_constituents, search_constituents, get_constituent, list_transactions, list_designations, list_funds, list_campaigns, list_appeals, list_interactions, list_tasks). 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-bloomerang.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-bloomerang/docs"},"termsOfService":"https://connectorbay.com/byok-bloomerang/terms"},"servers":[{"url":"https://byok-bloomerang.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-bloomerang/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_organization":{"post":{"operationId":"get_organization","summary":"Show the Bloomerang database the key belongs to: organization name, accounting integration and fiscal year start. Use fo","description":"Show the Bloomerang database the key belongs to: organization name, accounting integration and fiscal year start. Use for \"Which Bloomerang organization is this key for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_organizationArguments","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_constituents":{"post":{"operationId":"list_constituents","summary":"List constituents (individuals and organizations) with name, type, status, employer, engagement score and primary e-mail","description":"List constituents (individuals and organizations) with name, type, status, employer, engagement score and primary e-mail and city. Use for \"Who are my newest Bloomerang constituents\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Skip"},"take":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 50).","title":"Take"},"type":{"anyOf":[{"enum":["Individual","Organization"],"type":"string"},{"type":"null"}],"default":null,"description":"Individual or Organization.","title":"Type"},"order_by":{"anyOf":[{"enum":["Id","CreatedDate","LastModifiedDate"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by Id, CreatedDate or LastModifiedDate.","title":"Order By"},"order_direction":{"anyOf":[{"enum":["Asc","Desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Asc or Desc.","title":"Order Direction"},"last_modified":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records modified since this date or time.","title":"Last Modified"}},"title":"list_constituentsArguments","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/search_constituents":{"post":{"operationId":"search_constituents","summary":"Search constituents and households by name or other text. Use for \"Find the Bloomerang donor named Smith\".","description":"Search constituents and households by name or other text. Use for \"Find the Bloomerang donor named Smith\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"description":"Text to search for.","maxLength":100,"title":"Search","type":"string"},"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Skip"},"take":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 50).","title":"Take"},"type":{"anyOf":[{"enum":["Individual","Organization","Household"],"type":"string"},{"type":"null"}],"default":null,"description":"Individual, Organization or Household.","title":"Type"}},"required":["search"],"title":"search_constituentsArguments","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_constituent":{"post":{"operationId":"get_constituent","summary":"Get one constituent by id with names, status, employer, engagement score, primary address, e-mail and phone. Use for \"Sh","description":"Get one constituent by id with names, status, employer, engagement score, primary address, e-mail and phone. Use for \"Show Bloomerang constituent 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"constituent_id":{"description":"Bloomerang constituent id.","title":"Constituent Id","type":"integer"}},"required":["constituent_id"],"title":"get_constituentArguments","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_transactions":{"post":{"operationId":"list_transactions","summary":"List financial transactions (donations, pledges, recurring) with account, date, amount, payment method and refund flag; ","description":"List financial transactions (donations, pledges, recurring) with account, date, amount, payment method and refund flag; filter by account, type or amount range. Use for \"What gifts did Bloomerang record this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Skip"},"take":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 50).","title":"Take"},"account_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only transactions of this constituent account id.","title":"Account Id"},"min_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Only amounts of at least this value.","title":"Min Amount"},"max_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null,"description":"Only amounts up to this value.","title":"Max Amount"},"order_by":{"anyOf":[{"enum":["Amount","CreatedDate","Date","LastModifiedDate"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by Amount, CreatedDate, Date or LastModifiedDate.","title":"Order By"},"order_direction":{"anyOf":[{"enum":["Asc","Desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Asc or Desc.","title":"Order Direction"},"last_modified":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records modified since this date or time.","title":"Last Modified"}},"title":"list_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_designations":{"post":{"operationId":"list_designations","summary":"List transaction designations (the fund, campaign and appeal split of each gift) with amount, acknowledgement status and","description":"List transaction designations (the fund, campaign and appeal split of each gift) with amount, acknowledgement status and type (donation or pledge). Use for \"How were Bloomerang gifts split across funds and campaigns\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Skip"},"take":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 50).","title":"Take"},"transaction_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only designations of this transaction id.","title":"Transaction Id"},"order_by":{"anyOf":[{"enum":["CreatedDate","Date","LastModifiedDate"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by CreatedDate, Date or LastModifiedDate.","title":"Order By"},"order_direction":{"anyOf":[{"enum":["Asc","Desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Asc or Desc.","title":"Order Direction"}},"title":"list_designationsArguments","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_funds":{"post":{"operationId":"list_funds","summary":"List funds with name, default and active flags. Use for \"What funds exist in Bloomerang\".","description":"List funds with name, default and active flags. Use for \"What funds exist in Bloomerang\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Skip"},"take":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 50).","title":"Take"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active funds only.","title":"Is Active"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Text to match in the fund name.","title":"Search"}},"title":"list_fundsArguments","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_campaigns":{"post":{"operationId":"list_campaigns","summary":"List campaigns with name, start and end date, goal, amount raised and active flag. Use for \"How are my Bloomerang campai","description":"List campaigns with name, start and end date, goal, amount raised and active flag. Use for \"How are my Bloomerang campaigns doing against their goals\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Skip"},"take":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 50).","title":"Take"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active campaigns only.","title":"Is Active"},"has_goal":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for campaigns that have a goal.","title":"Has Goal"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Text to match in the campaign name.","title":"Search"}},"title":"list_campaignsArguments","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_appeals":{"post":{"operationId":"list_appeals","summary":"List appeals with name and active flag. Use for \"Which appeals does Bloomerang track\".","description":"List appeals with name and active flag. Use for \"Which appeals does Bloomerang track\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Skip"},"take":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 50).","title":"Take"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for active appeals only.","title":"Is Active"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Text to match in the appeal name.","title":"Search"}},"title":"list_appealsArguments","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_interactions":{"post":{"operationId":"list_interactions","summary":"List interactions (calls, e-mails, meetings) with date, channel, purpose, subject and note; filter by constituent id. Us","description":"List interactions (calls, e-mails, meetings) with date, channel, purpose, subject and note; filter by constituent id. Use for \"What interactions has Bloomerang logged for constituent 12345\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Skip"},"take":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 50).","title":"Take"},"constituent":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only interactions of this constituent id.","title":"Constituent"},"channel":{"anyOf":[{"enum":["Email","MassEmail","Phone","TextMessage","Mail","InPerson"],"type":"string"},{"type":"null"}],"default":null,"description":"Channel.","title":"Channel"},"order_by":{"anyOf":[{"enum":["CreatedDate","Date","LastModifiedDate"],"type":"string"},{"type":"null"}],"default":null,"description":"Order by CreatedDate, Date or LastModifiedDate.","title":"Order By"},"order_direction":{"anyOf":[{"enum":["Asc","Desc"],"type":"string"},{"type":"null"}],"default":null,"description":"Asc or Desc.","title":"Order Direction"}},"title":"list_interactionsArguments","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_tasks":{"post":{"operationId":"list_tasks","summary":"List follow-up tasks with constituent, status, due date, subject and note; filter by status or due date. Use for \"Which ","description":"List follow-up tasks with constituent, status, due date, subject and note; filter by status or due date. Use for \"Which Bloomerang follow-up tasks are due\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"skip":{"anyOf":[{"maximum":1000000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Skip"},"take":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 50).","title":"Take"},"status":{"anyOf":[{"enum":["Active","Complete","Archived"],"type":"string"},{"type":"null"}],"default":null,"description":"Task status.","title":"Status"},"max_due_date":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only tasks due on or before this date, YYYY-MM-DD.","title":"Max Due Date"},"constituent":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only tasks of this constituent id.","title":"Constituent"}},"title":"list_tasksArguments","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}}}}