> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.tryenvoy.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.tryenvoy.ai/_mcp/server.

# offer.updated

POST 

Triggered when an offer is accepted or rejected

Reference: https://docs.tryenvoy.ai/api-reference/endpoints/offer-updated

## Request

### Headers

- `webhook-id` (string, required) — Message ID (`msg_…`), the same on every retry of this message. Use it to skip duplicates.
- `webhook-timestamp` (string, required) — Unix time the message was signed. Reject messages more than 5 minutes old.
- `webhook-signature` (string, required) — `v1,<base64 HMAC-SHA256>` of `{webhook-id}.{webhook-timestamp}.{raw body}`, keyed with the base64-decoded part of your signing secret after `whsec_`. Several signatures may be space-separated during a secret rotation; accept the message if any one matches.

### Payload

- `id` (string, required) — Message ID; equals the webhook-id header
- `type` ("offer.updated", required)
- `timestamp` (datetime, required)
- `data` (OfferResponse, required) — v1 offer response - wraps domain OfferRead with prefixed IDs.

## Types

### OfferResponse

v1 offer response - wraps domain OfferRead with prefixed IDs.

- `id` (string, required)
- `tms_load_id` (string, required)
- `load_id` (string, required)
- `offer_amount` (double, required)
- `status` (enum, required)
  - Allowed values: `pending`, `accepted`, `rejected`
- `source` (string, required)
- `created_at` (datetime, required)
- `updated_at` (datetime, required)
- `carrier_id` (string, optional, nullable)
- `contact_id` (string, optional, nullable)
- `call_id` (string, optional, nullable)
- `email_message_id` (string, optional, nullable)
- `notes` (string, optional, nullable)
- `channel` (enum, optional, nullable) — Which conversation produced the offer: voice (a call), email, or messaging (WhatsApp). Null when a rep or an API client entered it.
  - Allowed values: `voice`, `email`, `messaging`
- `accepted_at` (datetime, optional, nullable) — When the load was booked on this offer
- `created_by_id` (string, optional, nullable)
- `updated_by_id` (string, optional, nullable)
- `truck_number` (string, optional, nullable)
- `trailer_number` (string, optional, nullable)
- `driver_name` (string, optional, nullable)
- `driver_phone` (string, optional, nullable)
- `load_number` (string, optional, nullable)
- `carrier` (CarrierResponse, optional, nullable) — v1 carrier response - wraps domain CarrierModel with prefixed IDs.
- `contact_name` (string, optional, nullable)
- `contact_phone` (string, optional, nullable)
- `email_conversation_id` (string, optional, nullable)
- `rep_name` (string, optional, nullable)

### CarrierResponse

v1 carrier response - wraps domain CarrierModel with prefixed IDs.

- `id` (string, required)
- `name` (string, required)
- `mc_number` (string, optional, nullable)
- `dot_number` (string, optional, nullable)
- `email` (string, optional, nullable)
- `phone` (string, optional, nullable)
- `dispatcher_name` (string, optional, nullable)
- `dispatcher_phone` (string, optional, nullable)
- `dispatcher_email` (string, optional, nullable)
- `is_active` (boolean, optional, default: true)
- `tms_status` (string, optional, nullable) — Carrier status as reported by the source TMS (e.g. DNL). Read by the inbound email gate when the organization opts in to operational restriction notices for inactive carriers with this status.
- `provider` (string, optional, nullable)
- `ingestion_method` (string, optional, nullable)
- `equipment_types` (list of enum, optional, nullable)
  - Allowed values: `VAN`, `REEFER`, `FLATBED`, `STEPDECK`, `RGN`, `CONESTOGA`, `BOX_TRUCK`, `CONTAINER`, `INTERMODAL`, `POWER_ONLY`, `TANKER`, `LOWBOY`, `HOTSHOT`, `AUTO_CARRIER`, `DRY_BULK`, `DRY_TEAM`, `REEFER_TEAM`, `LTL`, `OTHER`, `VAN/REEFER`
- `insurance_expiration` (datetime, optional, nullable)
- `w9_on_file` (boolean, optional, nullable)
- `authorized_for_hire` (boolean, optional, nullable)
- `on_time_pickup_pct` (double, optional, nullable) — On-time pickup percentage (0-100 scale)
- `on_time_delivery_pct` (double, optional, nullable) — On-time delivery percentage (0-100 scale)
- `tracking_compliance_pct` (double, optional, nullable)
- `avg_response_time_min` (double, optional, nullable)
- `total_loads_hauled` (integer, optional, nullable)
- `is_onboarded` (boolean, optional, default: false)
- `routing_guide_tier` (integer, optional, nullable) — Global routing-guide priority tier (1 = highest, 4 = lowest). None = untiered.
- `lane_routing_guide_tier` (integer, optional, nullable) — Strongest routing-guide tier this carrier holds on the lane the list was filtered to (1 = highest). Null when the list has no lane filter, or the carrier is untiered on it.
- `effective_routing_guide_tier` (integer, optional, nullable) — The tier that actually applies: `lane_routing_guide_tier` when set, else `routing_guide_tier`. Equal to the global tier on an unfiltered list.
- `carrier_rep_user_id` (string, optional, nullable)
- `carrier_rep_name` (string, optional, nullable)
- `carrier_rep_email` (string, optional, nullable)
- `is_verified` (boolean, optional, default: false)
- `verified_date` (datetime, optional, nullable)
- `compliance_status` (enum, optional) — The verdict of Envoy's most recent compliance check on the carrier: PASSED or BLOCKED, or UNVERIFIED when no check has run yet or the last check could not reach a result.
  - Allowed values: `PASSED`, `BLOCKED`, `UNVERIFIED`
- `stop_contact_requested_at` (datetime, optional, nullable) — When the carrier last asked not to be contacted; Envoy stops contacting them
- `tms_carrier_id` (string, optional, nullable) — The carrier's ID in your TMS
- `last_verified_at` (datetime, optional, nullable)
- `last_verified_provider` (string, optional, nullable) — Which compliance provider issued the most recent verification (e.g. Highway or MyCarrierPackets). Distinct from `provider`, which is the system the carrier record came from. Null when no verification has run, or when the provider was not recorded.
- `created_at` (datetime, optional, nullable)
- `updated_at` (datetime, optional, nullable)