Attio Deals API

The Deals CRM surface, expressed through the standard records endpoints with the object set to `deals` - query, create, get, update, delete, and upsert deal records with value, stage, and associated people and companies.

OpenAPI Specification

attio-com-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Attio REST API
  description: >-
    The Attio REST API exposes the Attio CRM's object/attribute/record data model
    over HTTPS. Attio is an AI-native CRM built on flexible objects (people,
    companies, deals, users, workspaces, and custom objects), typed attributes,
    records, and lists. This specification covers the core data-model, activity,
    collaboration, and platform endpoints: objects, records, attributes, lists,
    list entries, notes, tasks, comments, threads, webhooks, workspace members,
    and token identification. All requests are authenticated with a Bearer access
    token (API key or OAuth) and scoped by granular permissions. Endpoints marked
    modeled in the repository review were derived from Attio's published endpoint
    reference and follow Attio's documented /v2 path conventions.
  version: '2.0'
  contact:
    name: Attio
    url: https://attio.com
  license:
    name: Proprietary
    url: https://attio.com/legal
servers:
  - url: https://api.attio.com/v2
    description: Attio REST API v2
security:
  - bearerAuth: []
tags:
  - name: Objects
    description: Top-level data model - people, companies, deals, and custom objects.
  - name: Records
    description: Individual records within an object, with CRUD, query, and upsert.
  - name: Attributes
    description: Typed fields defined on objects and lists, plus select options and statuses.
  - name: Lists
    description: Collections that model a process by referencing records.
  - name: List Entries
    description: Entries within a list, referencing a parent record.
  - name: Notes
    description: Free-form notes attached to records.
  - name: Tasks
    description: Actionable to-dos with deadlines and assignees.
  - name: Comments
    description: Comments within threads on records and list entries.
  - name: Threads
    description: Threads of comments on records and list entries.
  - name: Webhooks
    description: Webhook subscriptions delivering signed HTTP callbacks on changes.
  - name: Workspace Members
    description: Human users belonging to the workspace.
  - name: Meta
    description: Access token identification and introspection.
