---
title: "Get one contract"
method: GET
path: "/contracts/{contract_id}"
tags: ["Contracts"]
---

# Get one contract

`GET /contracts/{contract_id}`

One contract envelope: the campaign and creator it belongs to, the frozen `terms` the document was rendered from (deliverables, reward structure, usage rights, dates), the signing `status`, and `brand_signed_at` / `creator_signed_at` — null until that party signs. `last_error` carries the delivery failure reason when `status` is `delivery_failed`.

404 when the contract does not belong to this shop. Single-shop only.

## Path parameters

- `contract_id` string, uuid, required — Contract id (UUID).

## Response `200`

Successful Response

- ContractEnvelopeOut — Always includes ``terms`` so the FE can render the preview without a second round-trip.
  - `id` string, uuid, required
  - `batch_id` string, uuid, required
  - `campaign_id` integer, required
  - `campaign_name` string, required
  - `creator_id` integer, required
  - `creator_name` string, required
  - `creator_handle` string, required
  - `contract_title` string, required
  - `template_source` 'standard', required
  - `terms` ContractTerms, required
    - `campaign_type` 'retainer' | 'challenge' | 'leaderboard' | 'reimbursement', required
    - `brand_name` string, required
    - `brand_representative_name` string, required
    - `deliverables` integer, required
    - `posting_platform` 'TikTok' | 'Instagram' | 'YouTube' | 'TikTok+Instagram'
    - `posting_requirements` string
    - `posting_start_date` string, date, required
    - `effective_date` string, date, required
    - `expiry_date` string, date, required
    - `products` ContractProduct[]
      - `product_id` string, required
      - `product_name` string, nullable
    - `all_products` boolean
    - `require_video_link_email` boolean
    - `video_link_email` string, nullable
    - `commission_pct` number, nullable
    - `expenses_reimbursable` boolean
    - `revision_rounds` 0 | 1 | 2
    - `include_usage_rights` boolean
    - `usage_rights_months` integer
    - `usage_rights_duration_days` integer
    - `usage_rights_scope` 'organic_only' | 'organic_and_paid' | 'paid_only'
    - `usage_exclusivity_enabled` boolean
    - `usage_exclusivity_months` integer
    - `agreement_clause` string, nullable
    - `termination_notice_days` integer
    - `governing_law_jurisdiction` string
    - `reward` union, required
      - RetainerReward
        - `kind` 'retainer', required
        - `mode` 'fixed' | 'tiered', required
        - `payment_per_post` union
          - number
          - string
        - `tiers` RetainerTier[], nullable
          - `name` string, required
          - `retainer` union, required
            - number
            - string
          - `gmv_threshold` number, required
        - `gmv_bonus_tiers` GmvBonusTier[], nullable
          - `gmv_threshold` number, required
          - `bonus_amount` union, required
            - number
            - string
        - `recurring` boolean
        - `payment_schedule` 'one_time' | 'monthly'
        - `payment_due_days` integer
        - `minimum_gmv_floor` number, nullable
      - ChallengeReward
        - `kind` 'challenge', required
        - `metric_type` 'gmv' | 'views' | 'video_count' | 'gmv_videos' | 'live_gmv' | 'sessions' | 'sessions_and_live_gmv', required
        - `payment_tiers` ChallengePaymentTier[], required
          - `threshold` number, required
          - `compensation` union, required
            - number
            - string
          - `videos_required` integer, nullable
          - `sessions_required` integer, nullable
        - `minimum_gate` ChallengeGate
          - `metric` 'video_count' | 'gmv', required
          - `threshold` number, required
        - `gmv_floor` number, nullable
        - `videos_floor` integer, nullable
        - `live_gmv_floor` number, nullable
        - `sessions_floor` integer, nullable
        - `ranking_priority` 'gmv' | 'videos' | 'live_gmv' | 'sessions', nullable
        - `payment_due_days` integer
      - LeaderboardReward
        - `kind` 'leaderboard', required
        - `mode` 'rank' | 'tier', required
        - `contest_ranks` ContestRank[], nullable
          - `rank` integer, required
          - `reward` union, required
            - number
            - string
        - `tiers` LeaderboardTier[], nullable
          - `name` string, required
          - `bonus` union, required
            - number
            - string
          - `threshold` number, required
          - `videos_required` integer, nullable
          - `num_winners` integer, nullable
        - `random_winner_wheel` boolean
        - `scoring_mode` 'single' | 'weighted', nullable
        - `weighted_metrics` ContractWeightedMetric[], nullable
          - `metric_type` 'gmv' | 'avg_views_per_post' | 'views' | 'videos_posted' | 'units_sold' | 'live_gmv' | 'combined_gmv' | 'sessions', required
          - `weight` number, required
        - `metric_type` 'gmv' | 'views' | 'videos_posted' | 'gmv_videos' | 'live_gmv' | 'gmv_and_live_gmv' | 'videos_gmv_and_live_gmv', nullable
        - `gmv_floor` number, nullable
        - `videos_floor` integer, nullable
        - `live_gmv_floor` number, nullable
        - `sessions_floor` integer, nullable
        - `payment_due_days` integer
      - ReimbursementReward
        - `kind` 'reimbursement', required
        - `reimbursement_amount` number, required
        - `reimbursement_bonus` number, nullable
        - `minimum_star_rating` integer, nullable
        - `steps` ReimbursementStep[], required
          - `id` string, required
          - `label` string, required
          - `description` string, required
        - `payment_due_days` integer
  - `status` 'draft' | 'sent' | 'active' | 'expired' | 'voided' | 'delivery_failed', required
  - `brand_signed_at` string, date-time, nullable
  - `creator_signed_at` string, date-time, nullable
  - `effective_date` string, date, required
  - `expiry_date` string, date, required
  - `last_error` string, nullable

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/reacherapp/apis/reacher-data-api.md) · [All operations](https://skmtc.dev/reacherapp/apis/reacher-data-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/reacherapp/reacher-data-api/revisions/5eefff009b5b/schema)
