Twenty website screenshot

Twenty

Twenty is an open-source CRM and a modern alternative to Salesforce. It auto-generates both a REST API and a GraphQL API from your workspace data model, exposing a Core API for records (People, Companies, Opportunities, Notes, Tasks, and custom objects) and a Metadata API for schema (objects, fields, and relations). Twenty is free to self-host and available as a managed Twenty Cloud offering.

3 APIs 0 Features
CRMOpen SourceSalesGraphQLREST

APIs

Twenty Core REST API

Auto-generated REST CRUD over CRM records - People, Companies, Opportunities, Notes, Tasks, Workspace Members, Attachments, and any custom objects - under the per-workspace /res...

Twenty Metadata REST API

Schema management REST API to create, modify, and delete objects, fields, and relations under the /rest/metadata base path, so custom data models instantly gain matching Core RE...

Twenty GraphQL API

Auto-generated GraphQL API over the same workspace schema, exposing queries, mutations, batch upserts via plural object names, and relation traversal for the Core API (/graphql)...

Collections

GraphQL

Twenty GraphQL Schema

Representative GraphQL schema for [Twenty](https://twenty.com/), the open-source CRM.

GRAPHQL

Pricing Plans

Twenty Crm Plans Pricing

3 plans

PLANS

Rate Limits

Twenty Crm Rate Limits

2 limits

RATE LIMITS

FinOps

Resources

🔗
VulnerabilityDisclosure
VulnerabilityDisclosure
🔗
DomainSecurity
DomainSecurity
🔑
Authentication
Authentication
👥
GitHubOrganization
GitHubOrganization
🔗
LinkedIn
LinkedIn
🔗
Website
Website
🔗
Documentation
Documentation
🔗
Plans
Plans
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: Twenty CRM API
  version: '0.40'
request:
  auth:
    type: bearer
    token: '{{bearerToken}}'
items:
- info:
    name: People
    type: folder
  items:
  - info:
      name: List people
      type: http
    http:
      method: GET
      url: https://api.twenty.com/rest/people
    docs: Returns a page of person records.
  - info:
      name: Create a person
      type: http
    http:
      method: POST
      url: https://api.twenty.com/rest/people
      body:
        type: json
        data: "{\n  \"name\": { \"firstName\": \"Ada\", \"lastName\": \"Lovelace\" },\n  \"emails\": { \"primaryEmail\": \"\
          ada@example.com\" },\n  \"jobTitle\": \"Engineer\"\n}"
    docs: Create a person record.
  - info:
      name: Get a person
      type: http
    http:
      method: GET
      url: https://api.twenty.com/rest/people/{{id}}
    docs: Retrieve a single person by id.
  - info:
      name: Update a person
      type: http
    http:
      method: PATCH
      url: https://api.twenty.com/rest/people/{{id}}
      body:
        type: json
        data: "{\n  \"jobTitle\": \"Senior Engineer\"\n}"
    docs: Update a person record.
  - info:
      name: Delete a person
      type: http
    http:
      method: DELETE
      url: https://api.twenty.com/rest/people/{{id}}
    docs: Delete a person record.
- info:
    name: Companies
    type: folder
  items:
  - info:
      name: List companies
      type: http
    http:
      method: GET
      url: https://api.twenty.com/rest/companies
    docs: Returns a page of company records.
  - info:
      name: Create a company
      type: http
    http:
      method: POST
      url: https://api.twenty.com/rest/companies
      body:
        type: json
        data: "{\n  \"name\": \"Acme\",\n  \"employees\": 120\n}"
    docs: Create a company record.
  - info:
      name: Get a company
      type: http
    http:
      method: GET
      url: https://api.twenty.com/rest/companies/{{id}}
    docs: Retrieve a single company by id.
- info:
    name: Opportunities
    type: folder
  items:
  - info:
      name: List opportunities
      type: http
    http:
      method: GET
      url: https://api.twenty.com/rest/opportunities
    docs: Returns a page of opportunity records.
  - info:
      name: Create an opportunity
      type: http
    http:
      method: POST
      url: https://api.twenty.com/rest/opportunities
      body:
        type: json
        data: "{\n  \"name\": \"Acme - Platform Deal\",\n  \"stage\": \"PROPOSAL\"\n}"
    docs: Create an opportunity record.
- info:
    name: Metadata - Objects
    type: folder
  items:
  - info:
      name: List object metadata
      type: http
    http:
      method: GET
      url: https://api.twenty.com/rest/metadata/objects
    docs: List object definitions in the workspace schema.
  - info:
      name: Create an object
      type: http
    http:
      method: POST
      url: https://api.twenty.com/rest/metadata/objects
      body:
        type: json
        data: "{\n  \"nameSingular\": \"project\",\n  \"namePlural\": \"projects\",\n  \"labelSingular\": \"Project\",\n \
          \ \"labelPlural\": \"Projects\"\n}"
    docs: Create a custom object.
- info:
    name: Metadata - Fields
    type: folder
  items:
  - info:
      name: List field metadata
      type: http
    http:
      method: GET
      url: https://api.twenty.com/rest/metadata/fields
    docs: List field definitions.
  - info:
      name: Create a field
      type: http
    http:
      method: POST
      url: https://api.twenty.com/rest/metadata/fields
      body:
        type: json
        data: "{\n  \"name\": \"budget\",\n  \"label\": \"Budget\",\n  \"type\": \"CURRENCY\",\n  \"objectMetadataId\": \"\
          {{objectMetadataId}}\"\n}"
    docs: Add a field to an object.
- info:
    name: GraphQL
    type: folder
  items:
  - info:
      name: Core GraphQL query
      type: http
    http:
      method: POST
      url: https://api.twenty.com/graphql
      body:
        type: json
        data: "{\n  \"query\": \"query { companies(first: 10) { edges { node { id name } } totalCount } }\"\n}"
    docs: Core API GraphQL endpoint.