Folk People API

People (contacts) - the core relationship records in Folk.

OpenAPI Specification

folk-app-people-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Folk External Companies People API
  description: Folk's public REST API lets you manage the relationship data in a Folk workspace - people, companies, groups, deals and other custom objects, notes, reminders, and interactions - and subscribe to real-time changes via webhooks. The API is versioned by date (send an `Folk-Version` date such as 2025-06-09); the production base URL is https://api.folk.app and all documented resources live under the `/v1` path. Every request is authenticated with a Bearer API key created in workspace settings under "API". API access is a paid-plan (Premium / Enterprise) feature. This document is modeled by API Evangelist from Folk's published OpenAPI schema (https://developer.folk.app/schemas/2025-06-09.json) and reference docs.
  version: '2025-06-09'
  contact:
    name: Folk
    url: https://www.folk.app
  termsOfService: https://www.folk.app/legal/terms-and-conditions
servers:
- url: https://api.folk.app
  description: Folk's public API production base URL.
security:
- bearerApiKeyAuth: []
tags:
- name: People
  description: People (contacts) - the core relationship records in Folk.
paths:
  /v1/people:
    get:
      operationId: listPeople
      tags:
      - People
      summary: List people
      parameters:
      - $ref: '#/components/parameters/Limit'
      - $ref: '#/components/parameters/Cursor'
      - name: combinator
        in: query
        required: false
        description: The logical operator (and / or) used to combine multiple filters.
        schema:
          type: string
          enum:
          - and
          - or
      - name: filter
        in: query
        required: false
        description: A record of filters to apply, in the form filter[attribute][operator]=value.
        schema:
          type: object
      responses:
        '200':
          $ref: '#/components/responses/PersonList'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      operationId: createPerson
      tags:
      - People
      summary: Create a person
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonInput'
      responses:
        '201':
          $ref: '#/components/responses/PersonSingle'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/people/{personId}:
    parameters:
    - $ref: '#/components/parameters/PersonId'
    get:
      operationId: getPerson
      tags:
      - People
      summary: Get a person
      responses:
        '200':
          $ref: '#/components/responses/PersonSingle'
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updatePerson
      tags:
      - People
      summary: Update a person
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PersonInput'
      responses:
        '200':
          $ref: '#/components/responses/PersonSingle'
        '404':
          $ref: '#/components/responses/NotFound'
    delete:
      operationId: deletePerson
      tags:
      - People
      summary: Delete a person
      responses:
        '204':
          description: The person was deleted.
        '404':
          $ref: '#/components/responses/NotFound'
  /v1/people/search:
    post:
      operationId: searchPeople
      tags:
      - People
      summary: Search for people
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SearchInput'
      responses:
        '200':
          $ref: '#/components/responses/PersonList'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    SearchInput:
      type: object
      description: Filter payload for a search request.
      properties:
        combinator:
          type: string
          enum:
          - and
          - or
        filters:
          type: array
          items:
            type: object
            properties:
              attribute:
                type: string
              operator:
                type: string
              value: {}
        limit:
          type: integer
        cursor:
          type: string
    PersonInput:
      type: object
      properties:
        firstName:
          type: string
        lastName:
          type: string
        emails:
          type: array
          items:
            type: string
            format: email
        phones:
          type: array
          items:
            type: string
        urls:
          type: array
          items:
            type: string
        jobTitle:
          type: string
        description:
          type: string
        companyIds:
          type: array
          items:
            type: string
        groupIds:
          type: array
          items:
            type: string
        customFieldValues:
          type: object
          additionalProperties: true
    Pagination:
      type: object
      description: Cursor-based pagination metadata.
      properties:
        nextCursor:
          type: string
          nullable: true
          description: Cursor to pass to retrieve the next page, or null if none.
    Error:
      type: object
      properties:
        error:
          type: object
          properties:
            code:
              type: string
              example: NOT_FOUND
            message:
              type: string
            documentationUrl:
              type: string
    Group:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
    Person:
      type: object
      properties:
        id:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        fullName:
          type: string
        emails:
          type: array
          items:
            type: string
            format: email
        phones:
          type: array
          items:
            type: string
        urls:
          type: array
          items:
            type: string
        jobTitle:
          type: string
        description:
          type: string
        companies:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              name:
                type: string
        groups:
          type: array
          items:
            $ref: '#/components/schemas/Group'
        customFieldValues:
          type: object
          additionalProperties: true
        createdAt:
          type: string
          format: date-time
  responses:
    PersonSingle:
      description: A single person.
      content:
        application/json:
          schema:
            type: object
            properties:
              data:
                $ref: '#/components/schemas/Person'
    NotFound:
      description: The requested resource was not found.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    PersonList:
      description: A paginated list of people.
      content:
        application/json:
          schema:
            type: object
            properties:
              data:
                type: array
                items:
                  $ref: '#/components/schemas/Person'
              pagination:
                $ref: '#/components/schemas/Pagination'
    TooManyRequests:
      description: The rate limit was exceeded.
      headers:
        X-RateLimit-Limit:
          $ref: '#/components/headers/X-RateLimit-Limit'
        X-RateLimit-Remaining:
          $ref: '#/components/headers/X-RateLimit-Remaining'
        X-RateLimit-Reset:
          $ref: '#/components/headers/X-RateLimit-Reset'
        Retry-After:
          $ref: '#/components/headers/Retry-After'
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  headers:
    X-RateLimit-Limit:
      schema:
        type: integer
        example: 1000
      description: The maximum number of requests allowed in the current rate limit window.
    X-RateLimit-Remaining:
      schema:
        type: integer
        example: 998
      description: The number of requests remaining in the current rate limit window.
    X-RateLimit-Reset:
      schema:
        type: integer
        example: 1747322958
      description: The time the current rate limit window resets, in UTC epoch seconds.
    Retry-After:
      schema:
        type: integer
        example: 60
      description: The number of seconds to wait before retrying after a 429 response.
  parameters:
    PersonId:
      name: personId
      in: path
      required: true
      description: The unique identifier of the person.
      schema:
        type: string
    Cursor:
      name: cursor
      in: query
      required: false
      description: A cursor for pagination across multiple pages of results. Don't include this parameter on the first request; use the `nextCursor` from the previous response.
      schema:
        type: string
    Limit:
      name: limit
      in: query
      required: false
      description: The number of items to return.
      schema:
        type: integer
        minimum: 1
        maximum: 100
        default: 20
  securitySchemes:
    bearerApiKeyAuth:
      type: http
      scheme: bearer
      description: 'API key for authentication, sent as `Authorization: Bearer <api_key>`. Keys are created in workspace settings under "API". API access requires a paid Folk plan.'
Where this information came from

This is an independent, third-party profile of Folk People API, published by API Evangelist. We do not operate, host, resell, or support these APIs, and we are not affiliated with or endorsed by the company unless stated above. Everything here is built from publicly available information — the company's own site, developer portal, documentation, public repositories, and the specifications it publishes for public use. Nothing is obtained by breaching a system, defeating an access control, or using credentials.

The Kin Score and Agent Readiness rating are independently calculated assessments of a company's public API artifacts, scored against a published rubric. They are not certifications, endorsements, security assessments, or audits.

Corrections, re-scores, and removal are free — no partnership or purchase required, and you do not need to justify the request. A removed company is recorded as unrated, never scored zero for having asked. Acknowledgement within one business day; removal within two.

info@apievangelist.com · Read the full data-sourcing policy →
On a security or compliance team? Put security in the subject line and you will get a person, not a form — we will tell you exactly which public URLs this profile was built from.