openapi: 3.0.3 info: title: Twenty Core companies objects API description: 'The Twenty Core API provides REST endpoints for CRUD operations on all CRM records including companies, people, opportunities, notes, tasks, and any custom objects defined in a workspace. All list endpoints use cursor-based pagination. Authentication is via Bearer token generated from workspace Settings → Playground. The API schema is per-tenant and adapts automatically as custom objects are added. Note: The full workspace-specific schema is available at https://api.twenty.com/open-api/core (requires Bearer token) and reflects all standard and custom objects configured in your workspace. ' version: v0.1 contact: email: felix@twenty.com license: name: AGPL-3.0 url: https://github.com/twentyhq/twenty?tab=License-1-ov-file#readme termsOfService: https://github.com/twentyhq/twenty?tab=coc-ov-file#readme servers: - url: https://api.twenty.com/rest/core description: Production security: - bearerAuth: [] tags: - name: objects description: Custom object metadata management paths: /objects: get: tags: - objects summary: Find Many Objects description: Returns metadata for all objects defined in the workspace. operationId: findManyObjects parameters: - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/orderBy' - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/startingAfter' - $ref: '#/components/parameters/endingBefore' responses: '200': description: Successful operation content: application/json: schema: $ref: '#/components/schemas/ObjectMetadataListResponse' '401': $ref: '#/components/responses/401' post: tags: - objects summary: Create One Object description: Creates a new custom object in the workspace schema. operationId: createOneObject requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ObjectMetadataInput' example: nameSingular: invoice namePlural: invoices labelSingular: Invoice labelPlural: Invoices description: Customer invoices icon: IconFileInvoice responses: '201': description: Object created content: application/json: schema: $ref: '#/components/schemas/ObjectMetadataResponse' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' /objects/{id}: parameters: - $ref: '#/components/parameters/id' get: tags: - objects summary: Find One Object operationId: findOneObject responses: '200': description: Successful operation content: application/json: schema: $ref: '#/components/schemas/ObjectMetadataResponse' '401': $ref: '#/components/responses/401' patch: tags: - objects summary: Update One Object operationId: updateOneObject requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ObjectMetadataInput' responses: '200': description: Object updated content: application/json: schema: $ref: '#/components/schemas/ObjectMetadataResponse' '400': $ref: '#/components/responses/400' '401': $ref: '#/components/responses/401' delete: tags: - objects summary: Delete One Object operationId: deleteOneObject responses: '200': description: Object deleted content: application/json: schema: $ref: '#/components/schemas/DeleteResponse' '401': $ref: '#/components/responses/401' components: parameters: id: name: id in: path required: true description: Object UUID schema: type: string format: uuid endingBefore: name: ending_before in: query required: false description: Cursor for backward pagination schema: type: string limit: name: limit in: query required: false description: Maximum number of records to return (default 1000) schema: type: integer minimum: 0 maximum: 1000 default: 1000 startingAfter: name: starting_after in: query required: false description: Cursor for forward pagination schema: type: string filter: name: filter in: query required: false description: Filter expression schema: type: string orderBy: name: order_by in: query required: false description: Ordering clause schema: type: string responses: '401': description: Unauthorized content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' example: statusCode: 403 messages: - Missing authentication token error: FORBIDDEN_EXCEPTION '400': description: Bad request content: application/json: schema: $ref: '#/components/schemas/ErrorResponse' schemas: FieldMetadata: type: object properties: id: type: string format: uuid readOnly: true createdAt: type: string format: date-time readOnly: true updatedAt: type: string format: date-time readOnly: true objectMetadataId: type: string format: uuid name: type: string description: Camel-case field name label: type: string description: Human-readable field label type: type: string enum: - TEXT - RICH_TEXT - NUMERIC - NUMBER - BOOLEAN - DATE - DATE_TIME - SELECT - MULTI_SELECT - RELATION - CURRENCY - FULL_NAME - EMAILS - PHONES - LINKS - ADDRESS - RATING - UUID - JSON - ARRAY - TS_VECTOR description: type: string nullable: true icon: type: string nullable: true isNullable: type: boolean isCustom: type: boolean readOnly: true isSystem: type: boolean readOnly: true isActive: type: boolean defaultValue: nullable: true options: type: array nullable: true items: type: object properties: id: type: string value: type: string label: type: string color: type: string ObjectMetadataInput: type: object required: - nameSingular - namePlural - labelSingular - labelPlural properties: nameSingular: type: string namePlural: type: string labelSingular: type: string labelPlural: type: string description: type: string icon: type: string isActive: type: boolean ObjectMetadataListResponse: type: object properties: data: type: object properties: objects: type: object properties: edges: type: array items: type: object properties: node: $ref: '#/components/schemas/ObjectMetadata' cursor: type: string pageInfo: $ref: '#/components/schemas/PageInfo' totalCount: type: integer DeleteResponse: type: object properties: data: type: object properties: id: type: string format: uuid ObjectMetadata: type: object properties: id: type: string format: uuid readOnly: true createdAt: type: string format: date-time readOnly: true updatedAt: type: string format: date-time readOnly: true nameSingular: type: string description: Camel-case singular name (e.g. invoice) namePlural: type: string description: Camel-case plural name (e.g. invoices) labelSingular: type: string description: Human-readable singular label labelPlural: type: string description: Human-readable plural label description: type: string nullable: true icon: type: string nullable: true description: Icon name from Twenty icon set isCustom: type: boolean readOnly: true isActive: type: boolean isSystem: type: boolean readOnly: true fields: type: array readOnly: true items: $ref: '#/components/schemas/FieldMetadata' ErrorResponse: type: object properties: statusCode: type: integer messages: type: array items: type: string error: type: string ObjectMetadataResponse: type: object properties: data: type: object properties: object: $ref: '#/components/schemas/ObjectMetadata' PageInfo: type: object properties: hasNextPage: type: boolean hasPreviousPage: type: boolean startCursor: type: string nullable: true endCursor: type: string nullable: true securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT description: 'Workspace-scoped Bearer token. Generate from Settings → Playground in your Twenty workspace. ' externalDocs: description: Twenty Developer Documentation url: https://docs.twenty.com/developers/extend/api