---
title: "Get Sync Draft"
method: GET
path: "/syncs/{syncId}/drafts/{draftId}"
---

# Get Sync Draft

`GET /syncs/{syncId}/drafts/{draftId}`

## Request

- Base URL: `https://api.hightouch.com/api/v1`
- URL: `https://api.hightouch.com/api/v1/syncs/{syncId}/drafts/{draftId}`
- Auth: HTTP bearer

Retrieve a sync draft with the sync as it is now and as approval would
leave it. Send its `draftVersion` and `resourceVersion` to approve it.

## Path parameters

- `syncId` number, double, required
- `draftId` string, required

## Response `200`

Ok

- SyncDraftDetail
  - `id` string, required: The draft's id
  - `syncId` string, required: The id of the sync the draft changes
  - `operation` 'create' | 'update', required: `create` publishes a new sync, `update` changes an existing one
  - `status` 'pending' | 'approved' | 'rejected' | 'canceled', required: The state of a sync draft. New values may be added, so treat an unknown value as closed.
  - `requestedBy` UserReference, required: The Hightouch user who created or last updated a resource. Changes made with an API key are attributed to the user who created the key.
    - `id` number, double, required: The user's id
    - `name` string, required: The user's name
    - `email` string, required: The user's email address
  - `requestedApprovers` UserReference[], required: The users asked to review the draft
    - `id` number, double, required: The user's id
    - `name` string, required: The user's name
    - `email` string, required: The user's email address
  - `requestComment` string, nullable, required: The comment the requester left for reviewers
  - `createdAt` string, date-time, required: The timestamp when the draft was created
  - `updatedAt` string, date-time, required: The timestamp when the draft last changed
  - `reviewedBy` UserReference, required: The Hightouch user who created or last updated a resource. Changes made with an API key are attributed to the user who created the key.
    - `id` number, double, required: The user's id
    - `name` string, required: The user's name
    - `email` string, required: The user's email address
  - `reviewedAt` string, date-time, nullable, required: The timestamp when the draft was approved or rejected
  - `reviewMetadata` object, nullable, required: The metadata sent with the approval or rejection
    - `extId` string, required
  - `current` Sync, required: Syncs define how data from models are mapped to destinations. Each time a sync runs, Hightouch calculates the rows that have changed since the last run, and syncs them to Sync's destination.
    - `id` number, double, required: The sync's id
    - `slug` string, required: The sync's slug
    - `workspaceId` number, double, required: The id of the workspace that the sync belongs to
    - `createdAt` string, date-time, required: The timestamp when the sync was created
    - `updatedAt` string, date-time, required: The timestamp when the sync was last updated
    - `createdBy` UserReference, required: The Hightouch user who created or last updated a resource. Changes made with an API key are attributed to the user who created the key.
      - `id` number, double, required: The user's id
      - `name` string, required: The user's name
      - `email` string, required: The user's email address
    - `updatedBy` UserReference, required: The Hightouch user who created or last updated a resource. Changes made with an API key are attributed to the user who created the key.
      - `id` number, double, required: The user's id
      - `name` string, required: The user's name
      - `email` string, required: The user's email address
    - `destinationId` number, double, required: The id of the Destination that sync is connected to
    - `modelId` number, double, required: The id of the Model that sync is connected to
    - `configuration` object, required: The sync's configuration. This specifies how data is mapped, among other configuration. The schema depends on the destination type. For a sync bound to a sync template this is the effective configuration: the template's configuration with this sync's `syncTemplateOverrides` applied. Consumers should NOT make assumptions on the contents of the configuration. It may change as Hightouch updates its internal code.
    - `schedule` object, nullable, required: The scheduling configuration. It can be triggered based on several ways: Interval: the sync will be triggered based on certain interval(minutes/hours/days/weeks) Cron: the sync will be triggered based on cron expression https://en.wikipedia.org/wiki/Cron. Visual: the sync will be triggered based a visual cron configuration on UI DBT-cloud: the sync will be triggered based on a dbt cloud job Match Booster (type "match_booster"): the sync will be triggered after each Match Booster enrichment run of its model completes. Requires the model to have Match Booster enabled, and takes no inner schedule payload.
      - `schedule` union
        - IntervalSchedule
          - `interval` Interval, required
            - `unit` 'minute' | 'hour' | 'day' | 'week', required
            - `quantity` number, double, required
        - CronSchedule
          - `expression` string, required
        - VisualCronSchedule
          - `expressions` object[], required
            - `days` RecordDayBooleanOrUndefined, required: Construct a type with a set of properties K of type T
              - …
            - `time` string, required
        - DBTSchedule
          - `account` object, required
            - `id` string, required
          - `job` object, required
            - `id` string, required
      - `type` string, required
    - `status` 'disabled' | 'pending' | 'cancelled' | 'failed' | 'queued' | 'success' | 'warning' | 'querying' | 'processing' | 'reporting' | 'interrupted', required: SyncStatus
    - `disabled` boolean, required: Whether the sync has been disabled by the user.
    - `lastRunAt` string, date-time, nullable, required: The timestamp of the last sync run
    - `referencedColumns` string[], required: The reference column that sync depends on to sync data from source
    - `primaryKey` string, required: The primary key that sync uses to identify data from source
    - `externalSegment` object, required: The user facing ID for any created lists or audiences in the sync destination
      - `id` string
    - `tags` object, required: The tags of the sync
    - `syncTemplateId` number, double, nullable, required: The id of the sync template this sync is bound to, or null when the sync owns its configuration. A bound sync takes its destination and configuration from the template and follows later changes to the template; `configuration` is the effective merged configuration and `syncTemplateOverrides` holds this sync's own values.
    - `syncTemplateOverrides` object, nullable, required: The template configuration fields this sync overrides, keyed by configuration field path (for example "externalIdMapping" or "target.schema"). Null when the sync is not bound to a sync template or has no overrides.
  - `proposed` Sync, required: Syncs define how data from models are mapped to destinations. Each time a sync runs, Hightouch calculates the rows that have changed since the last run, and syncs them to Sync's destination.
    - `id` number, double, required: The sync's id
    - `slug` string, required: The sync's slug
    - `workspaceId` number, double, required: The id of the workspace that the sync belongs to
    - `createdAt` string, date-time, required: The timestamp when the sync was created
    - `updatedAt` string, date-time, required: The timestamp when the sync was last updated
    - `createdBy` UserReference, required: The Hightouch user who created or last updated a resource. Changes made with an API key are attributed to the user who created the key.
      - `id` number, double, required: The user's id
      - `name` string, required: The user's name
      - `email` string, required: The user's email address
    - `updatedBy` UserReference, required: The Hightouch user who created or last updated a resource. Changes made with an API key are attributed to the user who created the key.
      - `id` number, double, required: The user's id
      - `name` string, required: The user's name
      - `email` string, required: The user's email address
    - `destinationId` number, double, required: The id of the Destination that sync is connected to
    - `modelId` number, double, required: The id of the Model that sync is connected to
    - `configuration` object, required: The sync's configuration. This specifies how data is mapped, among other configuration. The schema depends on the destination type. For a sync bound to a sync template this is the effective configuration: the template's configuration with this sync's `syncTemplateOverrides` applied. Consumers should NOT make assumptions on the contents of the configuration. It may change as Hightouch updates its internal code.
    - `schedule` object, nullable, required: The scheduling configuration. It can be triggered based on several ways: Interval: the sync will be triggered based on certain interval(minutes/hours/days/weeks) Cron: the sync will be triggered based on cron expression https://en.wikipedia.org/wiki/Cron. Visual: the sync will be triggered based a visual cron configuration on UI DBT-cloud: the sync will be triggered based on a dbt cloud job Match Booster (type "match_booster"): the sync will be triggered after each Match Booster enrichment run of its model completes. Requires the model to have Match Booster enabled, and takes no inner schedule payload.
      - `schedule` union
        - IntervalSchedule
          - `interval` Interval, required
            - `unit` 'minute' | 'hour' | 'day' | 'week', required
            - `quantity` number, double, required
        - CronSchedule
          - `expression` string, required
        - VisualCronSchedule
          - `expressions` object[], required
            - `days` RecordDayBooleanOrUndefined, required: Construct a type with a set of properties K of type T
              - …
            - `time` string, required
        - DBTSchedule
          - `account` object, required
            - `id` string, required
          - `job` object, required
            - `id` string, required
      - `type` string, required
    - `status` 'disabled' | 'pending' | 'cancelled' | 'failed' | 'queued' | 'success' | 'warning' | 'querying' | 'processing' | 'reporting' | 'interrupted', required: SyncStatus
    - `disabled` boolean, required: Whether the sync has been disabled by the user.
    - `lastRunAt` string, date-time, nullable, required: The timestamp of the last sync run
    - `referencedColumns` string[], required: The reference column that sync depends on to sync data from source
    - `primaryKey` string, required: The primary key that sync uses to identify data from source
    - `externalSegment` object, required: The user facing ID for any created lists or audiences in the sync destination
      - `id` string
    - `tags` object, required: The tags of the sync
    - `syncTemplateId` number, double, nullable, required: The id of the sync template this sync is bound to, or null when the sync owns its configuration. A bound sync takes its destination and configuration from the template and follows later changes to the template; `configuration` is the effective merged configuration and `syncTemplateOverrides` holds this sync's own values.
    - `syncTemplateOverrides` object, nullable, required: The template configuration fields this sync overrides, keyed by configuration field path (for example "externalIdMapping" or "target.schema"). Null when the sync is not bound to a sync template or has no overrides.
  - `changedFields` string[], required: The top-level sync fields that the draft changes
  - `draftVersion` string, required: Send as `expectedDraftVersion` to approve exactly this version of the draft
  - `resourceVersion` string, required: Send as `expectedResourceVersion` to approve only if the sync has not changed
  - `relatedDrafts` RelatedDraft[], required
    - `id` string, required
    - `modelId` string, required
    - `operation` 'create' | 'update', required
    - `status` 'pending' | 'approved' | 'rejected' | 'canceled', required: The state of a sync draft. New values may be added, so treat an unknown value as closed.

## Other responses

- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not found

## Changes

- **2026-10-14** `4ea0926df6e4`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/hightouch/apis/hightouch-api/changes/syncs/:syncId/drafts/:draftId/get.md)

---

[API](https://skmtc.dev/hightouch/apis/hightouch-api.md) - [All operations](https://skmtc.dev/hightouch/apis/hightouch-api/llms.txt) - [OpenAPI document](https://skmtc.dev/hightouch/apis/hightouch-api/revisions/7f9793951e4f?raw)
