Planning Center People API

People, households, contact info, lists, forms, and workflows.

Documentation

Specifications

Other Resources

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/planning-center-people-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

planning-center-people-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Planning Center Calendar People API
  description: 'A representative OpenAPI description of the Planning Center suite of church management APIs. Planning Center exposes a documented public REST API for each of its products - People, Services, Giving, Groups, Check-Ins, Calendar, Registrations, Publishing - plus a cross-product Webhooks API, all under the shared base host https://api.planningcenteronline.com. Every product is versioned under its own path prefix (for example /people/v2, /services/v2, /giving/v2). All responses conform to the JSON:API 1.0 specification: resource objects are wrapped in a top-level `data` member (an object or an array), each with `id`, `type`, `attributes`, and `relationships`, and collections support `include`, `where[]` filtering, `order`, and offset-based pagination via `per_page` and `offset`. Authenticate with HTTP Basic using a Personal Access Token (application id / secret) or with an OAuth 2.0 bearer token. A `User-Agent` header is required on every request.

    Endpoint coverage: the resource collections and base paths modeled here are grounded in Planning Center''s published documentation. Individual method/path combinations are a representative CRUD-shaped subset; consult the live API reference at developer.planning.center for the authoritative, exhaustive list and per-resource attributes.'
  version: '2.0'
  contact:
    name: Planning Center Developers
    url: https://developer.planning.center/docs/
  license:
    name: Proprietary
    url: https://www.planningcenter.com/terms
servers:
- url: https://api.planningcenteronline.com
  description: Planning Center API (all products)
security:
- basicAuth: []
- oauth2:
  - people
  - services
  - giving
  - groups
  - check_ins
  - calendar
  - registrations
  - publishing
tags:
- name: People
  description: People, households, contact info, lists, forms, and workflows.
paths:
  /people/v2/people:
    get:
      operationId: listPeople
      tags:
      - People
      summary: List people
      description: Lists people in the account. Supports include, where[] filters, order, and offset pagination.
      parameters:
      - $ref: '#/components/parameters/PerPage'
      - $ref: '#/components/parameters/Offset'
      - $ref: '#/components/parameters/Include'
      responses:
        '200':
          $ref: '#/components/responses/Collection'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/RateLimited'
    post:
      operationId: createPerson
      tags:
      - People
      summary: Create a person
      requestBody:
        $ref: '#/components/requestBodies/JsonApiBody'
      responses:
        '201':
          $ref: '#/components/responses/Resource'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
  /people/v2/people/{id}:
    parameters:
    - $ref: '#/components/parameters/Id'
    get:
      operationId: getPerson
      tags:
      - People
      summary: Get a person
      responses:
        '200':
          $ref: '#/components/responses/Resource'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updatePerson
      tags:
      - People
      summary: Update a person
      requestBody:
        $ref: '#/components/requestBodies/JsonApiBody'
      responses:
        '200':
          $ref: '#/components/responses/Resource'
        '422':
          $ref: '#/components/responses/UnprocessableEntity'
    delete:
      operationId: deletePerson
      tags:
      - People
      summary: Delete a person
      responses:
        '204':
          description: Deleted.
  /people/v2/people/{id}/emails:
    parameters:
    - $ref: '#/components/parameters/Id'
    get:
      operationId: listPersonEmails
      tags:
      - People
      summary: List a person's emails
      responses:
        '200':
          $ref: '#/components/responses/Collection'
  /people/v2/emails:
    get:
      operationId: listEmails
      tags:
      - People
      summary: List email addresses
      responses:
        '200':
          $ref: '#/components/responses/Collection'
  /people/v2/addresses:
    get:
      operationId: listAddresses
      tags:
      - People
      summary: List addresses
      responses:
        '200':
          $ref: '#/components/responses/Collection'
  /people/v2/phone_numbers:
    get:
      operationId: listPhoneNumbers
      tags:
      - People
      summary: List phone numbers
      responses:
        '200':
          $ref: '#/components/responses/Collection'
  /people/v2/households:
    get:
      operationId: listHouseholds
      tags:
      - People
      summary: List households
      responses:
        '200':
          $ref: '#/components/responses/Collection'
  /people/v2/lists:
    get:
      operationId: listLists
      tags:
      - People
      summary: List people lists
      responses:
        '200':
          $ref: '#/components/responses/Collection'
  /people/v2/field_definitions:
    get:
      operationId: listFieldDefinitions
      tags:
      - People
      summary: List custom field definitions
      responses:
        '200':
          $ref: '#/components/responses/Collection'
  /people/v2/forms:
    get:
      operationId: listForms
      tags:
      - People
      summary: List forms
      responses:
        '200':
          $ref: '#/components/responses/Collection'
  /people/v2/workflows:
    get:
      operationId: listWorkflows
      tags:
      - People
      summary: List workflows
      responses:
        '200':
          $ref: '#/components/responses/Collection'
