ChMeetings
BUSINESS · TASKS
People, families, groups, events, and attendance in the account they connected.
Acts as the person, not as itself
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Credentials never touch the agent
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Every call on the record
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
What an agent can do
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
chmeetings_delete_api_v1_contributions_batches_by_idWRITEDelete a batch if no contributions are associated via DELETE /api/v1/contributions/batches/{id}
chmeetings_delete_api_v1_contributions_by_idWRITEDelete a contribution by ID. via DELETE /api/v1/contributions/{id}
chmeetings_delete_api_v1_contributions_funds_by_idWRITEDelete a contribution fund and move all its contributions to another fund. The move_to_fund_id must be provided to specify where to move existing contributions in case of deleted fund has contributions. via DELETE /api/v1/contributions/funds/{id}
chmeetings_delete_api_v1_contributions_payment_methods_by_idWRITEDelete a custom payment method and move all its contributions to another payment method. System payment methods cannot be deleted. The move_to_payment_method_id must be provided to specify where to move existing contributions in case of deleted payment method has contributions. via DELETE /api/v1/contributions/payment-methods/{id}
chmeetings_delete_api_v1_families_by_idWRITEDelete a family and remove family relationships from all members via DELETE /api/v1/families/{id}
chmeetings_delete_api_v1_families_by_id_members_by_person_idWRITERemove a member from a family (family must retain at least 2 members) via DELETE /api/v1/families/{id}/members/{person_id}
chmeetings_delete_api_v1_groups_by_group_idWRITEDeletes a group and removes all of its memberships and group-leader assignments. Returns 404 when the group does not exist, and 400 when the group is still assigned to one or more upcoming events — remove it from those events first. via DELETE /api/v1/groups/{group_id}
chmeetings_delete_api_v1_groups_by_group_id_memberships_by_person_idWRITERemoves a person from a group. Returns 200 if removed, 404 if not found. via DELETE /api/v1/groups/{group_id}/memberships/{person_id}
chmeetings_delete_api_v1_integrations_webhooks_by_idWRITEOnly subscriptions the church owns can be deleted. One managed by Zapier answers `403` - turn it off in that platform instead, which tears the subscription down through its own unsubscribe. via DELETE /api/v1/integrations/webhooks/{id}
chmeetings_delete_api_v1_occurrences_by_occurrence_id_check_ins_by_person_idWRITE- Cancels a check-in (removes the attendance record, including its check-out if any). - Returns 404 when the person has no active check-in on this occurrence; offline clients replaying a queue should treat 404 as already done. via DELETE /api/v1/occurrences/{occurrence_id}/check-ins/{person_id}
chmeetings_delete_api_v1_occurrences_by_occurrence_id_check_outs_by_person_idWRITE- Cancels a check-out (clears checked_out_at; the person remains checked in). - Returns 404 when the person is not checked out of this occurrence; offline clients replaying a queue should treat 404 as already done. via DELETE /api/v1/occurrences/{occurrence_id}/check-outs/{person_id}
chmeetings_delete_api_v1_organizations_by_organization_id_groups_by_group_idWRITEDeletes a group within an organization and removes all of its memberships and group-leader assignments. Returns 404 when the group does not exist in that organization, and 400 when the group is still assigned to one or more upcoming events — remove it from those events first. via DELETE /api/v1/organizations/{organization_id}/groups/{group_id}
chmeetings_delete_api_v1_organizations_by_organization_id_groups_by_group_id_memberships_by_person_idWRITERemoves a person from a group within an organization. Returns 200 if removed, 404 if not found. via DELETE /api/v1/organizations/{organization_id}/groups/{group_id}/memberships/{person_id}
chmeetings_delete_api_v1_organizations_by_organization_id_occurrences_by_occurrence_id_check_ins_by_person_idWRITE- Cancels a check-in (removes the attendance record, including its check-out if any). - Returns 404 when the person has no active check-in on this occurrence; offline clients replaying a queue should treat 404 as already done. via DELETE /api/v1/organizations/{organization_id}/occurrences/{occurrence_id}/check-ins/{person_id}
chmeetings_delete_api_v1_organizations_by_organization_id_occurrences_by_occurrence_id_check_outs_by_person_idWRITE- Cancels a check-out (clears checked_out_at; the person remains checked in). - Returns 404 when the person is not checked out of this occurrence; offline clients replaying a queue should treat 404 as already done. via DELETE /api/v1/organizations/{organization_id}/occurrences/{occurrence_id}/check-outs/{person_id}
chmeetings_delete_api_v1_organizations_by_organization_id_people_by_person_idWRITERemoves a person from an organization. The person stays in the account — to delete them entirely, use `DELETE /api/v1/people/{person_id}`. Removing someone from the account itself returns 400. Removing them from their main church is allowed. Repeating the call on a person who is no longer a member returns 404; retry logic can treat that as success. An organization outside the API key's tree returns 400, not 404. via DELETE /api/v1/organizations/{organization_id}/people/{person_id}
chmeetings_delete_api_v1_organizations_by_organization_id_posts_by_post_idWRITEDelete organization post by its Id via DELETE /api/v1/organizations/{organization_id}/posts/{post_id}
chmeetings_delete_api_v1_organizations_by_organization_id_posts_by_post_id_imageWRITERemoves the post's image. Returns 404 when the post has no image. via DELETE /api/v1/organizations/{organization_id}/posts/{post_id}/image
chmeetings_delete_api_v1_people_by_idWRITEDelete person by Id via DELETE /api/v1/people/{id}
chmeetings_delete_api_v1_people_by_person_id_notes_by_note_idWRITEDelete a member note. via DELETE /api/v1/people/{person_id}/notes/{note_id}
chmeetings_delete_api_v1_posts_by_idWRITEDelete a post by its Id via DELETE /api/v1/posts/{id}
chmeetings_delete_api_v1_posts_by_post_id_imageWRITERemoves the post's image. Returns 404 when the post has no image. via DELETE /api/v1/posts/{post_id}/image
chmeetings_get_api_v1_accounting_accountsREADGet the ledger's accounts (bank registers) with paging, ordered by display order then name. - Account types are `asset` and `liability`; income/expense classification lives on categories, not accounts. - Available filters: `type`, `include_archived` (default false). - `include=balance` adds each account's current running balance (income minus expenses across all non-voided transactions, beginning balances included). via GET /api/v1/accounting/accounts
chmeetings_get_api_v1_accounting_accounts_by_account_idREADGets a single ledger account by its ID. Returns 404 when the account does not exist. `include=balance` adds the account's current running balance (voided transactions excluded). via GET /api/v1/accounting/accounts/{account_id}
chmeetings_get_api_v1_accounting_categoriesREADGet the income/expense categories with paging, ordered by type then name. - Categories are a flat list; rebuild the hierarchy with `parent_category_id` (at most two levels). - Available filters: `type` (income|expense), `include_archived` (default false), `search` (name contains). via GET /api/v1/accounting/categories
chmeetings_get_api_v1_accounting_categories_by_category_idREADGets a single income/expense category by its ID. Returns 404 when the category does not exist. via GET /api/v1/accounting/categories/{category_id}
chmeetings_get_api_v1_accounting_fundsREADGet the ledger's funds (cost centers, e.g. General Fund, Missions) with paging, ordered by name. These are GL funds, not the giving funds under /contributions/funds. - Available filters: `include_archived` (default false). - `include=balance` adds each fund's net balance across all accounts (voided transactions excluded). via GET /api/v1/accounting/funds
chmeetings_get_api_v1_accounting_funds_by_fund_idREADGets a single GL fund by its ID. Returns 404 when the fund does not exist. `include=balance` adds the fund's net balance across all accounts. via GET /api/v1/accounting/funds/{fund_id}
chmeetings_get_api_v1_accounting_payeesREADGet the payee (vendor) master list with paging, ordered by name. - Available filters: `search` (name contains), `is_1099_eligible`. - Tax IDs are never exposed through the API. via GET /api/v1/accounting/payees
chmeetings_get_api_v1_accounting_payees_by_payee_idREADGets a single payee by its ID. Returns 404 when the payee does not exist. via GET /api/v1/accounting/payees/{payee_id}
chmeetings_get_api_v1_accounting_transactionsREADGet ledger transactions with their split lines, paged, newest first (date, then ID descending). - Amounts are positive; the direction comes from `type` (signed value = income ? +amount : -amount). The one exception is fund transfers, whose source-fund line is negative (header amount 0). - An account-to-account transfer is recorded as two transactions, income on the receiving account and expense on the sending one; a fund transfer is one transaction with `is_fund_transfer: true` and offsetting lines. Transfer lines carry no category. - Voided transactions are hidden by default (`include_voided`); beginning-balance rows are included by default (`include_beginning_balances`) and flagged per row. - Filter by register, dates, type, categories, funds, payee, check number, text, and amount range. - This list doubles as the category/fund/payee ledger drill-down via `category_ids`/`fund_ids`/`payee_id`. via GET /api/v1/accounting/transactions
chmeetings_get_api_v1_accounting_transactions_by_transaction_idREADGets a single ledger transaction by its ID, including its split lines. Returns 404 when the transaction does not exist. Voided and beginning-balance rows are returned. via GET /api/v1/accounting/transactions/{transaction_id}
chmeetings_get_api_v1_address_citiesREADRetrieves a paged list of cities for a specified state, allowing for optional search text to filter results. via GET /api/v1/address/cities
chmeetings_get_api_v1_address_countriesREADRetrieves a paged list of countries, allowing for optional search text to filter results. via GET /api/v1/address/countries
chmeetings_get_api_v1_address_statesREADRetrieves a paged list of states for a specified country, allowing for optional search text to filter results. via GET /api/v1/address/states
chmeetings_get_api_v1_campaignsREADGet all campaigns with paging via GET /api/v1/campaigns
chmeetings_get_api_v1_campaigns_by_id_pledgesREADGet all pledges for a campaign with paging via GET /api/v1/campaigns/{id}/pledges
chmeetings_get_api_v1_contributionsREAD- Get all contributions with paging and filtering options. - Available filters: person_id, start_date, end_date, reference_id, batch_id. - Filters are combined with AND; omit a filter to leave it unapplied. - Supports pagination via page and page_size. via GET /api/v1/contributions
chmeetings_get_api_v1_contributions_batchesREADGet all contribution batches with paging via GET /api/v1/contributions/batches
chmeetings_get_api_v1_contributions_batches_by_idREADGet a batch by Id via GET /api/v1/contributions/batches/{id}
chmeetings_get_api_v1_contributions_fundsREAD- Get all contribution funds with paging and filtering options. - Available filters: search_text, is_tax_deductible. - Supports pagination via page and page_size. via GET /api/v1/contributions/funds
chmeetings_get_api_v1_contributions_funds_by_idREADGet detailed information about a specific contribution fund by its ID via GET /api/v1/contributions/funds/{id}
chmeetings_get_api_v1_contributions_members_no_envelopesREADGet all members without envelopes with paging and filtering options via GET /api/v1/contributions/members/no-envelopes
chmeetings_get_api_v1_contributions_payment_methodsREAD- Get all payment methods with paging and filtering options. - Available filters: search_text. - Supports pagination via page and page_size. via GET /api/v1/contributions/payment-methods
chmeetings_get_api_v1_contributions_payment_methods_by_idREADGet detailed information about a specific payment method by its ID via GET /api/v1/contributions/payment-methods/{id}
chmeetings_get_api_v1_eventsREADGet events within a date range with pagination. Each event includes a `visibility` value ("internal", "members", or "public") and an `image_url` (CDN URL of the event image, or null when no image is set). via GET /api/v1/events
chmeetings_get_api_v1_events_by_event_idREADReturns a single event by its unique identifier. Response includes `visibility` ("internal", "members", or "public") and `image_url` (CDN URL of the event image, or null when no image is set). via GET /api/v1/events/{event_id}
chmeetings_get_api_v1_events_by_event_id_occurrencesREADReturns both materialized and virtual (computed) occurrences for a given event. Each occurrence includes an `image_url` (CDN URL of the occurrence image, or null when no image is set). For materialized occurrences the schedule's own image is used when set; otherwise the parent event's image is returned. For virtual occurrences the parent event's image is always returned. via GET /api/v1/events/{event_id}/occurrences
chmeetings_get_api_v1_events_by_event_id_statisticsREADReturns a per-occurrence attendance summary plus a period rollup for every materialized occurrence of the event with Day within [from, to]. Pass include=groups to add a per-group breakdown inside each occurrence. via GET /api/v1/events/{event_id}/statistics
chmeetings_get_api_v1_familiesREADGet all families with optional search and paging via GET /api/v1/families
chmeetings_get_api_v1_families_by_idREADGet a specific family by ID via GET /api/v1/families/{id}
chmeetings_get_api_v1_families_family_rolesREADGet family roles via GET /api/v1/families/family-roles
chmeetings_get_api_v1_follow_upsREADGet follow-ups (pastoral follow-up tasks) with paging and filtering options. - A follow-up is a task to follow up with a specific person, optionally assigned to one or more people (`assignees`) and categorized by a follow-up action. - Filters are combined with AND; omit a filter to leave it unapplied. An unknown `person_id`/`assignee_id`/`action_id` yields an empty page, not an error. - Results are sorted by scheduled date descending. - All dates and times are church-local wall-clock: `date` is the scheduled date, `completed_on` is when the follow-up was marked done, `created_on`/`updated_on` are record audit stamps. via GET /api/v1/follow-ups
chmeetings_get_api_v1_follow_ups_actionsREADGet the follow-up actions (categories such as "First Visit") available to this organization, sorted by name, unpaged. via GET /api/v1/follow-ups/actions
chmeetings_get_api_v1_follow_ups_by_follow_up_idREADReturns a single follow-up by its unique identifier. All dates and times are church-local wall-clock: `date` is the scheduled date, `completed_on` is when the follow-up was marked done. via GET /api/v1/follow-ups/{follow_up_id}
chmeetings_get_api_v1_groupsREADGet all groups, ordered by name. Optionally filter by name with `search_text`. Omitting it returns every group - this response is not paged. via GET /api/v1/groups
chmeetings_get_api_v1_groups_by_group_idREADGets a single group by its id. Returns 404 when the group does not exist. via GET /api/v1/groups/{group_id}
chmeetings_get_api_v1_groups_peopleREADGet all people in groups with filtering options. - group_ids parameter can accept a single group ID or multiple group IDs separated by commas (e.g., "123" or "123,456,789"). via GET /api/v1/groups/people
chmeetings_get_api_v1_integrations_webhooksREADReturns every webhook subscription for the church, including those created by Zapier. The `app` field says which integration owns each one; `secret` is returned only for subscriptions the church owns (`app` = `custom`). via GET /api/v1/integrations/webhooks
chmeetings_get_api_v1_integrations_webhooks_by_idREADGet a webhook subscription by ID via GET /api/v1/integrations/webhooks/{id}
chmeetings_get_api_v1_integrations_webhooks_eventsREADEvery event a subscription can listen for. Send `event_name` in the `event_names` of a create or update; it is also the value delivered as `event_name` on the payload. `category` is the domain the event belongs to - People, Contributions, Contribution Funds or Attendance. via GET /api/v1/integrations/webhooks/events
chmeetings_get_api_v1_occurrences_by_occurrence_idREADResolves a materialized (numeric ID) or virtual occurrence. via GET /api/v1/occurrences/{occurrence_id}
chmeetings_get_api_v1_occurrences_by_occurrence_id_attendanceREADReturns the full attendance list for occurrence, with optional status filter and pagination. via GET /api/v1/occurrences/{occurrence_id}/attendance
chmeetings_get_api_v1_occurrences_by_occurrence_id_attendance_summaryREADReturns attendance statistics for occurrence. via GET /api/v1/occurrences/{occurrence_id}/attendance/summary
chmeetings_get_api_v1_organizationsREADReturns a paginated list of organizations accessible by the current API key. Scope depends on subscription: - Diocese: Diocese, Churches, Ministries. - Church: Church and its Ministries. Ordered by hierarchy, then by name. via GET /api/v1/organizations
chmeetings_get_api_v1_organizations_by_organization_idREADRetrieves the details of a specific organization by its ID. via GET /api/v1/organizations/{organization_id}
chmeetings_get_api_v1_organizations_by_organization_id_accounting_accountsREADGet the ledger's accounts (bank registers) of an organization with paging. Same filters as the non-organization endpoint, scoped to the requested organization. via GET /api/v1/organizations/{organization_id}/accounting/accounts
chmeetings_get_api_v1_organizations_by_organization_id_accounting_accounts_by_account_idREADGets a single ledger account by its ID within an organization. Returns 404 when the account does not exist in that organization. via GET /api/v1/organizations/{organization_id}/accounting/accounts/{account_id}
chmeetings_get_api_v1_organizations_by_organization_id_accounting_categoriesREADGet the income/expense categories of an organization with paging. Same filters as the non-organization endpoint, scoped to the requested organization. via GET /api/v1/organizations/{organization_id}/accounting/categories
chmeetings_get_api_v1_organizations_by_organization_id_accounting_categories_by_category_idREADGets a single income/expense category by its ID within an organization. Returns 404 when the category does not exist in that organization. via GET /api/v1/organizations/{organization_id}/accounting/categories/{category_id}
chmeetings_get_api_v1_organizations_by_organization_id_accounting_fundsREADGet the GL funds of an organization with paging. Same filters as the non-organization endpoint, scoped to the requested organization. via GET /api/v1/organizations/{organization_id}/accounting/funds
chmeetings_get_api_v1_organizations_by_organization_id_accounting_funds_by_fund_idREADGets a single GL fund by its ID within an organization. Returns 404 when the fund does not exist in that organization. via GET /api/v1/organizations/{organization_id}/accounting/funds/{fund_id}
chmeetings_get_api_v1_organizations_by_organization_id_accounting_payeesREADGet the payee (vendor) master list of an organization with paging. Same filters as the non-organization endpoint, scoped to the requested organization. via GET /api/v1/organizations/{organization_id}/accounting/payees
chmeetings_get_api_v1_organizations_by_organization_id_accounting_payees_by_payee_idREADGets a single payee by its ID within an organization. Returns 404 when the payee does not exist in that organization. via GET /api/v1/organizations/{organization_id}/accounting/payees/{payee_id}
chmeetings_get_api_v1_organizations_by_organization_id_accounting_transactionsREADGet the ledger transactions of an organization with their split lines, paged, newest first. Same filters as the non-organization endpoint, scoped to the requested organization. via GET /api/v1/organizations/{organization_id}/accounting/transactions
chmeetings_get_api_v1_organizations_by_organization_id_accounting_transactions_by_transaction_idREADGets a single ledger transaction by its ID within an organization, including its split lines. Returns 404 when the transaction does not exist in that organization. via GET /api/v1/organizations/{organization_id}/accounting/transactions/{transaction_id}
chmeetings_get_api_v1_organizations_by_organization_id_eventsREADGet events in organization within a date range with pagination. Each event includes a `visibility` value ("internal", "members", or "public") and an `image_url` (CDN URL of the event image, or null when no image is set). via GET /api/v1/organizations/{organization_id}/events
chmeetings_get_api_v1_organizations_by_organization_id_events_by_event_idREADReturns a single event by its unique identifier within the organization. Response includes `visibility` ("internal", "members", or "public") and `image_url` (CDN URL of the event image, or null when no image is set). via GET /api/v1/organizations/{organization_id}/events/{event_id}
chmeetings_get_api_v1_organizations_by_organization_id_events_by_event_id_occurrencesREADReturns both materialized and virtual (computed) occurrences for a given event within the organization. Each occurrence includes an `image_url` (CDN URL of the occurrence image, or null when no image is set). For materialized occurrences the schedule's own image is used when set; otherwise the parent event's image is returned. For virtual occurrences the parent event's image is always returned. via GET /api/v1/organizations/{organization_id}/events/{event_id}/occurrences
chmeetings_get_api_v1_organizations_by_organization_id_events_by_event_id_statisticsREADSame as GET /events/{event_id}/statistics, scoped to the given organization. via GET /api/v1/organizations/{organization_id}/events/{event_id}/statistics
chmeetings_get_api_v1_organizations_by_organization_id_follow_upsREADGet follow-ups (pastoral follow-up tasks) in the organization with paging and filtering options. - A follow-up is a task to follow up with a specific person, optionally assigned to one or more people (`assignees`) and categorized by a follow-up action. - Filters are combined with AND; omit a filter to leave it unapplied. An unknown `person_id`/`assignee_id`/`action_id` yields an empty page, not an error. - Results are sorted by scheduled date descending. - All dates and times are church-local wall-clock: `date` is the scheduled date, `completed_on` is when the follow-up was marked done, `created_on`/`updated_on` are record audit stamps. via GET /api/v1/organizations/{organization_id}/follow-ups
chmeetings_get_api_v1_organizations_by_organization_id_follow_ups_actionsREADGet the follow-up actions (categories) available to the organization, sorted by name, unpaged. via GET /api/v1/organizations/{organization_id}/follow-ups/actions
chmeetings_get_api_v1_organizations_by_organization_id_follow_ups_by_follow_up_idREADReturns a single follow-up by its unique identifier within the organization. All dates and times are church-local wall-clock: `date` is the scheduled date, `completed_on` is when the follow-up was marked done. via GET /api/v1/organizations/{organization_id}/follow-ups/{follow_up_id}
chmeetings_get_api_v1_organizations_by_organization_id_groupsREADGet groups in organization with paging and search options. via GET /api/v1/organizations/{organization_id}/groups
chmeetings_get_api_v1_organizations_by_organization_id_groups_by_group_idREADGets a single group by its id within an organization. Returns 404 when the group does not exist in that organization. via GET /api/v1/organizations/{organization_id}/groups/{group_id}
chmeetings_get_api_v1_organizations_by_organization_id_groups_by_group_id_membershipsREADRetrieves all people of a specific group within an organization with filtering and pagination. via GET /api/v1/organizations/{organization_id}/groups/{group_id}/memberships
chmeetings_get_api_v1_organizations_by_organization_id_occurrences_by_occurrence_idREADResolves a materialized (numeric ID) or virtual occurrence within the organization. via GET /api/v1/organizations/{organization_id}/occurrences/{occurrence_id}
chmeetings_get_api_v1_organizations_by_organization_id_occurrences_by_occurrence_id_attendanceREADReturns the full attendance list for occurrence within the organization, with optional status filter and pagination. via GET /api/v1/organizations/{organization_id}/occurrences/{occurrence_id}/attendance
chmeetings_get_api_v1_organizations_by_organization_id_occurrences_by_occurrence_id_attendance_summaryREADReturns attendance statistics for an occurrence within the organization. via GET /api/v1/organizations/{organization_id}/occurrences/{occurrence_id}/attendance/summary
chmeetings_get_api_v1_organizations_by_organization_id_peopleREADRetrieves all people belonging to a specific organization with filtering and pagination. The example response shows every optional expansion. Each appears only when asked for: `organizations` with `include_organizations=true` and `groups` with `include_groups=true`. When an expansion is requested and the person has nothing to show, the key is present with an empty list; when it is not requested the key is absent entirely. The remaining fields depend on the account's profile-field configuration, so a field the account has disabled is omitted rather than returned as null. via GET /api/v1/organizations/{organization_id}/people
chmeetings_get_api_v1_organizations_by_organization_id_postsREADGet all organization posts with paging and filtering options. Available filters: status (draft/published), start_date, end_date. Supports pagination via page and page_size. Each post includes an `image_url` (CDN URL of the post image, or null when no image is set). via GET /api/v1/organizations/{organization_id}/posts
chmeetings_get_api_v1_organizations_by_organization_id_posts_by_post_idREADGet a single organization post by its Id. Response includes an `image_url` (CDN URL of the post image, or null when no image is set). via GET /api/v1/organizations/{organization_id}/posts/{post_id}
chmeetings_get_api_v1_organizations_by_organization_id_posts_by_post_id_commentsREADGet all organization comments for a specific post with pagination support. via GET /api/v1/organizations/{organization_id}/posts/{post_id}/comments
chmeetings_get_api_v1_organizations_by_organization_id_posts_by_post_id_likesREADGet all organization likes for a specific post with pagination support. via GET /api/v1/organizations/{organization_id}/posts/{post_id}/likes
chmeetings_get_api_v1_organizations_by_organization_id_posts_categoriesREADGet all organization post categories with pagination support. via GET /api/v1/organizations/{organization_id}/posts/categories
chmeetings_get_api_v1_peopleREADGet all people with paging and filtering options The example response shows every optional expansion. Each appears only when asked for: `organizations` with `include_organizations=true` and `groups` with `include_groups=true`. When an expansion is requested and the person has nothing to show, the key is present with an empty list; when it is not requested the key is absent entirely. The remaining fields depend on the account's profile-field configuration, so a field the account has disabled is omitted rather than returned as null. via GET /api/v1/people
chmeetings_get_api_v1_people_by_idREADGet person by Id via GET /api/v1/people/{id}
chmeetings_get_api_v1_people_by_person_id_notesREADRetrieve all public notes for a specific person with paging. via GET /api/v1/people/{person_id}/notes
chmeetings_get_api_v1_people_by_person_id_notes_by_note_idREADRetrieve member note by id. via GET /api/v1/people/{person_id}/notes/{note_id}
chmeetings_get_api_v1_people_by_person_id_organizationsREADReturns all organizations (diocese, church, ministry) a person belongs to within the account scope, with paging. Main church entries are returned first. via GET /api/v1/people/{person_id}/organizations
chmeetings_get_api_v1_people_fieldsREADGet all member fields via GET /api/v1/people/fields
chmeetings_get_api_v1_people_gendersREADGet all Genders via GET /api/v1/people/genders
chmeetings_get_api_v1_people_grade_valuesREADGet all Grade Values via GET /api/v1/people/grade-values
chmeetings_get_api_v1_people_social_statusesREADGet all Social Statuses via GET /api/v1/people/social-statuses
chmeetings_get_api_v1_postsREADGet all posts with paging and filtering options. Available filters: status (draft/published), start_date, end_date. Supports pagination via page and page_size. Each post includes an `image_url` (CDN URL of the post image, or null when no image is set). via GET /api/v1/posts
chmeetings_get_api_v1_posts_by_idREADGet a single post by its Id. Response includes an `image_url` (CDN URL of the post image, or null when no image is set). via GET /api/v1/posts/{id}
chmeetings_get_api_v1_posts_by_post_id_commentsREADGet all comments for a specific post with pagination support. via GET /api/v1/posts/{post_id}/comments
chmeetings_get_api_v1_posts_by_post_id_likesREADGet all likes for a specific post with pagination support. via GET /api/v1/posts/{post_id}/likes
chmeetings_get_api_v1_posts_categoriesREADGet all post categories with pagination support. via GET /api/v1/posts/categories
chmeetings_patch_api_v1_families_by_id_members_by_person_idWRITEChange a family member's role via PATCH /api/v1/families/{id}/members/{person_id}
chmeetings_post_api_v1_contributionsWRITECreate a new contribution. Send a unique reference_id (idempotency key) with each contribution: posting the same reference_id again is rejected as a duplicate, which makes retries safe. via POST /api/v1/contributions
chmeetings_post_api_v1_contributions_batchesWRITECreate a new batch via POST /api/v1/contributions/batches
chmeetings_post_api_v1_contributions_batches_by_id_closeWRITEClose a contribution batch to prevent further contributions from being added via POST /api/v1/contributions/batches/{id}/close
chmeetings_post_api_v1_contributions_batches_by_id_reopenWRITEReopen a contribution batch to allow contributions to be added again via POST /api/v1/contributions/batches/{id}/reopen
chmeetings_post_api_v1_contributions_fundsWRITECreate a new contribution fund with the specified properties via POST /api/v1/contributions/funds
chmeetings_post_api_v1_contributions_payment_methodsWRITECreate a new custom payment method via POST /api/v1/contributions/payment-methods
chmeetings_post_api_v1_familiesWRITECreate a new family with members (minimum 2 members required) via POST /api/v1/families
chmeetings_post_api_v1_families_by_id_membersWRITEAdd members to an existing family via POST /api/v1/families/{id}/members
chmeetings_post_api_v1_groupsWRITECreates a new group and returns the created group. Returns 400 when the name is already used by another group. via POST /api/v1/groups
chmeetings_post_api_v1_groups_by_group_id_membershipsWRITEAdds a person to a group. Returns 201 if created, 200 if already exists. via POST /api/v1/groups/{group_id}/memberships
chmeetings_post_api_v1_integrations_webhooksWRITECreates a subscription owned by the church. The response carries the signing secret, which is used to verify the `ChMeetings-Webhook-Signature` header on delivery. Delivery is at-least-once and is delayed at least a minute after the triggering action (about 4 to 5 minutes for `person.*` events), so key on `event_id` to spot a repeat. Answer `410 Gone` to have the subscription removed automatically. via POST /api/v1/integrations/webhooks
chmeetings_post_api_v1_occurrences_by_occurrence_id_check_insWRITE- Checks a person in to the occurrence (creates the attendance record). - Idempotent: if the person is already checked in, the existing record is returned with 200. - occurred_at is optional and is the church's local wall-clock time in yyyy-MM-ddTHH:mm:ss (e.g. 2026-08-09T09:14:23). Fractional seconds are accepted and truncated. A UTC offset (Z or +03:00) is rejected with 400 - convert to the church's timezone before sending; do not simply strip the offset, or the time will be stored wrong. Defaults to now. Offline clients pass the locally recorded time when they sync. - Returns 201 with the attendance record; check_in_code is populated when the event has name tags enabled. - Concurrent duplicate check-ins return 409; retrying returns the winning record with 200. via POST /api/v1/occurrences/{occurrence_id}/check-ins
chmeetings_post_api_v1_occurrences_by_occurrence_id_check_outsWRITE- Checks a person out of the occurrence (sets checked_out_at on the attendance record). - Requires an existing check-in (422 otherwise) and the event's check-out option enabled. - Idempotent: if the person is already checked out, the existing record is returned with 200. - occurred_at is optional and is the church's local wall-clock time in yyyy-MM-ddTHH:mm:ss (e.g. 2026-08-09T09:14:23). Fractional seconds are accepted and truncated. A UTC offset (Z or +03:00) is rejected with 400 - convert to the church's timezone before sending; do not simply strip the offset, or the time will be stored wrong. Defaults to now. Offline clients pass the locally recorded time when they sync. - Rejected with 422 when occurred_at is before the recorded check-in time. via POST /api/v1/occurrences/{occurrence_id}/check-outs
chmeetings_post_api_v1_organizations_by_organization_id_groupsWRITECreates a new group within an organization and returns the created group. Returns 400 when the name is already used by another group in that organization. via POST /api/v1/organizations/{organization_id}/groups
chmeetings_post_api_v1_organizations_by_organization_id_groups_by_group_id_membershipsWRITEAdds a person to a group within an organization. Returns 201 if created, 200 if already exists. via POST /api/v1/organizations/{organization_id}/groups/{group_id}/memberships
chmeetings_post_api_v1_organizations_by_organization_id_occurrences_by_occurrence_id_check_insWRITE- Checks a person in to the occurrence (creates the attendance record). - Idempotent: if the person is already checked in, the existing record is returned with 200. - occurred_at is optional and is the church's local wall-clock time in yyyy-MM-ddTHH:mm:ss (e.g. 2026-08-09T09:14:23). Fractional seconds are accepted and truncated. A UTC offset (Z or +03:00) is rejected with 400 - convert to the church's timezone before sending; do not simply strip the offset, or the time will be stored wrong. Defaults to now. Offline clients pass the locally recorded time when they sync. - Returns 201 with the attendance record; check_in_code is populated when the event has name tags enabled. - Concurrent duplicate check-ins return 409; retrying returns the winning record with 200. via POST /api/v1/organizations/{organization_id}/occurrences/{occurrence_id}/check-ins
chmeetings_post_api_v1_organizations_by_organization_id_occurrences_by_occurrence_id_check_outsWRITE- Checks a person out of the occurrence (sets checked_out_at on the attendance record). - Requires an existing check-in (422 otherwise) and the event's check-out option enabled. - Idempotent: if the person is already checked out, the existing record is returned with 200. - occurred_at is optional and is the church's local wall-clock time in yyyy-MM-ddTHH:mm:ss (e.g. 2026-08-09T09:14:23). Fractional seconds are accepted and truncated. A UTC offset (Z or +03:00) is rejected with 400 - convert to the church's timezone before sending; do not simply strip the offset, or the time will be stored wrong. Defaults to now. Offline clients pass the locally recorded time when they sync. - Rejected with 422 when occurred_at is before the recorded check-in time. via POST /api/v1/organizations/{organization_id}/occurrences/{occurrence_id}/check-outs
chmeetings_post_api_v1_organizations_by_organization_id_peopleWRITEAdds an existing person to an organization. Returns 201 if the membership was created, 200 if the person was already a member. Get `organization_id` from `GET /api/v1/organizations` — it is an opaque string, not a number. The person is also added to the organization's parent church and account when they are not already a member there, so `organizations` in the response can list more than the one you requested. An organization outside the API key's tree returns 400, not 404. via POST /api/v1/organizations/{organization_id}/people
chmeetings_post_api_v1_organizations_by_organization_id_postsWRITECreate a new organization post. Status and visibility are required. Valid `visibility` values: "internal", "members", "public". Note: the legacy value "users" was renamed to "internal" — update any integrations sending "users". Set notify_members to true to send push notifications to members — only takes effect when status is set to published. via POST /api/v1/organizations/{organization_id}/posts
chmeetings_post_api_v1_peopleWRITECreate a new person via POST /api/v1/people
chmeetings_post_api_v1_people_by_person_id_notesWRITECreate a new member note. via POST /api/v1/people/{person_id}/notes
chmeetings_post_api_v1_postsWRITECreate a new post. Status and visibility are required. Valid `visibility` values: "internal", "members", "public". Note: the legacy value "users" was renamed to "internal" — update any integrations sending "users". Set notify_members to true to send push notifications to members — only takes effect when status is set to published. via POST /api/v1/posts
chmeetings_put_api_v1_contributions_batches_by_idWRITEUpdates a contribution batch. If 'date' is provided, the batch date is updated; if 'date' is null or omitted, the existing date remains unchanged. via PUT /api/v1/contributions/batches/{id}
chmeetings_put_api_v1_contributions_funds_by_idWRITEUpdate an existing contribution fund's properties via PUT /api/v1/contributions/funds/{id}
chmeetings_put_api_v1_contributions_payment_methods_by_idWRITEUpdate an existing custom payment method. System payment methods cannot be updated. via PUT /api/v1/contributions/payment-methods/{id}
chmeetings_put_api_v1_families_by_id_membersWRITEReplace all family members (minimum 2 members required) via PUT /api/v1/families/{id}/members
chmeetings_put_api_v1_groups_by_group_idWRITEReplaces a group's editable fields and returns the updated group. This is a full replacement — any omitted field is reset to its default. Returns 404 when the group does not exist, and 400 when the name is already used by another group. via PUT /api/v1/groups/{group_id}
chmeetings_put_api_v1_integrations_webhooks_by_idWRITEReplaces the URL, the event list and the active flag. Only subscriptions the church owns can be updated; one managed by Zapier answers `403`. Setting `is_active` back to true on a subscription that repeated delivery failures disabled. via PUT /api/v1/integrations/webhooks/{id}
chmeetings_put_api_v1_organizations_by_organization_id_groups_by_group_idWRITEReplaces the editable fields of a group within an organization and returns the updated group. This is a full replacement — any omitted field is reset to its default. Returns 404 when the group does not exist in that organization, and 400 when the name is already used by another group in it. via PUT /api/v1/organizations/{organization_id}/groups/{group_id}
chmeetings_put_api_v1_organizations_by_organization_id_posts_by_post_idWRITEUpdate an existing organization post. Valid `visibility` values: "internal", "members", "public". Note: the legacy value "users" was renamed to "internal" — update any integrations sending "users". Set notify_members to true to send push notifications to members — only takes effect when status is set to published. via PUT /api/v1/organizations/{organization_id}/posts/{post_id}
chmeetings_put_api_v1_people_by_idWRITEFully updates a person by Id. This is a full replacement — omitted fields will be cleared. via PUT /api/v1/people/{id}
chmeetings_put_api_v1_people_by_person_id_notes_by_note_idWRITEUpdate a member note. via PUT /api/v1/people/{person_id}/notes/{note_id}
chmeetings_put_api_v1_posts_by_idWRITEUpdate an existing post. Valid `visibility` values: "internal", "members", "public". Note: the legacy value "users" was renamed to "internal" — update any integrations sending "users". Set notify_members to true to send push notifications to members — only takes effect when status is set to published. via PUT /api/v1/posts/{id}
Often connected alongside
Put ChMeetings behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.