---
title: "Record a Decision CRM Sync receipt"
method: POST
path: "/api/decision/{decision_id}/crm-sync"
tags: ["CRM Sync"]
---

# Record a Decision CRM Sync receipt

`POST /api/decision/{decision_id}/crm-sync`

## Request

- Base URL: `https://www.decide.fyi`
- URL: `https://www.decide.fyi/api/decision/{decision_id}/crm-sync`
- Auth: API key in header `x-api-key`

Creates a hashed CRM Sync Record linked to the original Decision Record. Keyed writes are atomically claimed: the same key plus the same canonical CRM sync payload replays the original receipt, a concurrent request returns 409 in progress, and the same key plus a different payload returns 409 conflict. Authoritative storage and idempotency failures return 503 without acknowledging an untracked sync receipt.

## Path parameters

- `decision_id` string, required

## Headers

- `x-idempotency-key` string
- `x-request-id` string

## Request body

- DecisionCrmSyncRequest
  - `decision_id` string
  - `sync_status` string, required: Normalized to queued, written, failed, skipped, stale, unknown, or a compact custom status.
  - `sync_direction` 'writeback' | 'inbound' | 'bidirectional'
  - `crm_provider` string, required
  - `crm_object_type` string, required
  - `crm_object_id` string, required
  - `crm_record_url` string
  - `field_mapping` object
  - `mapped_fields` object
  - `decision_record_hash` string
  - `decision_receipt_hash` string
  - `decision_verdict` string
  - `decision_action` string
  - `policy_id` string
  - `policy_version` string
  - `crm_revision` string
  - `crm_modified_at` string
  - `reported_at` string

## Response `200`

Idempotent replay of an existing Decision CRM Sync receipt

- DecisionCrmSyncResult
  - `ok` boolean, required
  - `idempotency_status` string
  - `decision_id` string, required
  - `crm_sync` DecisionCrmSync, required
    - `decision_protocol_version` 'decision_protocol_v1', required
    - `decision_crm_sync_version` 'decision_crm_sync_v1', required
    - `sync_id` string, required
    - `decision_id` string, required
    - `idempotency_key` string
    - `sync_direction` string
    - `sync_status` string, required
    - `crm_target` object, required
    - `field_mapping` object
    - `mapped_fields` object
    - `decision_values` object
    - `sync_input_hash` string
    - `sync_hash` string, required
    - `integrity` object
    - `reported_at` string, required
    - `decision_found` boolean
    - `decision_url` string
    - `verify_url` string

## Other responses

- `201`: Decision CRM Sync recorded
- `401`: API key missing, invalid, inactive, or unauthorized
- `404`: Decision not found in the authenticated caller scope
- `409`: The idempotency key is already in progress, or it was reused with a different canonical payload
- `503`: Decision storage or the upstream decision engine timed out or is temporarily unavailable

---

[API](https://skmtc.dev/decide/apis/decide-decision-api.md) · [All operations](https://skmtc.dev/decide/apis/decide-decision-api/llms.txt) · [OpenAPI document](https://skmtc.dev/decide/apis/decide-decision-api/revisions/caf1d3069dfd?raw)