components:
  parameters:
    Id:
      name: id
      in: path
      required: true
      schema:
        type: string
      description: The resource ID.
    Include:
      name: include
      in: query
      required: false
      schema:
        type: string
      description: Comma-separated list of related resources to sideload (JSON:API include).
    Offset:
      name: offset
      in: query
      required: false
      schema:
        type: integer
        default: 0
      description: Zero-based offset for pagination. Offsets above 30,000 are subject to a stricter rate limit.
    PerPage:
      name: per_page
      in: query
      required: false
      schema:
        type: integer
        default: 25
        maximum: 100
      description: Number of records per page (JSON:API pagination).
  schemas:
    JsonApiErrorDocument:
      type: object
      properties:
        errors:
          type: array
          items:
            type: object
            properties:
              status:
                type: string
              title:
                type: string
              detail:
                type: string
    JsonApiResource:
      type: object
      description: A JSON:API resource object.
      properties:
        id:
          type: string
        type:
          type: string
        attributes:
          type: object
          additionalProperties: true
        relationships:
          type: object
          additionalProperties: true
        links:
          type: object
          additionalProperties: true
    JsonApiCollectionDocument:
      type: object
      required:
      - data
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/JsonApiResource'
        included:
          type: array
          items:
            $ref: '#/components/schemas/JsonApiResource'
        meta:
          type: object
          properties:
            total_count:
              type: integer
            count:
              type: integer
        links:
          type: object
          properties:
            self:
              type: string
            next:
              type: string
    JsonApiResourceDocument:
      type: object
      required:
      - data
      properties:
        data:
          $ref: '#/components/schemas/JsonApiResource'
        included:
          type: array
          items:
            $ref: '#/components/schemas/JsonApiResource'
  responses:
    Resource:
      description: A single JSON:API resource.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/JsonApiResourceDocument'
    Collection:
      description: A JSON:API collection of resources.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/JsonApiCollectionDocument'
    Unauthorized:
      description: Missing or invalid credentials.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/JsonApiErrorDocument'
    NotFound:
      description: Resource not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/JsonApiErrorDocument'
    RateLimited:
      description: Rate limit exceeded (100 requests per 20 seconds per user).
      headers:
        Retry-After:
          schema:
            type: integer
          description: Seconds to wait before retrying.
        X-PCO-API-Request-Rate-Limit:
          schema:
            type: integer
        X-PCO-API-Request-Rate-Period:
          schema:
            type: integer
        X-PCO-API-Request-Rate-Count:
          schema:
            type: integer
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/JsonApiErrorDocument'
    UnprocessableEntity:
      description: Validation failed.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/JsonApiErrorDocument'
  requestBodies:
    JsonApiBody:
      required: true
      description: A JSON:API single-resource document.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/JsonApiResourceDocument'
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: HTTP Basic auth using a Personal Access Token - application id as the username and secret as the password.
    oauth2:
      type: oauth2
      flows:
        authorizationCode:
          authorizationUrl: https://api.planningcenteronline.com/oauth/authorize
          tokenUrl: https://api.planningcenteronline.com/oauth/token
          scopes:
            people: Access the People product
            services: Access the Services product
            giving: Access the Giving product
            groups: Access the Groups product
            check_ins: Access the Check-Ins product
            calendar: Access the Calendar product
            registrations: Access the Registrations product
            publishing: Access the Publishing product