paths:
  /objects:
    get:
      operationId: listObjects
      tags: [Objects]
      summary: List objects
      description: Lists all system-defined and user-defined objects in your workspace.
      responses:
        '200':
          description: A list of objects.
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createObject
      tags: [Objects]
      summary: Create an object
      description: Creates a new custom object in your workspace.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The created object.
        '401':
          $ref: '#/components/responses/Unauthorized'
  /objects/{object}:
    parameters:
      - $ref: '#/components/parameters/Object'
    get:
      operationId: getObject
      tags: [Objects]
      summary: Get an object
      description: Gets a single object by its ID or slug.
      responses:
        '200':
          description: The requested object.
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateObject
      tags: [Objects]
      summary: Update an object
      description: Updates a single object.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated object.
  /objects/{object}/records/query:
    parameters:
      - $ref: '#/components/parameters/Object'
    post:
      operationId: listRecords
      tags: [Records]
      summary: List records
      description: >-
        Lists people, company, or other records, with the option to filter and
        sort results. Confirmed endpoint - POST /v2/objects/{object}/records/query.
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                filter:
                  type: object
                sorts:
                  type: array
                  items:
                    type: object
                limit:
                  type: integer
                offset:
                  type: integer
      responses:
        '200':
          description: A page of matching records.
  /objects/{object}/records:
    parameters:
      - $ref: '#/components/parameters/Object'
    post:
      operationId: createRecord
      tags: [Records]
      summary: Create a record
      description: Creates a new person, company, or other record.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The created record.
    put:
      operationId: assertRecord
      tags: [Records]
      summary: Assert a record
      description: >-
        Creates or updates (upserts) a record using a matching attribute to
        determine whether a record already exists.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The asserted (created or updated) record.
  /objects/{object}/records/{record_id}:
    parameters:
      - $ref: '#/components/parameters/Object'
      - $ref: '#/components/parameters/RecordId'
    get:
      operationId: getRecord
      tags: [Records]
      summary: Get a record
      description: Gets a single record by its record_id.
      responses:
        '200':
          description: The requested record.
        '404':
          $ref: '#/components/responses/NotFound'
    patch:
      operationId: updateRecordAppend
      tags: [Records]
      summary: Update a record (append multiselect values)
      description: Updates a record, appending values to multiselect attributes.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated record.
    put:
      operationId: updateRecordOverwrite
      tags: [Records]
      summary: Update a record (overwrite multiselect values)
      description: Updates a record, overwriting values on multiselect attributes.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated record.
    delete:
      operationId: deleteRecord
      tags: [Records]
      summary: Delete a record
      description: Deletes a record by its record_id.
      responses:
        '200':
          description: The record was deleted.
  /objects/{object}/records/{record_id}/attributes/{attribute}/values:
    parameters:
      - $ref: '#/components/parameters/Object'
      - $ref: '#/components/parameters/RecordId'
      - $ref: '#/components/parameters/Attribute'
    get:
      operationId: listRecordAttributeValues
      tags: [Records]
      summary: List record attribute values
      description: Lists all values, including historic values, for a given attribute on a record.
      responses:
        '200':
          description: A list of attribute values.
  /objects/{object}/records/{record_id}/entries:
    parameters:
      - $ref: '#/components/parameters/Object'
      - $ref: '#/components/parameters/RecordId'
    get:
      operationId: listRecordEntries
      tags: [Records]
      summary: List record entries
      description: Lists all entries, across all lists, for which this record is the parent.
      responses:
        '200':
          description: A list of list entries.
  /{target}/{identifier}/attributes:
    parameters:
      - $ref: '#/components/parameters/Target'
      - $ref: '#/components/parameters/Identifier'
    get:
      operationId: listAttributes
      tags: [Attributes]
      summary: List attributes
      description: Lists all attributes defined on a specific object or list.
      responses:
        '200':
          description: A list of attributes.
    post:
      operationId: createAttribute
      tags: [Attributes]
      summary: Create an attribute
      description: Creates a new attribute on either an object or a list.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The created attribute.
  /{target}/{identifier}/attributes/{attribute}:
    parameters:
      - $ref: '#/components/parameters/Target'
      - $ref: '#/components/parameters/Identifier'
      - $ref: '#/components/parameters/Attribute'
    get:
      operationId: getAttribute
      tags: [Attributes]
      summary: Get an attribute
      description: Gets information about a single attribute on either an object or a list.
      responses:
        '200':
          description: The requested attribute.
    patch:
      operationId: updateAttribute
      tags: [Attributes]
      summary: Update an attribute
      description: Updates a single attribute on a given object or list.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated attribute.
  /{target}/{identifier}/attributes/{attribute}/options:
    parameters:
      - $ref: '#/components/parameters/Target'
      - $ref: '#/components/parameters/Identifier'
      - $ref: '#/components/parameters/Attribute'
    get:
      operationId: listSelectOptions
      tags: [Attributes]
      summary: List select options
      description: Lists all select options for a particular select-type attribute.
      responses:
        '200':
          description: A list of select options.
    post:
      operationId: createSelectOption
      tags: [Attributes]
      summary: Create a select option
      description: Adds a new option to a select-type attribute.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The created select option.
  /{target}/{identifier}/attributes/{attribute}/statuses:
    parameters:
      - $ref: '#/components/parameters/Target'
      - $ref: '#/components/parameters/Identifier'
      - $ref: '#/components/parameters/Attribute'
    get:
      operationId: listStatuses
      tags: [Attributes]
      summary: List statuses
      description: Lists all statuses for a particular status-type attribute.
      responses:
        '200':
          description: A list of statuses.
    post:
      operationId: createStatus
      tags: [Attributes]
      summary: Create a status
      description: Adds a new status to a status-type attribute.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The created status.
  /lists:
    get:
      operationId: listLists
      tags: [Lists]
      summary: List all lists
      description: Lists all lists that your access token has access to.
      responses:
        '200':
          description: A list of lists.
    post:
      operationId: createList
      tags: [Lists]
      summary: Create a list
      description: Creates a new list.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The created list.
  /lists/{list}:
    parameters:
      - $ref: '#/components/parameters/List'
    get:
      operationId: getList
      tags: [Lists]
      summary: Get a list
      description: Gets a single list by its ID or slug.
      responses:
        '200':
          description: The requested list.
    patch:
      operationId: updateList
      tags: [Lists]
      summary: Update a list
      description: Updates an existing list.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated list.
  /lists/{list}/entries/query:
    parameters:
      - $ref: '#/components/parameters/List'
    post:
      operationId: listEntries
      tags: [List Entries]
      summary: List entries
      description: Lists entries in a given list, with the option to filter and sort results.
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: A page of list entries.
  /lists/{list}/entries:
    parameters:
      - $ref: '#/components/parameters/List'
    post:
      operationId: createEntry
      tags: [List Entries]
      summary: Create an entry
      description: Adds a record to a list as a new list entry.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The created list entry.
    put:
      operationId: assertEntry
      tags: [List Entries]
      summary: Assert a list entry by parent
      description: Creates or updates a list entry, keyed by its parent record.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The asserted list entry.
  /lists/{list}/entries/{entry_id}:
    parameters:
      - $ref: '#/components/parameters/List'
      - $ref: '#/components/parameters/EntryId'
    get:
      operationId: getEntry
      tags: [List Entries]
      summary: Get a list entry
      description: Gets a single list entry by its entry_id.
      responses:
        '200':
          description: The requested list entry.
    patch:
      operationId: updateEntryAppend
      tags: [List Entries]
      summary: Update a list entry (append multiselect values)
      description: Updates a list entry, appending values to multiselect attributes.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated list entry.
    put:
      operationId: updateEntryOverwrite
      tags: [List Entries]
      summary: Update a list entry (overwrite multiselect values)
      description: Updates a list entry, overwriting values on multiselect attributes.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated list entry.
    delete:
      operationId: deleteEntry
      tags: [List Entries]
      summary: Delete a list entry
      description: Deletes a list entry by its entry_id.
      responses:
        '200':
          description: The list entry was deleted.
  /notes:
    get:
      operationId: listNotes
      tags: [Notes]
      summary: List notes
      description: Lists notes for all records or for a specific record.
      parameters:
        - name: parent_object
          in: query
          schema:
            type: string
        - name: parent_record_id
          in: query
          schema:
            type: string
        - name: limit
          in: query
          schema:
            type: integer
        - name: offset
          in: query
          schema:
            type: integer
      responses:
        '200':
          description: A list of notes.
    post:
      operationId: createNote
      tags: [Notes]
      summary: Create a note
      description: Creates a new note for a given record.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The created note.
  /notes/{note_id}:
    parameters:
      - name: note_id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getNote
      tags: [Notes]
      summary: Get a note
      description: Gets a single note by its note_id.
      responses:
        '200':
          description: The requested note.
    delete:
      operationId: deleteNote
      tags: [Notes]
      summary: Delete a note
      description: Deletes a note by its note_id.
      responses:
        '200':
          description: The note was deleted.
  /tasks:
    get:
      operationId: listTasks
      tags: [Tasks]
      summary: List tasks
      description: Lists all tasks.
      responses:
        '200':
          description: A list of tasks.
    post:
      operationId: createTask
      tags: [Tasks]
      summary: Create a task
      description: Creates a new task.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The created task.
  /tasks/{task_id}:
    parameters:
      - name: task_id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getTask
      tags: [Tasks]
      summary: Get a task
      description: Gets a single task by its task_id.
      responses:
        '200':
          description: The requested task.
    patch:
      operationId: updateTask
      tags: [Tasks]
      summary: Update a task
      description: Updates a task's deadline, completion status, or assignees.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated task.
    delete:
      operationId: deleteTask
      tags: [Tasks]
      summary: Delete a task
      description: Deletes a task by its task_id.
      responses:
        '200':
          description: The task was deleted.
  /comments:
    post:
      operationId: createComment
      tags: [Comments]
      summary: Create a comment
      description: Creates a new comment related to an existing thread, record, or entry.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The created comment.
  /comments/{comment_id}:
    parameters:
      - name: comment_id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getComment
      tags: [Comments]
      summary: Get a comment
      description: Gets a single comment by its comment_id.
      responses:
        '200':
          description: The requested comment.
    delete:
      operationId: deleteComment
      tags: [Comments]
      summary: Delete a comment
      description: Deletes a comment by its comment_id.
      responses:
        '200':
          description: The comment was deleted.
  /threads:
    get:
      operationId: listThreads
      tags: [Threads]
      summary: List threads
      description: Lists threads of comments on a record or list entry.
      parameters:
        - name: record_id
          in: query
          schema:
            type: string
        - name: entry_id
          in: query
          schema:
            type: string
      responses:
        '200':
          description: A list of threads.
  /threads/{thread_id}:
    parameters:
      - name: thread_id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getThread
      tags: [Threads]
      summary: Get a thread
      description: Gets all comments in a thread.
      responses:
        '200':
          description: The requested thread with its comments.
  /webhooks:
    get:
      operationId: listWebhooks
      tags: [Webhooks]
      summary: List webhooks
      description: Gets all of the webhooks in your workspace.
      responses:
        '200':
          description: A list of webhooks.
    post:
      operationId: createWebhook
      tags: [Webhooks]
      summary: Create a webhook
      description: Creates a webhook and its associated event subscriptions.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The created webhook.
  /webhooks/{webhook_id}:
    parameters:
      - name: webhook_id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getWebhook
      tags: [Webhooks]
      summary: Get a webhook
      description: Gets a single webhook by its webhook_id.
      responses:
        '200':
          description: The requested webhook.
    patch:
      operationId: updateWebhook
      tags: [Webhooks]
      summary: Update a webhook
      description: Updates a webhook and its associated subscriptions.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: The updated webhook.
    delete:
      operationId: deleteWebhook
      tags: [Webhooks]
      summary: Delete a webhook
      description: Deletes a webhook by its webhook_id.
      responses:
        '200':
          description: The webhook was deleted.
  /workspace_members:
    get:
      operationId: listWorkspaceMembers
      tags: [Workspace Members]
      summary: List workspace members
      description: Lists all workspace members in the workspace.
      responses:
        '200':
          description: A list of workspace members.
  /workspace_members/{workspace_member_id}:
    parameters:
      - name: workspace_member_id
        in: path
        required: true
        schema:
          type: string
    get:
      operationId: getWorkspaceMember
      tags: [Workspace Members]
      summary: Get a workspace member
      description: Gets a single workspace member by its ID.
      responses:
        '200':
          description: The requested workspace member.
  /self:
    get:
      operationId: identifySelf
      tags: [Meta]
      summary: Identify
      description: >-
        Identifies the current access token, the workspace it is linked to, the
        authorizing member, and any permissions/scopes it holds.
      responses:
        '200':
          description: The access token identity and permissions.
        '401':
          $ref: '#/components/responses/Unauthorized'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: Attio access token (API key or OAuth 2.0 bearer token) with the required scopes.
  parameters:
    Object:
      name: object
      in: path
      required: true
      description: The object ID or slug (for example people, companies, deals, or a custom object).
      schema:
        type: string
    RecordId:
      name: record_id
      in: path
      required: true
      schema:
        type: string
    Attribute:
      name: attribute
      in: path
      required: true
      description: The attribute ID or slug.
      schema:
        type: string
    Target:
      name: target
      in: path
      required: true
      description: Whether the attribute belongs to an object or a list.
      schema:
        type: string
        enum: [objects, lists]
    Identifier:
      name: identifier
      in: path
      required: true
      description: The ID or slug of the object or list the attribute belongs to.
      schema:
        type: string
    List:
      name: list
      in: path
      required: true
      description: The list ID or slug.
      schema:
        type: string
    EntryId:
      name: entry_id
      in: path
      required: true
      schema:
        type: string
  responses:
    Unauthorized:
      description: The access token is missing, invalid, or lacks the required scope.
    NotFound:
      description: The requested resource was not found.