{"openapi":"3.1.0","info":{"title":"Planning Center (BYOK) API","version":"0.1.0","description":"Planning Center (BYOK) lets an AI assistant read your own Planning Center data through the Planning Center API with a key you supply (personal access token application ID). Read-only: 12 tools (list_people, get_person, list_donations, list_funds, list_recurring_donations, list_donation_batches, list_groups, list_group_events, list_calendar_event_instances, list_service_types, list_service_plans,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-planningcenter.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-planningcenter/docs"},"termsOfService":"https://connectorbay.com/byok-planningcenter/terms"},"servers":[{"url":"https://byok-planningcenter.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-planningcenter/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_people":{"post":{"operationId":"list_people","summary":"List people records with name, status, membership, grade and dates; search by name, e-mail or phone, or filter by first ","description":"List people records with name, status, membership, grade and dates; search by name, e-mail or phone, or filter by first or last name. Use for \"Find the Planning Center person named Smith\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 100; default 25).","title":"Per Page"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"},"search_name_or_email":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Search text matched against name or e-mail.","title":"Search Name Or Email"},"first_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Exact first name (case-insensitive; end with %25 for prefix match).","title":"First Name"},"last_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Exact last name (case-insensitive; end with %25 for prefix match).","title":"Last Name"},"status":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only profiles with this status.","title":"Status"},"order":{"anyOf":[{"enum":["first_name","-first_name","last_name","-last_name","created_at","-created_at","updated_at","-updated_at","birthdate","-birthdate"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field (people); prefix with a hyphen for descending, for example -created_at.","title":"Order"}},"title":"list_peopleArguments","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_person":{"post":{"operationId":"get_person","summary":"Get one person by id with name, status, membership, birthdate, grade and timestamps. Use for \"Show Planning Center perso","description":"Get one person by id with name, status, membership, birthdate, grade and timestamps. Use for \"Show Planning Center person 13\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"person_id":{"description":"Planning Center person id.","maxLength":200,"title":"Person Id","type":"string"}},"required":["person_id"],"title":"get_personArguments","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_donations":{"post":{"operationId":"list_donations","summary":"List donations with amount in cents, currency, payment method and status, and received and completed dates. Use for \"Wha","description":"List donations with amount in cents, currency, payment method and status, and received and completed dates. Use for \"What donations did Planning Center Giving receive recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 100; default 25).","title":"Per Page"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"},"payment_method":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only this payment method: ach, cash, check or card.","title":"Payment Method"},"order":{"anyOf":[{"enum":["completed_at","-completed_at","received_at","-received_at"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field (donations); prefix with a hyphen for descending, for example -created_at.","title":"Order"}},"title":"list_donationsArguments","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 giving funds with name, description, ledger code, visibility and default flag. Use for \"Which giving funds does Pla","description":"List giving funds with name, description, ledger code, visibility and default flag. Use for \"Which giving funds does Planning Center have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 100; default 25).","title":"Per Page"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Exact fund name.","title":"Name"}},"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_recurring_donations":{"post":{"operationId":"list_recurring_donations","summary":"List recurring gift schedules with amount in cents, schedule, status, last gift and next occurrence. Use for \"Which Plan","description":"List recurring gift schedules with amount in cents, schedule, status, last gift and next occurrence. Use for \"Which Planning Center recurring gifts are active\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 100; default 25).","title":"Per Page"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"},"status":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only schedules with this status.","title":"Status"}},"title":"list_recurring_donationsArguments","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_donation_batches":{"post":{"operationId":"list_donation_batches","summary":"List donation batches with description, status, donation count, total in cents and commit date. Use for \"What donation b","description":"List donation batches with description, status, donation count, total in cents and commit date. Use for \"What donation batches were committed in Planning Center\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 100; default 25).","title":"Per Page"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"},"order":{"anyOf":[{"enum":["committed_at","-committed_at"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field (batches); prefix with a hyphen for descending, for example -created_at.","title":"Order"}},"title":"list_donation_batchesArguments","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_groups":{"post":{"operationId":"list_groups","summary":"List groups with name, description, member count, schedule, listed flag and archive date; filter by name or archive stat","description":"List groups with name, description, member count, schedule, listed flag and archive date; filter by name or archive status. Use for \"Which small groups does Planning Center Groups have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 100; default 25).","title":"Per Page"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Exact group name.","title":"Name"},"archive_status":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Archive filter: not_archived, only or include.","title":"Archive Status"}},"title":"list_groupsArguments","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_group_events":{"post":{"operationId":"list_group_events","summary":"List group meeting events with name, start and end time, canceled flag and visitor count. Use for \"What group events are","description":"List group meeting events with name, start and end time, canceled flag and visitor count. Use for \"What group events are coming up in Planning Center\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 100; default 25).","title":"Per Page"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Exact event name.","title":"Name"},"order":{"anyOf":[{"enum":["starts_at","-starts_at","ends_at","-ends_at"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field (events); prefix with a hyphen for descending, for example -created_at.","title":"Order"}},"title":"list_group_eventsArguments","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_calendar_event_instances":{"post":{"operationId":"list_calendar_event_instances","summary":"List calendar event instances with name, start and end time, location, kind and Church Center link. Use for \"What is on ","description":"List calendar event instances with name, start and end time, location, kind and Church Center link. Use for \"What is on the Planning Center calendar\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 100; default 25).","title":"Per Page"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"},"kind":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only instances of this kind.","title":"Kind"},"order":{"anyOf":[{"enum":["created_at","-created_at"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field (instances); prefix with a hyphen for descending, for example -created_at.","title":"Order"}},"title":"list_calendar_event_instancesArguments","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_service_types":{"post":{"operationId":"list_service_types","summary":"List service types (Planning Center Services) with name, frequency and last plan date. Use for \"What service types does ","description":"List service types (Planning Center Services) with name, frequency and last plan date. Use for \"What service types does Planning Center Services have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 100; default 25).","title":"Per Page"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Exact service type name.","title":"Name"}},"title":"list_service_typesArguments","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_service_plans":{"post":{"operationId":"list_service_plans","summary":"List the plans (services) of one service type with title, dates, series title and counts of items and people. Use for \"W","description":"List the plans (services) of one service type with title, dates, series title and counts of items and people. Use for \"What are the upcoming service plans for service type 123\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"service_type_id":{"description":"Planning Center service type id.","maxLength":200,"title":"Service Type Id","type":"string"},"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 100; default 25).","title":"Per Page"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"},"order":{"anyOf":[{"enum":["created_at","-created_at"],"type":"string"},{"type":"null"}],"default":null,"description":"Sort field (plans); prefix with a hyphen for descending, for example -created_at.","title":"Order"}},"required":["service_type_id"],"title":"list_service_plansArguments","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_checkin_events":{"post":{"operationId":"list_checkin_events","summary":"List check-in events with name, frequency and archive date. Use for \"Which Planning Center check-in events exist\".","description":"List check-in events with name, frequency and archive date. Use for \"Which Planning Center check-in events exist\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"per_page":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many records to return (1 to 100; default 25).","title":"Per Page"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Number of records to skip, for paging.","title":"Offset"},"name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Exact event name.","title":"Name"}},"title":"list_checkin_eventsArguments","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}}}}