All requests to the Sync API endpoints must be authenticated. You can easily reuse access tokens you might have used during the calls to the REST API. Just make sure they’re tagged with the sync permission scope.

In addition to the Authorization header, you must provide the UUID for the device for which you want to perform synchronization, within the X-Basecrm-Device-UUID. The UUID must not change between synchronization sessions. There is a limit of 100 active synchronization sessions.

Authorization: Bearer $ACCESS_TOKENX-Basecrm-Device-UUID: $CLIENT_DEVICE_UUID

Start Synchronization Flow

POST /v2/sync/start

This is the first endpoint to call, in order to start a new synchronization session.

If you get a 204 response, there is nothing new to download and you can safely stop the flow. If there is data to synchronize, you will get a 201 response.

The response is the synchronization session object with an embedded array of queues.

The sync_session object will include the following fields:

ParameterDescription
idUnique identifier of the synchronization session.
queuesAn array of queues to synchronize. At this moment the array will include only a single item - the main queue.

The sync_queue fields:

ParameterDescription
nameName of the queue.
pagesNumber of pages to request.
total_countTotal number of items in the queue to synchronize.

Allowed for

  • Agents
  • Admins

Using curl

curl -v -X POST https://api.getbase.com/v2/sync/start \-H "Accept: application/json" \-H "X-Basecrm-Device-UUID: $CLIENT_DEVICE_UUID" \-H "Authorization: Bearer $ACCESS_TOKEN"

Example Response

HTTP/1.1 201 Created
Content-Type: application/json
{  "data": {    "id": "$SESSION_ID",    "queues": [      {        "data": {          "name": "main",          "pages": 1,          "total_count": 2        },        "meta": {          "type": "sync_queue",          "links": {            "self": "https://api.getbase.com/v2/sync/$SESSION_ID/queues/main"          }        }      }    ]  },  "meta": {    "type": "sync_session"  }}

Get data from queue

GET /v2/sync/:session_id/queues/main

Fetch fresh data from the main queue.

The queue holds only the freshest data, there are no historical data stored. Only to make a point, imagine a case when, between synchronization sessions, someone creates a lead and then updates its representation. You will get only the freshest data for the lead.

Deleted resources will include only ids, and you should treat it as an instruction to perform local delete.

Once there is no more data to synchronize you will get a 204 response, otherwise you get 200.

A successfull response will include an array of resources, you are already fimiliar with, and additional Sync related attributes within meta/sync object.

The sync meta object fields:

ParameterDescription
event_typeAn eventy type. Treat it as a hint. Possible values: created, updated, deleted.
ack_keyAn acknowledgement key.
revisionData revision.

The top level meta attribute includes a few attributes that may hint your syncing process.

ParameterDescription
type"collection"
countNumber of objects returned in current request.
count_leftNumber of objects left to sync.
failed_objectsItems that failed te be fetched in current request.

failed_objects is a list of items which should have been included but for some reasons weren’t. Every item has these attributes attached:

ParameterDescription
idNumeric id value
typeText representing type of the failed object, like lead

Example failed_objects might look like:

[{"type": "deal", "id": 1}, {"type": "lead", "id": 2}]

Allowed for

  • Agents
  • Admins

Using curl

curl -v -X GET https://api.getbase.com/v2/sync/:session_id/queues/main \-H "Accept: application/json" \-H "X-Basecrm-Device-UUID: $CLIENT_DEVICE_UUID" \-H "Authorization: Bearer $ACCESS_TOKEN"

Example Response

HTTP/1.1 200 OK
Content-Type: application/json
{  "items": [    {      "data": {        "id": 1,        "creator_id": 1,        "name": "Our website",        "updated_at": "2015-05-07T11:44:01Z",        "created_at": "2014-08-27T16:32:57Z"      },      "meta": {        "type": "source",        "sync": {          "event_type": "updated",          "ack_key": "Source-976368-1375200190",          "revision": 1375200190        }      }    },    {      "data": {        "id": 3      },      "meta": {        "type": "source",        "sync": {          "event_type": "deleted",          "ack_key": "Source-976369-0",          "revision": 0        }      }    }  ],  "meta": {    "type": "collection",    "count": 2,    "count_left": 0,    "failed_objects": [
    ]  }}

Acknowledge received data

POST /v2/sync/ack

Send acknowledgement keys, to let the Sync service know which data you have.

Sent acknowledgement keys are processed in a background, so if some acks are left out for processing and you start another synchronization flow you might get data from a previous session.

AttributeTypeMandatoryDescription
ack_keysarraytrueA list of acknowledgement keys.

Allowed for

  • Agents
  • Admins

Using curl

curl -v -X POST https://api.getbase.com/v2/sync/ack \-H "Content-Type: application/json" \-H "X-Basecrm-Device-UUID: $CLIENT_DEVICE_UUID" \-H "Authorization: Bearer $ACCESS_TOKEN" \-d '{  "data": {    "ack_keys": [      "Source-976368-1375200190",      "Source-976369-0"    ]  }}'

Example Response

HTTP/1.1 202 Accepted