> ## Documentation Index
> Fetch the complete documentation index at: https://docs.attio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Merge two records

> Merges two records of the same object together. Where both records have a value for the same attribute, the primary record's value takes precedence.

Merging produces a **new** record, so the `new_record_id` returned will match neither of the records supplied in the request. Both of the original records are marked as merged and can no longer be read or written.

Large merges are completed asynchronously. A `200` response means the merged record is readable immediately. A `202` response means the merge has been accepted but is still being applied, and reading the merged record will return a `404` with the `merge_in_progress` error code until it completes.

This endpoint is not idempotent. Because both original records are marked as merged, repeating the same request returns `404`.

This endpoint is rate limited to 5 requests per second.

This endpoint is in beta. We will aim to avoid breaking changes, but small updates may be made as we roll out to more users.

Required scopes: `record_permission:read-write`, `object_configuration:read`.



## OpenAPI

````yaml https://api.attio.com/openapi/api post /v2/objects/{object}/records/merge
openapi: 3.1.0
info:
  title: Attio API
  version: 2.0.0
  contact:
    name: Attio Support
    email: support@attio.com
    url: https://attio.com/help
servers:
  - url: https://api.attio.com
    description: Production
security:
  - oauth2: []
tags:
  - name: Objects
    description: >-
      Objects are the core data models inside of Attio. They contain standard
      objects, such as
      [people](/rest-api/endpoint-reference/standard-objects/people/list-person-records),
      [companies](/rest-api/endpoint-reference/standard-objects/companies/list-company-records)
      or [deals](/docs/standard-objects-deals), and custom objects that are
      specific to your use-case. See our [objects and lists
      guide](/docs/objects-and-lists) for more information.
  - name: Object views
    description: Object views are saved table or board layouts for an object.
  - name: List views
    description: List views are saved table or board layouts for a list.
  - name: Attributes
    description: >-
      Attributes model properties of objects and lists. Some attributes, such as
      the `name` attribute on a person, are system-defined, while others are
      user-defined. Attributes are one of [many types](/docs/attribute-types)
      such as text, location or select. See our [objects and lists
      guide](/docs/objects-and-lists) for more information.
  - name: Records
    description: >-
      Records are individual instances of objects e.g. a specific
      [person](/rest-api/endpoint-reference/standard-objects/people/list-person-records)
      or
      [company](/rest-api/endpoint-reference/standard-objects/companies/list-company-records).
      See our [objects and lists guide](/docs/objects-and-lists) for more
      information.
  - name: SCIM groups
    description: >-
      SCIM groups represent Attio teams managed through the SCIM provisioning
      protocol.
  - name: SCIM schemas
    description: >-
      SCIM schemas describe the resource types supported by the SCIM service
      provider.
  - name: SCIM users
    description: >-
      SCIM users represent workspace members managed through the SCIM
      provisioning protocol.
  - name: Lists
    description: >-
      Lists are used to model a particular process. A list contains many records
      of a single object type, where each record is represented by an entry.
      Entries contain their own data from attributes defined on the list and
      also data from their parent record. See our [objects and lists
      guide](/docs/objects-and-lists) for more information.
  - name: Meta
    description: Meta endpoints are used to get information about the API token.
  - name: Entries
    description: >-
      Entries are elements in a list that reference a single parent record.
      Entries contain their own data from attributes defined on the list and
      also data from their parent record. See our [objects and lists
      guide](/docs/objects-and-lists) for more information.
  - name: Files
    description: >-
      Files are documents and folders linked to records, stored either in Attio
      or connected via external storage providers.
  - name: Workspace members
    description: >-
      Workspace members represent a user with access to a workspace. Workspace
      members are assigned roles that determine what they can do within the
      workspace.
  - name: Notes
    description: Notes are rich text documents that reference a single parent record.
  - name: Meetings
    description: >-
      Meetings are events synced from your calendar, added manually or added
      from third-party integrations.
  - name: Emails
    description: >-
      Emails are messages synced from connected mailboxes. This API exposes
      their metadata — participants, subject line and timestamps — and never
      their content.
  - name: Call recordings
    description: >-
      Call recordings store video, audio, transcript and speaker information for
      calls. They are linked to meetings.
  - name: Transcripts
    description: >-
      Transcripts contain the speech segments and speaker information for a call
      recording. They are linked to call recordings.
  - name: Tasks
    description: >-
      A task is a defined, actionable item with references to linked records and
      assigned workspace members.
  - name: Webhooks
    description: >-
      Webhooks allow you to listen for changes to data in Attio, for example
      when a record is updated.
  - name: Threads
    description: >-
      Threads are groups of
      [comments](/rest-api/endpoint-reference/comments/get-a-comment) on either
      a record or entry.
  - name: Comments
    description: >-
      Comments are messages on a
      [thread](/rest-api/endpoint-reference/threads/list-threads).
  - name: People
    description: >-
      People are one of the core objects inside of Attio. Person records can be
      added to lists and can be created automatically when syncing your mailbox.
  - name: Companies
    description: >-
      Companies are one of the core objects inside of Attio. Company records can
      be added to lists and can be created automatically when syncing your
      mailbox.
  - name: Users
    description: >-
      Users are an optional standard object that represents a user of your
      system. Users can belong to many workspaces.
  - name: Deals
    description: >-
      Deals are an optional standard object that represent a deal or
      opportunity.
  - name: Workspaces
    description: >-
      Workspaces are an optional standard object that represent a workspace or
      account in your system. Workspaces have many users and can be used to
      model a multi-tenant system. A company record can optionally have multiple
      workspaces.
  - name: SQL
    description: >-
      Query records and list entries across your workspace using SQL. A single
      query can reference any object or list in the workspace.
