openapi: 3.0.3 info: title: Folk External Companies Deals API description: Folk's public REST API lets you manage workspaces, groups, contacts, and real-time triggers. version: '2025-06-09' contact: name: folk email: tech@folk.app url: https://folk.app servers: - url: https://api.folk.app description: Folk's public API production base URL. x-internal: false tags: - name: Deals description: Operations related to deals. paths: /v1/groups/{groupId}/{objectType}: get: security: - bearerApiKeyAuth: [] operationId: listDeals summary: List deals description: Retrieve a list of deals in the workspace. tags: - Deals parameters: - schema: type: string minLength: 40 maxLength: 40 required: true description: The ID of the group the deals belong to. Can be retrieved from the [List groups](/api-reference/groups/list-groups) endpoint. example: grp_bc984b3f-0386-434d-82d7-a91eb6badd71 name: groupId in: path - schema: type: string maxLength: 500 required: true description: The name of a deal custom field that can be retrieved from the [List group custom fields](/api-reference/groups/list-group-custom-fields) endpoint. example: Deals name: objectType in: path - schema: type: integer minimum: 1 maximum: 100 default: 20 required: false description: The number of items to return. example: 20 name: limit in: query - schema: type: string maxLength: 128 required: false description: A cursor for pagination across multiple pages of results. Don’t include this parameter on the first call. Use the `pagination.nextLink` value returned in a previous response to request subsequent results. example: eyJvZmZzZXQiOjN9 name: cursor in: query - schema: type: string enum: - and - or default: and required: false description: The logical operator to combine multiple filters. example: and name: combinator in: query - schema: type: object additionalProperties: true default: {} properties: {} required: false description: A record of filters to apply, following the format `filter[attribute][operator]=value`. The `attribute` is the name of the attribute to filter on, and the `operator` is one of the supported filter operators. Refer to [Filterable fields](/api-reference/filtering#filterable-fields) to learn more about the supported attributes and operators. style: deepObject explode: true allowReserved: true examples: fullName_eq: summary: Full name equals "Alice Johnson" value: fullName: eq: Alice Johnson fullName_not_eq: summary: Full name does not equal "Alice Johnson" value: fullName: not_eq: Alice Johnson fullName_like: summary: Full name contains "Alice" value: fullName: like: Alice fullName_not_like: summary: Full name does not contain "Alice" value: fullName: not_like: Alice fullName_empty: summary: Full name is empty value: fullName: empty: '' fullName_not_empty: summary: Full name is not empty value: fullName: not_empty: '' firstName_eq: summary: First name equals "Alice" value: firstName: eq: Alice lastName_eq: summary: Last name equals "Alice" value: lastName: eq: Alice jobTitle_eq: summary: Job title equals "Software Engineer" value: jobTitle: eq: Software Engineer birthday_gt: summary: Birthday is after "1990-01-01" value: birthday: gt: '1990-01-01' description_like: summary: Description contains "developer" value: description: like: developer emails_eq: summary: Emails equals "alice@example.com" value: emails: eq: alice@example.com phones_eq: summary: Phones equals "123-456-7890" value: phones: eq: 123-456-7890 urls_eq: summary: URLs equals "https://example.com" value: urls: eq: https://example.com addresses_eq: summary: Addresses equals "123 Main St" value: addresses: eq: 123 Main St companies_in: summary: Companies includes multiple IDs value: companies: in: id: - com_8a5c68a0-6566-4e30-bdd0-382d708277de - com_d3d63a35-733e-450e-a521-97ed25f5f087 companies_not_in: summary: Companies does not include "com_8a5c68a0-6566-4e30-bdd0-382d708277de" value: companies: not_in: id: com_8a5c68a0-6566-4e30-bdd0-382d708277de companies_empty: summary: Companies is empty value: companies: empty: '' companies_not_empty: summary: Companies is not empty value: companies: not_empty: '' groups_in: summary: Groups includes multiple IDs value: groups: in: id: - grp_721e5288-324a-4f2e-85bd-4a3469987f97 - grp_bee00bb3-48b4-4033-bc9c-a9d173a94c0e textField_eq: summary: Text field equals "Some text value" value: customFieldValues.grp_5fa60242-0756-4e31-8cca-30c2c5ff1ac2.Text: eq: Some text value numericField_gt: summary: Number field is greater than "42" value: customFieldValues.grp_5fa60242-0756-4e31-8cca-30c2c5ff1ac2.Number: gt: '42' dateField_gt: summary: Date field is after "2023-01-01" value: customFieldValues.grp_5fa60242-0756-4e31-8cca-30c2c5ff1ac2.Date: gt: '2023-01-01' singleSelect_in: summary: Single select field includes "Todo" or "In Progress" value: customFieldValues.grp_5fa60242-0756-4e31-8cca-30c2c5ff1ac2.Single select: in: - Todo - In Progress multipleSelect_in: summary: Multiple select field includes "B2B" or "B2C" value: customFieldValues.grp_5fa60242-0756-4e31-8cca-30c2c5ff1ac2.Multiple select: in: - B2B - B2C userField_in: summary: User field includes a user with the email "john@folk.app" or a user with the id "usr_52401927-bf77-4130-a4cb-aceb295eb5b9" value: customFieldValues.grp_5fa60242-0756-4e31-8cca-30c2c5ff1ac2.Assign: in: email: john@folk.app id: usr_52401927-bf77-4130-a4cb-aceb295eb5b9 contactField_in: summary: Contact field includes specific IDs value: customFieldValues.grp_5fa60242-0756-4e31-8cca-30c2c5ff1ac2.Relationship: in: id: - per_7dfc21aa-feb2-40d9-92c9-17ccbe8bbddf - com_4b452b53-22c3-4373-94b8-33ef6eb2788f name: filter in: query responses: '200': description: A paginated list of deals in the workspace. links: updateDeal: operationId: updateDeal parameters: dealId: $response.body#/data/items/0/id groupId: $request.path.groupId entityType: $request.path.entityType description: The ids returned by the `GET /v1/groups/:groupId/:objectType` operation can be used as an input to the `PATCH /v1/groups/:groupId/:objectType/:dealId` operation to update a deal. getDeal: operationId: getDeal parameters: dealId: $response.body#/data/items/0/id groupId: $request.path.groupId entityType: $request.path.entityType description: The ids returned by the `GET /v1/groups/:groupId/:objectType` operation can be used as an input to the `GET /v1/groups/:groupId/:objectType/:dealId` operation to retrieve a deal. deleteDeal: operationId: deleteDeal parameters: dealId: $response.body#/data/items/0/id groupId: $request.path.groupId entityType: $request.path.entityType description: The ids returned by the `GET /v1/groups/:groupId/:objectType` operation can be used as an input to the `DELETE /v1/groups/:groupId/:objectType/:dealId` operation to delete a deal. 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: type: object properties: data: type: object properties: items: type: array items: $ref: '#/components/schemas/Deal' pagination: type: object properties: nextLink: type: string required: - items - pagination example: items: - id: obj_183ed5cc-3182-45de-84d1-d520f2604810 name: Project Alpha companies: - id: com_92346499-30bf-4278-ae8e-4aa3ae2ace2c name: Tech Corp people: - id: per_5fa60242-0756-4e31-8cca-30c2c5ff1ac2 fullName: John Doe createdAt: '2021-01-01T00:00:00.000Z' createdBy: id: usr_bc984b3f-0386-434d-82d7-a91eb6badd71 fullName: John Doe email: john.doe@example.com customFieldValues: Status: Active Deal value: '42000' Close date: '2021-01-01' Assignee: - id: usr_c3606e3b-0a92-4849-90e5-88a8d3f388d6 fullName: Jane Doe email: jane@example.com pagination: nextLink: https://api.folk.app/v1/groups/grp_bc984b3f-0386-434d-82d7-a91eb6badd71/Deals?limit=20&cursor=eyJvZmZzZXQiOjIwfQ%3D%3D deprecations: type: array items: type: string example: - This field is deprecated required: - data example: data: items: - id: obj_183ed5cc-3182-45de-84d1-d520f2604810 name: Project Alpha companies: - id: com_92346499-30bf-4278-ae8e-4aa3ae2ace2c name: Tech Corp people: - id: per_5fa60242-0756-4e31-8cca-30c2c5ff1ac2 fullName: John Doe createdAt: '2021-01-01T00:00:00.000Z' createdBy: id: usr_bc984b3f-0386-434d-82d7-a91eb6badd71 fullName: John Doe email: john.doe@example.com customFieldValues: Status: Active Deal value: '42000' Close date: '2021-01-01' Assignee: - id: usr_c3606e3b-0a92-4849-90e5-88a8d3f388d6 fullName: Jane Doe email: jane@example.com pagination: nextLink: https://api.folk.app/v1/groups/grp_bc984b3f-0386-434d-82d7-a91eb6badd71/Deals?limit=20&cursor=eyJvZmZzZXQiOjIwfQ%3D%3D '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '503': $ref: '#/components/responses/ServiceUnavailable' post: security: - bearerApiKeyAuth: [] operationId: createDeal summary: Create a deal description: Create a new deal in the workspace. tags: - Deals parameters: - schema: type: string minLength: 40 maxLength: 40 required: true description: The ID of the group the deals belong to. Can be retrieved from the [List groups](/api-reference/groups/list-groups) endpoint. example: grp_bc984b3f-0386-434d-82d7-a91eb6badd71 name: groupId in: path - schema: type: string maxLength: 500 required: true description: The name of a deal custom field that can be retrieved from the [List group custom fields](/api-reference/groups/list-group-custom-fields) endpoint. example: Deals name: objectType in: path requestBody: required: true content: application/json: schema: type: object properties: name: type: string maxLength: 1000 description: The name of the deal. example: Project Alpha companies: type: array items: type: object properties: id: type: string minLength: 40 maxLength: 40 required: - id additionalProperties: false maxItems: 20 description: The companies associated with the deal. example: - id: com_92346499-30bf-4278-ae8e-4aa3ae2ace2c people: type: array items: type: object properties: id: type: string minLength: 40 maxLength: 40 required: - id additionalProperties: false maxItems: 20 description: The people associated with the deal. example: - id: per_5fa60242-0756-4e31-8cca-30c2c5ff1ac2 customFieldValues: type: object additionalProperties: anyOf: - type: 'null' - type: string maxLength: 5000 - type: number minimum: -1.7976931348623157e+308 maximum: 1.7976931348623157e+308 - type: array items: anyOf: - type: string maxLength: 500 - type: object properties: id: type: string minLength: 40 maxLength: 40 required: - id - type: object properties: email: type: string maxLength: 254 required: - email maxItems: 1000 - type: 'null' description: "The custom field values associated with the deal. The format is the following:\n```json\n{\n \"\": \"\"\n}\n```\n\nThe format of the custom field value depends on the type of the custom field:\n\n- `textField`: string, eg: `\"Foo\"`\n- `numericField`: number or numeric string, eg: `42` or `\"42\"`\n- `dateField`: ISO 8601 string (YYYY-MM-DD), eg: `\"2021-01-01\"`\n- `singleSelect`: string (option label), eg: `\"Active\"`\n- `multipleSelect`: array of strings (option labels), eg: `[\"B2B\", \"B2C\"]`\n- `userField`: array of objects with either `id` (workspace user id) or `email` (workspace user email) property, eg: `[{\"id\": \"usr_a23373bb-5296-4c59-b2e8-8f121707d562\"}, {\"email\": \"jane@example.com\"}]`\n\nPassing a `null` value or an empty array will unset the custom field value." properties: {} example: Status: Active Deal value: '42000' Close date: '2021-01-01' Assignee: - id: usr_c3606e3b-0a92-4849-90e5-88a8d3f388d6 - email: jane@example.com additionalProperties: false responses: '200': description: The deal created in the workspace. links: updateDeal: operationId: updateDeal parameters: dealId: $response.body#/data/id groupId: $request.path.groupId entityType: $request.path.entityType description: The id returned by the `POST /v1/groups/:groupId/:objectType` operation can be used as an input to the `PATCH /v1/groups/:groupId/:objectType/:dealId` operation to update the deal. getDeal: operationId: getDeal parameters: dealId: $response.body#/data/id groupId: $request.path.groupId entityType: $request.path.entityType description: The id returned by the `POST /v1/groups/:groupId/:objectType` operation can be used as an input to the `GET /v1/groups/:groupId/:objectType/:dealId` operation to retrieve the deal. deleteDeal: operationId: deleteDeal parameters: dealId: $response.body#/data/id groupId: $request.path.groupId entityType: $request.path.entityType description: The id returned by the `POST /v1/groups/:groupId/:objectType` operation can be used as an input to the `DELETE /v1/groups/:groupId/:objectType/:dealId` operation to delete the deal. 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: type: object properties: data: $ref: '#/components/schemas/Deal' deprecations: type: array items: type: string example: - This field is deprecated required: - data example: data: id: obj_183ed5cc-3182-45de-84d1-d520f2604810 name: Project Alpha companies: - id: com_92346499-30bf-4278-ae8e-4aa3ae2ace2c name: Tech Corp people: - id: per_5fa60242-0756-4e31-8cca-30c2c5ff1ac2 fullName: John Doe createdAt: '2021-01-01T00:00:00.000Z' createdBy: id: usr_bc984b3f-0386-434d-82d7-a91eb6badd71 fullName: John Doe email: john.doe@example.com customFieldValues: Status: Active Deal value: '42000' Close date: '2021-01-01' Assignee: - id: usr_c3606e3b-0a92-4849-90e5-88a8d3f388d6 fullName: Jane Doe email: jane@example.com '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '503': $ref: '#/components/responses/ServiceUnavailable' /v1/groups/{groupId}/{objectType}/{objectId}: get: security: - bearerApiKeyAuth: [] operationId: getDeal summary: Get a deal description: Retrieve an existing deal in the workspace. tags: - Deals parameters: - schema: type: string minLength: 40 maxLength: 40 required: true description: The ID of the group the deals belong to. Can be retrieved from the [List groups](/api-reference/groups/list-groups) endpoint. example: grp_bc984b3f-0386-434d-82d7-a91eb6badd71 name: groupId in: path - schema: type: string maxLength: 500 required: true description: The name of a deal custom field that can be retrieved from the [List group custom fields](/api-reference/groups/list-group-custom-fields) endpoint. example: Deals name: objectType in: path - schema: type: string minLength: 40 maxLength: 40 required: true description: The ID of the deal to retrieve. name: objectId in: path responses: '200': description: The retrieved person in the workspace. 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: type: object properties: data: $ref: '#/components/schemas/Deal' deprecations: type: array items: type: string example: - This field is deprecated required: - data example: data: id: obj_183ed5cc-3182-45de-84d1-d520f2604810 name: Project Alpha companies: - id: com_92346499-30bf-4278-ae8e-4aa3ae2ace2c name: Tech Corp people: - id: per_5fa60242-0756-4e31-8cca-30c2c5ff1ac2 fullName: John Doe createdAt: '2021-01-01T00:00:00.000Z' createdBy: id: usr_bc984b3f-0386-434d-82d7-a91eb6badd71 fullName: John Doe email: john.doe@example.com customFieldValues: Status: Active Deal value: '42000' Close date: '2021-01-01' Assignee: - id: usr_c3606e3b-0a92-4849-90e5-88a8d3f388d6 fullName: Jane Doe email: jane@example.com '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '503': $ref: '#/components/responses/ServiceUnavailable' patch: security: - bearerApiKeyAuth: [] operationId: updateDeal summary: Update a deal description: Update an existing deal in the workspace. tags: - Deals parameters: - schema: type: string minLength: 40 maxLength: 40 required: true description: The ID of the group the deals belong to. Can be retrieved from the [List groups](/api-reference/groups/list-groups) endpoint. example: grp_bc984b3f-0386-434d-82d7-a91eb6badd71 name: groupId in: path - schema: type: string maxLength: 500 required: true description: The name of a deal custom field that can be retrieved from the [List group custom fields](/api-reference/groups/list-group-custom-fields) endpoint. example: Deals name: objectType in: path - schema: type: string minLength: 40 maxLength: 40 required: true description: The ID of the deal to update. name: objectId in: path requestBody: required: true content: application/json: schema: type: object properties: name: type: string maxLength: 1000 description: The name of the deal. example: Project Alpha companies: type: array items: type: object properties: id: type: string minLength: 40 maxLength: 40 required: - id additionalProperties: false maxItems: 20 description: The companies associated with the deal. example: - id: com_92346499-30bf-4278-ae8e-4aa3ae2ace2c people: type: array items: type: object properties: id: type: string minLength: 40 maxLength: 40 required: - id additionalProperties: false maxItems: 20 description: The people associated with the deal. example: - id: per_5fa60242-0756-4e31-8cca-30c2c5ff1ac2 customFieldValues: type: object additionalProperties: anyOf: - type: 'null' - type: string maxLength: 5000 - type: number minimum: -1.7976931348623157e+308 maximum: 1.7976931348623157e+308 - type: array items: anyOf: - type: string maxLength: 500 - type: object properties: id: type: string minLength: 40 maxLength: 40 required: - id - type: object properties: email: type: string maxLength: 254 required: - email maxItems: 1000 - type: 'null' description: "The custom field values associated with the deal. The format is the following:\n```json\n{\n \"\": \"\"\n}\n```\n\nThe format of the custom field value depends on the type of the custom field:\n\n- `textField`: string, eg: `\"Foo\"`\n- `numericField`: number or numeric string, eg: `42` or `\"42\"`\n- `dateField`: ISO 8601 string (YYYY-MM-DD), eg: `\"2021-01-01\"`\n- `singleSelect`: string (option label), eg: `\"Active\"`\n- `multipleSelect`: array of strings (option labels), eg: `[\"B2B\", \"B2C\"]`\n- `userField`: array of objects with either `id` (workspace user id) or `email` (workspace user email) property, eg: `[{\"id\": \"usr_a23373bb-5296-4c59-b2e8-8f121707d562\"}, {\"email\": \"jane@example.com\"}]`\n\nPassing a `null` value or an empty array will unset the custom field value." properties: {} example: Status: Active Deal value: '42000' Close date: '2021-01-01' Assignee: - id: usr_c3606e3b-0a92-4849-90e5-88a8d3f388d6 - email: jane@example.com additionalProperties: false responses: '200': description: The updated deal in the workspace. 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: type: object properties: data: $ref: '#/components/schemas/Deal' deprecations: type: array items: type: string example: - This field is deprecated required: - data example: data: id: obj_183ed5cc-3182-45de-84d1-d520f2604810 name: Project Alpha companies: - id: com_92346499-30bf-4278-ae8e-4aa3ae2ace2c name: Tech Corp people: - id: per_5fa60242-0756-4e31-8cca-30c2c5ff1ac2 fullName: John Doe createdAt: '2021-01-01T00:00:00.000Z' createdBy: id: usr_bc984b3f-0386-434d-82d7-a91eb6badd71 fullName: John Doe email: john.doe@example.com customFieldValues: Status: Active Deal value: '42000' Close date: '2021-01-01' Assignee: - id: usr_c3606e3b-0a92-4849-90e5-88a8d3f388d6 fullName: Jane Doe email: jane@example.com '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '503': $ref: '#/components/responses/ServiceUnavailable' delete: security: - bearerApiKeyAuth: [] operationId: deleteDeal summary: Delete a deal description: Delete an existing deal in the workspace. tags: - Deals parameters: - schema: type: string minLength: 40 maxLength: 40 required: true description: The ID of the group the deals belong to. Can be retrieved from the [List groups](/api-reference/groups/list-groups) endpoint. example: grp_bc984b3f-0386-434d-82d7-a91eb6badd71 name: groupId in: path - schema: type: string maxLength: 500 required: true description: The name of a deal custom field that can be retrieved from the [List group custom fields](/api-reference/groups/list-group-custom-fields) endpoint. example: Deals name: objectType in: path - schema: type: string minLength: 40 maxLength: 40 required: true description: The ID of the deal to delete. name: objectId in: path responses: '200': description: The ID of the deleted deal. 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: type: object properties: data: type: object properties: id: type: string required: - id example: id: obj_183ed5cc-3182-45de-84d1-d520f2604810 deprecations: type: array items: type: string example: - This field is deprecated required: - data example: data: id: obj_183ed5cc-3182-45de-84d1-d520f2604810 '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '503': $ref: '#/components/responses/ServiceUnavailable' /v1/groups/{groupId}/{objectType}/search: post: security: - bearerApiKeyAuth: [] x-excluded: true operationId: internal_searchDeals summary: Search deals description: Search deals in the workspace. tags: - Deals parameters: - schema: type: string minLength: 40 maxLength: 40 required: true description: The ID of the group the deals belong to. Can be retrieved from the [List groups](/api-reference/groups/list-groups) endpoint. example: grp_bc984b3f-0386-434d-82d7-a91eb6badd71 name: groupId in: path - schema: type: string maxLength: 500 required: true description: The name of a deal custom field that can be retrieved from the [List group custom fields](/api-reference/groups/list-group-custom-fields) endpoint. example: Deals name: objectType in: path - schema: type: integer minimum: 1 maximum: 100 default: 20 required: false description: The number of items to return. example: 20 name: limit in: query - schema: type: string maxLength: 128 required: false description: A cursor for pagination across multiple pages of results. Don’t include this parameter on the first call. Use the `pagination.nextLink` value returned in a previous response to request subsequent results. example: eyJvZmZzZXQiOjN9 name: cursor in: query requestBody: required: true content: application/json: schema: type: object properties: combinator: type: string enum: - and - or default: and filter: type: object additionalProperties: true default: {} properties: {} default: combinator: and filter: {} responses: '200': description: A paginated list of deals in the workspace. links: getDeal: operationId: getDeal parameters: dealId: $response.body#/data/id groupId: $request.path.groupId entityType: $request.path.entityType description: Ids returned by the `POST /v1/groups/:groupId/:objectType/search` operation can be used as an input to the `GET /v1/groups/:groupId/:objectType/:dealId` operation to retrieve the deal. 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: type: object properties: data: type: object properties: items: type: array items: $ref: '#/components/schemas/Deal' pagination: type: object properties: nextLink: type: string required: - items - pagination example: items: - id: obj_183ed5cc-3182-45de-84d1-d520f2604810 name: Project Alpha companies: - id: com_92346499-30bf-4278-ae8e-4aa3ae2ace2c name: Tech Corp people: - id: per_5fa60242-0756-4e31-8cca-30c2c5ff1ac2 fullName: John Doe createdAt: '2021-01-01T00:00:00.000Z' createdBy: id: usr_bc984b3f-0386-434d-82d7-a91eb6badd71 fullName: John Doe email: john.doe@example.com customFieldValues: Status: Active Deal value: '42000' Close date: '2021-01-01' Assignee: - id: usr_c3606e3b-0a92-4849-90e5-88a8d3f388d6 fullName: Jane Doe email: jane@example.com pagination: nextLink: https://api.folk.app/v1/groups/grp_bc984b3f-0386-434d-82d7-a91eb6badd71/Deals?limit=20&cursor=eyJvZmZzZXQiOjIwfQ%3D%3D deprecations: type: array items: type: string example: - This field is deprecated required: - data example: data: items: - id: obj_183ed5cc-3182-45de-84d1-d520f2604810 name: Project Alpha companies: - id: com_92346499-30bf-4278-ae8e-4aa3ae2ace2c name: Tech Corp people: - id: per_5fa60242-0756-4e31-8cca-30c2c5ff1ac2 fullName: John Doe createdAt: '2021-01-01T00:00:00.000Z' createdBy: id: usr_bc984b3f-0386-434d-82d7-a91eb6badd71 fullName: John Doe email: john.doe@example.com customFieldValues: Status: Active Deal value: '42000' Close date: '2021-01-01' Assignee: - id: usr_c3606e3b-0a92-4849-90e5-88a8d3f388d6 fullName: Jane Doe email: jane@example.com pagination: nextLink: https://api.folk.app/v1/groups/grp_bc984b3f-0386-434d-82d7-a91eb6badd71/Deals?limit=20&cursor=eyJvZmZzZXQiOjIwfQ%3D%3D '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '422': $ref: '#/components/responses/UnprocessableEntity' '429': $ref: '#/components/responses/TooManyRequests' '500': $ref: '#/components/responses/InternalServerError' '503': $ref: '#/components/responses/ServiceUnavailable' components: responses: Forbidden: description: The API key doesn’t have permissions to perform the request. 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' example: error: code: FORBIDDEN message: The API key doesn’t have permissions to perform the request. documentationUrl: https://developer.folk.app/api-reference/errors#forbidden requestId: 123e4567-e89b-12d3-a456-426614174000 timestamp: '2025-10-01T12:00:00Z' ServiceUnavailable: description: The server is overloaded or down for maintenance. content: application/json: schema: $ref: '#/components/schemas/Error' example: error: code: SERVICE_UNAVAILABLE message: The service is currently unavailable. documentationUrl: https://developer.folk.app/api-reference/errors#service-unavailable requestId: 123e4567-e89b-12d3-a456-426614174000 timestamp: '2025-10-01T12:00:00Z' NotFound: description: The requested resource doesn’t exist. 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' example: error: code: RESOURCE_NOT_FOUND message: The requested resource was not found. documentationUrl: https://developer.folk.app/api-reference/errors#not-found requestId: 123e4567-e89b-12d3-a456-426614174000 timestamp: '2025-10-01T12:00:00Z' InternalServerError: description: Something went wrong on our end. content: application/json: schema: $ref: '#/components/schemas/Error' example: error: code: INTERNAL_SERVER_ERROR message: An internal server error occurred. documentationUrl: https://developer.folk.app/api-reference/errors#internal-server-error requestId: 123e4567-e89b-12d3-a456-426614174000 timestamp: '2025-10-01T12:00:00Z' UnprocessableEntity: description: The request was unacceptable, often due to missing or invalid parameters. 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' example: error: code: UNPROCESSABLE_ENTITY message: Invalid query parameters documentationUrl: https://developer.folk.app/api-reference/errors#unprocessable-entity details: issues: - code: too_small minimum: 1 type: number inclusive: true exact: false message: Number must be greater than or equal to 1 path: - limit requestId: 123e4567-e89b-12d3-a456-426614174000 timestamp: '2025-10-01T12:00:00Z' Unauthorized: description: No valid API key provided. 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' example: error: code: UNAUTHORIZED message: No valid API key provided. documentationUrl: https://developer.folk.app/api-reference/errors#unauthorized requestId: 123e4567-e89b-12d3-a456-426614174000 timestamp: '2025-10-01T12:00:00Z' TooManyRequests: description: Too many requests hit the API too quickly. We recommend an exponential backoff of your requests. 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' example: error: code: RATE_LIMIT_EXCEEDED message: The rate limit has been exceeded. documentationUrl: https://developer.folk.app/api-reference/errors#rate-limiting requestId: 123e4567-e89b-12d3-a456-426614174000 timestamp: '2025-10-01T12:00:00Z' details: limit: 1000 remaining: 0 retryAfter: '2025-10-01T12:00:00Z' BadRequest: description: The request was unacceptable, often due to missing an invalid parameter. 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' example: error: code: INVALID_REQUEST message: The request was invalid. documentationUrl: https://developer.folk.app/api-reference/errors#bad-request requestId: 123e4567-e89b-12d3-a456-426614174000 timestamp: '2025-10-01T12:00:00Z' schemas: User: type: object properties: id: type: string fullName: type: string email: type: string required: - id - fullName - email description: A user in the workspace. example: id: usr_bc984b3f-0386-434d-82d7-a91eb6badd71 fullName: John Doe email: john.doe@example.com Error: type: object properties: error: type: object properties: code: type: string example: RATE_LIMIT_EXCEEDED message: type: string example: You have exceeded your rate limit. documentationUrl: type: string format: uri example: https://developer.folk.app/api-reference/errors#rate-limiting requestId: type: string format: uuid example: 123e4567-e89b-12d3-a456-426614174000 timestamp: type: string format: date-time example: '2025-10-01T12:00:00Z' details: type: object additionalProperties: true example: limit: 1000 remaining: 0 retryAfter: '2025-10-01T12:00:00Z' required: - code - message - documentationUrl - requestId - timestamp required: - error description: Error response containing error details. Deal: type: object properties: id: type: string name: type: string description: The name of the deal. example: Project Alpha companies: type: array items: type: object properties: id: type: string name: type: string description: The name of the company. example: Tech Corp required: - id - name people: type: array items: type: object properties: id: type: string fullName: type: string description: The name of the person. example: John Doe required: - id - fullName createdAt: type: string minLength: 20 maxLength: 40 description: The date and time the deal was created, in ISO format. example: '2021-01-01T00:00:00.000Z' nullable: true createdBy: $ref: '#/components/schemas/User' customFieldValues: type: object additionalProperties: anyOf: - type: 'null' - type: string description: A custom field value as a string. example: Value 1 - type: array items: type: string description: An array of values for the custom field. example: - Value 1 - Value 2 - type: array items: $ref: '#/components/schemas/User' description: An array of users associated with the custom field. example: - id: usr_44b85098-441b-4d7f-9d72-c079b1caec45 fullName: Jane Doe email: jane@example.com - id: usr_a95a1b90-8e88-4855-bc29-d47b8e2704e1 fullName: John Doe email: john@example.com - type: array items: anyOf: - type: object properties: id: type: string fullName: type: string entityType: type: string enum: - person required: - id - fullName - entityType - type: object properties: id: type: string fullName: type: string entityType: type: string enum: - company required: - id - fullName - entityType - type: object properties: id: type: string fullName: type: string entityType: type: string enum: - object required: - id - fullName - entityType description: An array of relationships associated with the custom field. example: - id: per_183ed5cc-3182-45de-84d1-d520f2604810 fullName: John Doe entityType: person - id: com_92346499-30bf-4278-ae8e-4aa3ae2ace2c fullName: Tech Corp entityType: company - type: 'null' required: - id - name - companies - people - createdAt - createdBy - customFieldValues description: A deal in the workspace. example: id: obj_183ed5cc-3182-45de-84d1-d520f2604810 name: Project Alpha companies: - id: com_92346499-30bf-4278-ae8e-4aa3ae2ace2c name: Tech Corp people: - id: per_5fa60242-0756-4e31-8cca-30c2c5ff1ac2 fullName: John Doe createdAt: '2021-01-01T00:00:00.000Z' createdBy: id: usr_bc984b3f-0386-434d-82d7-a91eb6badd71 fullName: John Doe email: john.doe@example.com customFieldValues: Status: Active Deal value: '42000' Close date: '2021-01-01' Assignee: - id: usr_c3606e3b-0a92-4849-90e5-88a8d3f388d6 fullName: Jane Doe email: jane@example.com headers: X-RateLimit-Limit: schema: type: integer example: 1000 description: The maximum number of requests that you can make in the current rate limit window. Retry-After: schema: type: integer example: 60 description: The number of seconds to wait before making a new request after hitting the rate limit. X-RateLimit-Reset: schema: type: integer example: 1747322958 description: The time at which the current rate limit window resets, in UTC epoch seconds. X-RateLimit-Remaining: schema: type: integer example: 998 description: The number of requests remaining in the current rate limit window. securitySchemes: bearerApiKeyAuth: type: http scheme: bearer description: API key for authentication