openapi: 3.0.3 info: title: Folk External Companies Webhooks 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: Webhooks description: Real-time change-event subscriptions. paths: /v1/webhooks: get: operationId: listWebhooks tags: - Webhooks summary: List webhooks responses: '200': description: A list of webhooks. content: application/json: schema: type: object properties: data: type: array items: $ref: '#/components/schemas/Webhook' post: operationId: createWebhook tags: - Webhooks summary: Create a webhook requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookInput' responses: '201': description: The webhook was created, including its signing secret. content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/WebhookWithSigningSecret' /v1/webhooks/{webhookId}: parameters: - name: webhookId in: path required: true description: The unique identifier of the webhook. schema: type: string get: operationId: getWebhook tags: - Webhooks summary: Get a webhook responses: '200': description: The requested webhook. content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Webhook' '404': $ref: '#/components/responses/NotFound' patch: operationId: updateWebhook tags: - Webhooks summary: Update a webhook requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/WebhookInput' responses: '200': description: The updated webhook. content: application/json: schema: type: object properties: data: $ref: '#/components/schemas/Webhook' '404': $ref: '#/components/responses/NotFound' delete: operationId: deleteWebhook tags: - Webhooks summary: Delete a webhook responses: '204': description: The webhook was deleted. '404': $ref: '#/components/responses/NotFound' components: schemas: WebhookInput: type: object required: - targetUrl - subscribedEvents properties: name: type: string maxLength: 255 example: My app integration targetUrl: type: string format: uri maxLength: 2048 description: A publicly accessible HTTP or HTTPS URL to receive events. example: https://my-app.com/webhook subscribedEvents: type: array items: $ref: '#/components/schemas/WebhookSubscribedEvent' WebhookWithSigningSecret: allOf: - $ref: '#/components/schemas/Webhook' - type: object properties: signingSecret: type: string description: Secret used to verify the authenticity of webhook payloads. Webhook: type: object properties: id: type: string name: type: string maxLength: 255 targetUrl: type: string format: uri maxLength: 2048 subscribedEvents: type: array items: $ref: '#/components/schemas/WebhookSubscribedEvent' createdAt: type: string format: date-time WebhookSubscribedEvent: type: object properties: eventType: type: string enum: - person.created - person.updated - person.deleted - person.groups_updated - person.workspace_interaction_metadata_updated - company.created - company.updated - company.deleted - company.groups_updated - object.created - object.updated - object.deleted - note.created - note.updated - note.deleted - reminder.created - reminder.updated - reminder.deleted - reminder.triggered filter: type: object properties: groupId: type: string maxLength: 255 Error: type: object properties: error: type: object properties: code: type: string example: NOT_FOUND message: type: string documentationUrl: type: string responses: NotFound: description: The requested resource was not found. content: application/json: schema: $ref: '#/components/schemas/Error' securitySchemes: bearerApiKeyAuth: type: http scheme: bearer description: 'API key for authentication, sent as `Authorization: Bearer `. Keys are created in workspace settings under "API". API access requires a paid Folk plan.'