paths:
  /v2/objects/{object}/records/merge:
    post:
      tags:
        - Records
      summary: Merge two records
      description: >-
        Merges two records of the same object together. Where both records have
        a value for the same attribute, the primary record's value takes
        precedence.


        Merging produces a **new** record, so the `new_record_id` returned will
        match neither of the records supplied in the request. Both of the
        original records are marked as merged and can no longer be read or
        written.


        Large merges are completed asynchronously. A `200` response means the
        merged record is readable immediately. A `202` response means the merge
        has been accepted but is still being applied, and reading the merged
        record will return a `404` with the `merge_in_progress` error code until
        it completes.


        This endpoint is not idempotent. Because both original records are
        marked as merged, repeating the same request returns `404`.


        This endpoint is rate limited to 5 requests per second.


        This endpoint is in beta. We will aim to avoid breaking changes, but
        small updates may be made as we roll out to more users.


        Required scopes: `record_permission:read-write`,
        `object_configuration:read`.
      parameters:
        - schema:
            type: string
            description: A UUID or slug of the object both records belong to.
            example: people
          required: true
          name: object
          in: path
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                data:
                  type: object
                  properties:
                    primary_record_id:
                      type: string
                      format: uuid
                      description: >-
                        The ID of the record to keep values from. Where both
                        records have a value for the same attribute, the primary
                        record's value takes precedence.
                      example: 891dcbfc-9141-415d-9b2a-2238a6cc012d
                    secondary_record_id:
                      type: string
                      format: uuid
                      description: >-
                        The ID of the record to merge into the primary record.
                        Its values are only kept where the primary record has no
                        value for that attribute.
                      example: bf071e1f-6035-429d-b874-d83ea64ea13b
                  required:
                    - primary_record_id
                    - secondary_record_id
                  additionalProperties: false
              required:
                - data
      responses:
        '200':
          description: Success
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      new_record_id:
                        type: string
                        format: uuid
                        description: >-
                          The ID of the merged record. This is a new ID, which
                          will usually match neither of the records supplied in
                          the request.
                        example: f528bd86-8142-4359-9a8c-b651d50a27b1
                    required:
                      - new_record_id
                required:
                  - data
                description: Success
        '202':
          description: >-
            Accepted. The merge has been committed but is still being applied,
            so the merged record is not yet readable.
          content:
            application/json:
              schema:
                type: object
                properties:
                  data:
                    type: object
                    properties:
                      new_record_id:
                        type: string
                        format: uuid
                        description: >-
                          The ID of the merged record. This is a new ID, which
                          will usually match neither of the records supplied in
                          the request.
                        example: f528bd86-8142-4359-9a8c-b651d50a27b1
                    required:
                      - new_record_id
                required:
                  - data
                description: >-
                  Accepted. The merge has been committed but is still being
                  applied, so the merged record is not yet readable.
        '400':
          description: Bad Request
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: number
                    enum:
                      - 400
                  type:
                    type: string
                    enum:
                      - invalid_request_error
                  code:
                    type: string
                    enum:
                      - self_merge
                  message:
                    type: string
                    example: A record cannot be merged into itself.
                required:
                  - status_code
                  - type
                  - code
                  - message
                description: Bad Request
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: number
                    enum:
                      - 403
                  type:
                    type: string
                    enum:
                      - auth_error
                  code:
                    type: string
                    enum:
                      - unauthorized
                  message:
                    type: string
                    example: >-
                      You do not have the necessary permissions to merge these
                      records.
                required:
                  - status_code
                  - type
                  - code
                  - message
                description: Forbidden
        '404':
          description: Not Found
          content:
            application/json:
              schema:
                type: object
                properties:
                  status_code:
                    type: number
                    enum:
                      - 404
                  type:
                    type: string
                    enum:
                      - invalid_request_error
                  code:
                    anyOf:
                      - type: string
                        enum:
                          - not_found
                      - type: string
                        enum:
                          - value_not_found
                  message:
                    type: string
                    example: >-
                      Record with ID "891dcbfc-9141-415d-9b2a-2238a6cc012d" not
                      found.
                required:
                  - status_code
                  - type
                  - code
                  - message
                description: Not Found
      security:
        - oauth2:
            - record_permission:read-write
            - object_configuration:read
