---
title: "Create Object Sync Binding"
method: POST
path: "/integrations/object-sync/bindings"
tags: ["Integrations"]
---

# Create Object Sync Binding

`POST /integrations/object-sync/bindings`

## Request

- Base URL: `https://be.graph8.com/api/v1`
- URL: `https://be.graph8.com/api/v1/integrations/object-sync/bindings`
- Auth: HTTP bearer

Create a one-direction sync of a CRM object into (pull) or from (push) a graph8 custom object.

The sync acts as the person who saved it on every run, so it needs a graph8 Owner or Admin who can edit records.

## Headers

- `Authorization` string, nullable
- `X-Target-Org-Id` string, nullable

## Request body

- CrmObjectSyncBindingCreateRequest: Create a one-direction sync of a CRM object into (pull) or from (push) a graph8 custom object.
  - `connection_id` string, required
  - `direction` 'pull' | 'push', required
  - `crm_object_id` string, required
  - `object_definition_id` string, uuid, required
  - `match` ObjectSyncMatch, required: The explicit match key: a CRM field and a unique graph8 field.
    - `crm_field` string, required
    - `attribute_id` string, uuid, required
  - `fields` ObjectSyncFieldRule[], required
    - `crm_field` string, required
    - `attribute_id` string, uuid, required
    - `authority` 'crm' | 'graph8' | 'newest', nullable
    - `restricted_acknowledged` boolean
  - `relationships` ObjectSyncRelationshipRule[]
    - `relationship_definition_id` string, uuid, required
    - `target_crm_object_id` string, required
    - `crm_field` string, nullable
    - `authority` 'crm' | 'graph8', nullable
  - `delete_policy` 'ignore' | 'archive'
  - `enabled` boolean
  - `acknowledged_deletions` integer, nullable

## Response `201`

Successful Response

- ApiResponseCrmObjectSyncPayload
  - `data` CrmObjectSyncPayload, required: An object-sync answer: capability, setup defaults, a binding, a run, a conflict list or a resolution.
  - `pagination` PaginationMeta
    - `page` integer, required: Current page number (1-indexed)
    - `limit` integer, required: Items per page
    - `total` integer, required: Total number of items
    - `has_next` boolean, required: Whether there are more pages
    - `next_cursor` string, nullable: Opaque cursor for the next page; null when there are no more items. Pass it back as the `cursor` query param to fetch the following page without computing page numbers.
    - `total_available` integer, nullable: Search endpoints only: how many records really match, when known. Can be larger than `total`, which is capped at the 10,000 results that can be paged. For company search this is a distinct-company estimate. Null when unknown; absent outside search.
    - `total_is_lower_bound` boolean, nullable: Search endpoints only: true when more records match than `total` shows (the result set is larger than the 10,000 results that can be paged). Absent outside search.
    - `notes` string[], nullable: Search endpoints only: plain-language notes about the result, e.g. that more records match than can be paged, or that a reversed `between` range was put in order.

## Other responses

- `422`: Validation Error

---

[API](https://skmtc.dev/graph8/apis/graph8-developer-api.md) · [All operations](https://skmtc.dev/graph8/apis/graph8-developer-api/llms.txt) · [OpenAPI document](https://skmtc.dev/graph8/apis/graph8-developer-api/revisions/2e7cfa0ca921?raw)