components:
  securitySchemes:
    oauth2:
      type: oauth2
      description: This API uses OAuth 2.0 with the authorization code grant flow.
      flows:
        authorizationCode:
          authorizationUrl: https://app.attio.com/authorize
          tokenUrl: https://app.attio.com/oauth/token
          scopes:
            user_management:read: View workspace members.
            user_management:read-write: View workspace members.
            record_permission:read: View, and optionally write, records.
            record_permission:read-write: View, and optionally write, records.
            object_configuration:read: >-
              View, and optionally write, the configuration and attributes of
              objects.
            object_configuration:read-write: >-
              View, and optionally write, the configuration and attributes of
              objects.
            list_entry:read: View, and optionally write, the entries in a list.
            list_entry:read-write: View, and optionally write, the entries in a list.
            list_configuration:read: >-
              View, and optionally write, the configuration and attributes of
              lists.
            list_configuration:read-write: >-
              View, and optionally write, the configuration and attributes of
              lists.
            public_collection:read: >-
              View, and optionally write, both the settings and information
              within public collections.
            public_collection:read-write: >-
              View, and optionally write, both the settings and information
              within public collections.
            private_collection:read: >-
              View, and optionally modify, both the settings and information of
              all collections within the workspace, regardless of their access
              settings.
            private_collection:read-write: >-
              View, and optionally modify, both the settings and information of
              all collections within the workspace, regardless of their access
              settings.
            comment:read: View comments (and threads), and optionally write comments.
            comment:read-write: View comments (and threads), and optionally write comments.
            task:read: View, and optionally write, tasks.
            task:read-write: View, and optionally write, tasks.
            note:read: View, and optionally write, notes.
            note:read-write: View, and optionally write, notes.
            meeting:read: View, and optionally write, meetings.
            meeting:read-write: View, and optionally write, meetings.
            call_recording:read: >-
              View, and optionally write, call recordings, transcripts and
              speakers for meetings.
            call_recording:read-write: >-
              View, and optionally write, call recordings, transcripts and
              speakers for meetings.
            webhook:read: View, and optionally manage, webhooks.
            webhook:read-write: View, and optionally manage, webhooks.
            file:read: View, and upload files.
            file:read-write: View, and upload files.
            email:read: View email metadata. Email content is never exposed.
            email:read-write: View email metadata. Email content is never exposed.

````