{"info":{"_postman_id":"726ddcb4-23ce-40f4-ae7e-b8a38faa2605","name":"Trebu Logistics API","description":"<html><head></head><body><p>Public documentation and examples for the webhooks your Trebu app sends to client endpoints.</p>\n<p>🔐 Authentication</p>\n<ul>\n<li><p>Inbound (client → Trebu): <code>Authorization: Api-Key REPLACE_ME</code></p>\n</li>\n<li><p>Outbound (Trebu → client webhook): <code>X-API-Key: REPLACE_ME</code> plus <code>X-Webhook-Signature: sha256=&lt;hmac&gt;</code> (verify this), <code>X-Webhook-Event</code>, <code>X-Webhook-Timestamp</code></p>\n</li>\n<li><p><code>Content-Type: application/json</code></p>\n</li>\n</ul>\n<p>⏱️ Timeouts &amp; Retries</p>\n<ul>\n<li><p>Trebu times out requests after 30 seconds.</p>\n</li>\n<li><p>Retries up to 3 times on network errors/timeouts with exponential backoff (≈2s → 4s → 8s).</p>\n</li>\n</ul>\n<p>✅ Receiver Expectations</p>\n<ul>\n<li><p>Respond with HTTP 2xx as quickly as possible (ideally &lt; 5s).</p>\n</li>\n<li><p>Prefer JSON body with success status: <code>{ \"success\": true }</code>.</p>\n</li>\n<li><p>Non‑JSON is accepted but discouraged; Trebu will capture status and first 200 chars of text.</p>\n</li>\n</ul>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[],"owner":"9197136","collectionId":"726ddcb4-23ce-40f4-ae7e-b8a38faa2605","publishedId":"2sBY4Qrerj","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"FF6C37"},"publishDate":"2026-07-23T05:02:45.000Z"},"item":[{"name":"Overview & Changelog","item":[],"id":"9df684c9-def2-4cfd-aa50-d6f6731c3c62","description":"<h1 id=\"trebu-webhooks--overview--setup\">Trebu Webhooks — Overview &amp; Setup</h1>\n<p>This collection demonstrates Trebu's webhook <strong>event envelope</strong> and <strong>sample events</strong> for logistics tendering.<br />Use these requests to validate your endpoint and to learn the payload shapes you will receive in production.</p>\n<h2 id=\"what-this-does\">What this does</h2>\n<ul>\n<li><p>Sends <strong>realistic webhook payloads</strong> to your <code>https://example.com/webhooks/trebu</code> with <code>Authorization: Api-Key REPLACE_ME</code>.</p>\n</li>\n<li><p>Uses a consistent envelope: <code>{ \"event\", \"data\" }</code>.</p>\n</li>\n<li><p>Implements a <strong>minimal viable set</strong> of domain events for tendering: load auctions, loads, and bid requests.</p>\n</li>\n<li><p>Provides <strong>schema fields</strong> designed to be forward-compatible: <code>version</code>, <code>schema_version</code>, <code>occurred_at</code>, <code>aggregate</code>, <code>related</code>, <code>payload</code>.</p>\n</li>\n</ul>\n<h2 id=\"single-callback-url-per-client-important\">Single Callback URL per Client (important)</h2>\n<p>Each Trebu <strong>client</strong> can register <strong>one</strong> webhook callback URL at a time. This ensures consistent ordering and simplifies operational controls (retries, backoff, dead-letter handling).</p>\n<ul>\n<li><p>If you attempt to set a different callback URL while one already exists, Trebu will <strong>replace</strong> the previous URL (or reject the change if your tenant enforces admin-only changes).</p>\n</li>\n<li><p>All events for that client will be delivered to the <strong>single configured URL</strong>.</p>\n</li>\n<li><p>For multi-environment setups (e.g., staging vs prod), create <strong>separate clients</strong> and configure a callback URL per client.</p>\n</li>\n</ul>\n<p><strong>Recommended documentation snippet</strong> you can show to your integrators:</p>\n<blockquote>\n<p><strong>Webhook callback URL</strong><br />Trebu delivers all webhook events for your client to a single HTTPS endpoint. Configure this under <em>Settings → Webhooks</em>. If you need multiple destinations, relay events from your endpoint to downstream services. To change the URL, update it in settings; the previous URL will stop receiving events immediately after the change is saved. </p>\n</blockquote>\n<h2 id=\"security--auth\">Security &amp; Auth</h2>\n<ul>\n<li><p><strong>Inbound</strong> requests (client → Trebu) authenticate with <code>Authorization: Api-Key &lt;your_api_key&gt;</code>.</p>\n</li>\n<li><p><strong>Outbound</strong> webhooks (Trebu → your endpoint) are sent with <code>X-API-Key: &lt;your_api_key&gt;</code> and signed with <code>X-Webhook-Signature: sha256=&lt;hmac_sha256_of_raw_body&gt;</code> — verify the signature before trusting the payload.</p>\n</li>\n<li><p>Keep your API key secret; rotate regularly.</p>\n</li>\n<li><p>Optionally, enable IP allowlists.</p>\n</li>\n</ul>\n<h2 id=\"delivery-semantics\">Delivery Semantics</h2>\n<ul>\n<li><p>Delivery is <strong>at-least-once</strong>.</p>\n</li>\n<li><p>Deduplicate by <code>data.id</code>.</p>\n</li>\n<li><p>Respond quickly (≤3s). Use asynchronous processing on your side.</p>\n</li>\n</ul>\n<h2 id=\"schema-versioning\">Schema Versioning</h2>\n<ul>\n<li><p><code>version</code> — semantic event versioning (business meaning)</p>\n</li>\n<li><p><code>schema_version</code> — JSON structure version (MVP: <code>1</code>)</p>\n</li>\n</ul>\n<h2 id=\"local-testing\">Local Testing</h2>\n<ol>\n<li><p>Set <code>https://example.com/webhooks/trebu</code> to your public HTTPS receiver (e.g., ngrok).</p>\n</li>\n<li><p>Set <code>REPLACE_ME</code> to your Trebu API key.</p>\n</li>\n<li><p>Send sample events from each folder to validate parsing and auth.</p>\n</li>\n</ol>\n<hr />\n<h3 id=\"status-legend\">Status Legend</h3>\n<p>✅ Live — Currently available in production<br />🧪 WIP — Work in progress, not yet available in production<br />⚙️ Planned — Designed but not yet scheduled for release</p>\n<h2 id=\"changelog\">Changelog</h2>\n<div class=\"click-to-expand-wrapper is-table-wrapper\"><table>\n<thead>\n<tr>\n<th>Version</th>\n<th>Status</th>\n<th>Notes</th>\n<th>Released</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td><strong>v1</strong></td>\n<td>✅ Live (MVP)</td>\n<td>Initial release of unified Inbound API &amp; Outbound Webhooks. Only <code>load.created</code> webhook is Live; all others are 🧪 WIP.</td>\n<td>2025-11-12</td>\n</tr>\n</tbody>\n</table>\n</div>","_postman_id":"9df684c9-def2-4cfd-aa50-d6f6731c3c62"},{"name":"v1","item":[{"name":"Outbound Webhooks (from Trebu)","item":[{"name":"Load Auction","item":[{"name":"🧪 [WIP]  load_auction.created","id":"036318ce-efef-41ba-8133-f16eefd90fc9","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"load_auction.created\",\n  \"data\": {\n    \"id\": \"evt_0001\",\n    \"version\": 1,\n    \"occurred_at\": \"2025-11-11T17:00:01.000Z\",\n    \"aggregate\": {\n      \"type\": \"load_auction\",\n      \"id\": \"load_auction_7\"\n    },\n    \"related\": {\n      \"load_auction_id\": \"load_auction_7\"\n    },\n    \"payload\": {\n      \"name\": \"Acme Q4 Dedicated Lanes\",\n      \"deadline_at\": \"2025-11-12T23:00:00.000Z\",\n      \"timezone\": \"America/Monterrey\"\n    },\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"load-auction-·-created\">load auction · created</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />When a new load auction (tender batch) is created and made visible to Trebu.</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong>  </p>\n<ul>\n<li>Delivery is at-least-once (duplicates are possible).  </li>\n<li>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:  </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"load_auction.created\", \"data\": { ... } }\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><code>id</code> — unique event id</li>\n<li><code>version</code> — event semantic version</li>\n<li><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</li>\n<li><code>occurred_at</code> — RFC 3339 timestamp</li>\n<li><code>aggregate</code> — primary entity for ordering and context</li>\n<li><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</li>\n<li><code>payload</code> — event-specific content (see sample body)</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong>  </p>\n<ul>\n<li>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).  </li>\n<li>(Optional) HMAC signatures may be added in a later version for body integrity.</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"036318ce-efef-41ba-8133-f16eefd90fc9"},{"name":"🧪 [WIP]  load_auction.options_exhausted","id":"242e470f-cf57-413f-a056-b745ef8d10cb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"load_auction.options_exhausted\",\n  \"data\": {\n    \"id\": \"evt_0004\",\n    \"version\": 1,\n    \"occurred_at\": \"2025-11-11T17:00:04.000Z\",\n    \"aggregate\": {\n      \"type\": \"load_auction\",\n      \"id\": \"load_auction_7\"\n    },\n    \"related\": {\n      \"load_auction_id\": \"load_auction_7\"\n    },\n    \"payload\": {\n      \"note\": \"All posted loads have been awarded\"\n    },\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"load-auction-·-options-exhausted\">load auction · options exhausted</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />When all posted loads have been awarded or no further carrier options are available.</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong>  </p>\n<ul>\n<li>Delivery is at-least-once (duplicates are possible).  </li>\n<li>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:  </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"load_auction.options_exhausted\", \"data\": { ... } }\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><code>id</code> — unique event id</li>\n<li><code>version</code> — event semantic version</li>\n<li><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</li>\n<li><code>occurred_at</code> — RFC 3339 timestamp</li>\n<li><code>aggregate</code> — primary entity for ordering and context</li>\n<li><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</li>\n<li><code>payload</code> — event-specific content (see sample body)</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong>  </p>\n<ul>\n<li>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).  </li>\n<li>(Optional) HMAC signatures may be added in a later version for body integrity.</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"242e470f-cf57-413f-a056-b745ef8d10cb"},{"name":"🧪 [WIP]  load_auction.carrier_assigned","id":"6c24d938-2376-49b5-a81b-1df84547fd6b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"load_auction.carrier_assigned\",\n  \"data\": {\n    \"id\": \"evt_0002\",\n    \"version\": 1,\n    \"occurred_at\": \"2025-11-11T17:00:02.000Z\",\n    \"aggregate\": {\n      \"type\": \"load_auction\",\n      \"id\": \"load_auction_7\"\n    },\n    \"related\": {\n      \"load_auction_id\": \"load_auction_7\",\n      \"load_id\": \"ld_123133\",\n      \"carrier_id\": \"cr_45234\"\n    },\n    \"payload\": {\n      \"opened_at\": \"2025-11-11T17:01:00.000Z\"\n    },\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"load-auction-·-carrier-assigned\">load auction · carrier assigned</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />When the auction opens a load to a specific carrier or assigns it contextually (MVP semantics).</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong>  </p>\n<ul>\n<li>Delivery is at-least-once (duplicates are possible).  </li>\n<li>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:  </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"load_auction.carrier_assigned\", \"data\": { ... } }\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><code>id</code> — unique event id</li>\n<li><code>version</code> — event semantic version</li>\n<li><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</li>\n<li><code>occurred_at</code> — RFC 3339 timestamp</li>\n<li><code>aggregate</code> — primary entity for ordering and context</li>\n<li><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</li>\n<li><code>payload</code> — event-specific content (see sample body)</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong>  </p>\n<ul>\n<li>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).  </li>\n<li>(Optional) HMAC signatures may be added in a later version for body integrity.</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"6c24d938-2376-49b5-a81b-1df84547fd6b"}],"id":"24424a25-7276-45ec-8a6e-38ecd0741ab6","_postman_id":"24424a25-7276-45ec-8a6e-38ecd0741ab6","description":""},{"name":"Load","item":[{"name":"✅ [Live] load.created (previously called \"Load Requested  Webhook\")","id":"997c6f37-723b-45f4-a81d-7db998ae3426","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"load.created\",\n  \"data\": {\n    \"trebu_id\": 12345,\n    \"shipment_number\": \"SHP-2025-000987\",\n    \"folio_number\": \"FOL-7788\",\n    \"requested_at\": \"2025-10-14T16:23:00Z\",\n    \"channel\": {\n      \"name\": \"Pedidos Cliente ACME\",\n      \"id\": \"8572345234622443@g.us\",\n      \"is_direct_chat\": true,\n      \"provider\": \"WHATSAPP\"\n    },\n    \"origin\": {\n      \"location_name\": \"Warehouse A\",\n      \"zip_code\": \"64000\",\n      \"lat\": 25.6866,\n      \"lng\": -100.3161,\n      \"municipality\": \"Monterrey\",\n      \"state\": \"Nuevo León\",\n      \"country\": \"MX\",\n      \"id\": \"cli_loc_001\",\n      \"street_address\": \"Calle 123 #456\",\n      \"verbose_name\": \"Calle 123 #456, Monterrey, NL, MX\"\n    },\n    \"destination\": {\n      \"location_name\": \"DC Norte\",\n      \"zip_code\": \"66600\",\n      \"lat\": 25.7765,\n      \"lng\": -100.1143,\n      \"municipality\": \"Apodaca\",\n      \"state\": \"Nuevo León\",\n      \"country\": \"MX\",\n      \"id\": \"cli_loc_009\",\n      \"street_address\": \"Av. Industrial 789\",\n      \"verbose_name\": \"Av. Industrial 789, Apodaca, NL, MX\"\n    },\n    \"loading_date\": \"2025-10-15\",\n    \"loading_time\": \"08:00:00\",\n    \"unloading_date\": \"2025-10-16\",\n    \"unloading_time\": \"15:00:00\",\n    \"unit_type\": {\n      \"name\": \"53ft Dry Van\",\n      \"id\": \"unit_dry_53\"\n    },\n    \"shipper\": {\n      \"name\": \"Acme Corp\",\n      \"id\": \"ship_042\"\n    },\n    \"weight_kg\": 12000,\n    \"pallets\": 24,\n    \"boxes\": 800,\n    \"extra_fields\": {\n      \"temperature_control\": false,\n      \"notes\": \"Handle with care\"\n    },\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<h3 id=\"load-·-created\">load · created</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />When a load (shipment) is created in Trebu with origin/destination and schedule details.</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong>  </p>\n<ul>\n<li>Delivery is at-least-once (duplicates are possible).  </li>\n<li>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:  </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"load.created\", \"data\": { ... } }\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><code>id</code> — unique event id</li>\n<li><code>version</code> — event semantic version</li>\n<li><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</li>\n<li><code>occurred_at</code> — RFC 3339 timestamp</li>\n<li><code>aggregate</code> — primary entity for ordering and context</li>\n<li><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</li>\n<li><code>payload</code> — event-specific content (see sample body)</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong>  </p>\n<ul>\n<li>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).  </li>\n<li>(Optional) HMAC signatures may be added in a later version for body integrity.</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"997c6f37-723b-45f4-a81d-7db998ae3426"},{"name":"🧪 [WIP] load.updated","id":"606b0b24-0518-40d4-ba5d-3cb3d8cf3c6a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"load.updated\",\n  \"data\": {\n    \"trebu_id\": 12345,\n    \"loading_time\": \"08:30:00\",\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"load-·-updated\">load · updated</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />Whenever non-breaking updates are made to a load (e.g., time changes).</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong>  </p>\n<ul>\n<li>Delivery is at-least-once (duplicates are possible).  </li>\n<li>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:  </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"load.updated\", \"data\": { ... } }\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><code>id</code> — unique event id</li>\n<li><code>version</code> — event semantic version</li>\n<li><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</li>\n<li><code>occurred_at</code> — RFC 3339 timestamp</li>\n<li><code>aggregate</code> — primary entity for ordering and context</li>\n<li><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</li>\n<li><code>payload</code> — event-specific content (see sample body)</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong>  </p>\n<ul>\n<li>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).  </li>\n<li>(Optional) HMAC signatures may be added in a later version for body integrity.</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"606b0b24-0518-40d4-ba5d-3cb3d8cf3c6a"}],"id":"51c94b3d-6198-43fc-92bf-5390cdceddb0","_postman_id":"51c94b3d-6198-43fc-92bf-5390cdceddb0","description":""},{"name":"Truck Availability","item":[{"name":"✅ [Live] truck_availability.created","id":"b252969c-ecfc-4917-bbdf-32a7841faafd","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"truck_availability.created\",\n  \"data\": {\n    \"trebu_id\": 789,\n    \"offered_at\": \"2025-10-14T16:23:00Z\",\n    \"channel\": {\n      \"name\": \"Seguimiento Transportes ABC\",\n      \"id\": \"8572345234622449@g.us\",\n      \"is_direct_chat\": true,\n      \"provider\": \"WHATSAPP\"\n    },\n    \"origin\": {\n      \"location_name\": null,\n      \"zip_code\": null,\n      \"lat\": 25.6866,\n      \"lng\": -100.3161,\n      \"municipality\": \"Apodaca\",\n      \"state\": \"Nuevo León\",\n      \"country\": \"MX\",\n      \"id\": \"cli_loc_001\",\n      \"street_address\": null,\n      \"verbose_name\": \"Apodaca, NL, MX\"\n    },\n    \"destination_options\": [\n        {\n        \"location_name\": null,\n        \"zip_code\": null,\n        \"lat\": 21.7765,\n        \"lng\": -101.1143,\n        \"municipality\": \"Irapuato\",\n        \"state\": \"Guanajuato\",\n        \"country\": \"MX\",\n        \"id\": \"cli_loc_009\",\n        \"street_address\": null,\n        \"verbose_name\": \"Irapuato, GTO, MX\"\n        },\n        {\n        \"location_name\": null,\n        \"zip_code\": null,\n        \"lat\": 22.0431,\n        \"lng\": -101.0147,\n        \"municipality\": \"Queretaro\",\n        \"state\": \"Queretaro\",\n        \"country\": \"MX\",\n        \"id\": \"cli_loc_034\",\n        \"street_address\": null,\n        \"verbose_name\": \"Queretaro, QRO, MX\"\n        }\n    ],\n    \"start_date\": \"2025-10-15\",\n    \"start_time\": \"08:00:00\",\n    \"unit_type\": {\n      \"name\": \"53ft Dry Van\",\n      \"id\": \"unit_dry_53\"\n    },\n    \"carrier\": {\n      \"name\": \"Transportes ABC\",\n      \"id\": \"carr_047\"\n    },\n    \"extra_fields\": {},\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<h3 id=\"truck-availability-·-created\">truck availability · created</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />When a load (shipment) is created in Trebu with origin/destination and schedule details.</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong></p>\n<ul>\n<li><p>Delivery is at-least-once (duplicates are possible).</p>\n</li>\n<li><p>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</p>\n</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"truck_availability.created\", \"data\": { ... } }\n\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><p><code>id</code> — unique event id</p>\n</li>\n<li><p><code>version</code> — event semantic version</p>\n</li>\n<li><p><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</p>\n</li>\n<li><p><code>occurred_at</code> — RFC 3339 timestamp</p>\n</li>\n<li><p><code>aggregate</code> — primary entity for ordering and context</p>\n</li>\n<li><p><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</p>\n</li>\n<li><p><code>payload</code> — event-specific content (see sample body)</p>\n</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong></p>\n<ul>\n<li><p>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).</p>\n</li>\n<li><p>(Optional) HMAC signatures may be added in a later version for body integrity.</p>\n</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"b252969c-ecfc-4917-bbdf-32a7841faafd"}],"id":"11017c6a-1fc7-4d63-81f8-7c51c47d1007","_postman_id":"11017c6a-1fc7-4d63-81f8-7c51c47d1007","description":""},{"name":"Bid Request","item":[{"name":"🧪 [WIP]  bid_request.created","id":"04500eb4-7fb1-42f2-83c6-7160de8cf8a7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"bid_request.created\",\n  \"data\": {\n    \"id\": \"evt_0013\",\n    \"version\": 1,\n    \"occurred_at\": \"2025-11-11T17:00:13.000Z\",\n    \"aggregate\": {\n      \"type\": \"bid_request\",\n      \"id\": \"br_abc123\"\n    },\n    \"related\": {\n      \"load_auction_id\": \"load_auction_7\",\n      \"load_id\": \"load_42\",\n      \"bid_request_id\": \"br_abc123\",\n      \"carrier_id\": \"carrier_jane\"\n    },\n    \"payload\": {},\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"bid-request-·-created\">bid request · created</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />When a bid request is created for a carrier for a specific load.</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong>  </p>\n<ul>\n<li>Delivery is at-least-once (duplicates are possible).  </li>\n<li>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:  </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"bid_request.created\", \"data\": { ... } }\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><code>id</code> — unique event id</li>\n<li><code>version</code> — event semantic version</li>\n<li><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</li>\n<li><code>occurred_at</code> — RFC 3339 timestamp</li>\n<li><code>aggregate</code> — primary entity for ordering and context</li>\n<li><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</li>\n<li><code>payload</code> — event-specific content (see sample body)</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong>  </p>\n<ul>\n<li>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).  </li>\n<li>(Optional) HMAC signatures may be added in a later version for body integrity.</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"04500eb4-7fb1-42f2-83c6-7160de8cf8a7"},{"name":"🧪 [WIP]  bid_request.question_asked","id":"4c8d6f52-842b-4f79-b861-caebf5dcfdea","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"bid_request.question_asked\",\n  \"data\": {\n    \"id\": \"evt_0014\",\n    \"version\": 1,\n    \"occurred_at\": \"2025-11-11T17:00:14.000Z\",\n    \"aggregate\": {\n      \"type\": \"bid_request\",\n      \"id\": \"br_abc123\"\n    },\n    \"related\": {\n      \"load_auction_id\": \"load_auction_7\",\n      \"load_id\": \"load_42\",\n      \"bid_request_id\": \"br_abc123\",\n      \"carrier_id\": \"carrier_jane\"\n    },\n    \"payload\": {\n      \"text\": \"Is live unload required at destination?\"\n    },\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"bid-request-·-question-asked\">bid request · question asked</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />When a carrier asks the shipper a question about a bid request.</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong>  </p>\n<ul>\n<li>Delivery is at-least-once (duplicates are possible).  </li>\n<li>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:  </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"bid_request.question_asked\", \"data\": { ... } }\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><code>id</code> — unique event id</li>\n<li><code>version</code> — event semantic version</li>\n<li><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</li>\n<li><code>occurred_at</code> — RFC 3339 timestamp</li>\n<li><code>aggregate</code> — primary entity for ordering and context</li>\n<li><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</li>\n<li><code>payload</code> — event-specific content (see sample body)</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong>  </p>\n<ul>\n<li>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).  </li>\n<li>(Optional) HMAC signatures may be added in a later version for body integrity.</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"4c8d6f52-842b-4f79-b861-caebf5dcfdea"},{"name":"🧪 [WIP]  bid_request.rate_proposed","id":"c3537369-8bb9-4467-af04-67f2946bc646","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"bid_request.rate_proposed\",\n  \"data\": {\n    \"id\": \"evt_0015\",\n    \"version\": 1,\n    \"occurred_at\": \"2025-11-11T17:00:15.000Z\",\n    \"aggregate\": {\n      \"type\": \"bid_request\",\n      \"id\": \"br_abc123\"\n    },\n    \"related\": {\n      \"load_auction_id\": \"load_auction_7\",\n      \"load_id\": \"load_42\",\n      \"bid_request_id\": \"br_abc123\",\n      \"carrier_id\": \"carrier_jane\"\n    },\n    \"payload\": {\n      \"currency\": \"MXN\",\n      \"rate\": \"34000.00\",\n      \"rate_type\": \"all_in\"\n    },\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"bid-request-·-rate-proposed\">bid request · rate proposed</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />When a carrier proposes a rate for a bid request.</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong>  </p>\n<ul>\n<li>Delivery is at-least-once (duplicates are possible).  </li>\n<li>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:  </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"bid_request.rate_proposed\", \"data\": { ... } }\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><code>id</code> — unique event id</li>\n<li><code>version</code> — event semantic version</li>\n<li><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</li>\n<li><code>occurred_at</code> — RFC 3339 timestamp</li>\n<li><code>aggregate</code> — primary entity for ordering and context</li>\n<li><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</li>\n<li><code>payload</code> — event-specific content (see sample body)</li>\n</ul>\n<p><strong>Pricing fields</strong></p>\n<ul>\n<li><code>payload.currency</code> — ISO currency code (e.g., <code>MXN</code>).</li>\n<li><code>payload.rate</code> — Monetary amount as string.</li>\n<li><code>payload.rate_type</code> — Kind of rate quoted. Allowed: <code>all_in</code> (default), <code>linehaul_only</code>, <code>fuel_inclusive</code>, <code>other</code>.</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong>  </p>\n<ul>\n<li>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).  </li>\n<li>(Optional) HMAC signatures may be added in a later version for body integrity.</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"c3537369-8bb9-4467-af04-67f2946bc646"},{"name":"🧪 [WIP]  bid_request.accepted","id":"9f963fe9-0272-4ff6-83b2-446f15d040a7","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"bid_request.accepted\",\n  \"data\": {\n    \"id\": \"evt_0018\",\n    \"version\": 1,\n    \"occurred_at\": \"2025-11-11T17:00:18.000Z\",\n    \"aggregate\": {\n      \"type\": \"bid_request\",\n      \"id\": \"br_abc123\"\n    },\n    \"related\": {\n      \"load_auction_id\": \"load_auction_7\",\n      \"load_id\": \"load_42\",\n      \"bid_request_id\": \"br_abc123\",\n      \"carrier_id\": \"carrier_jane\"\n    },\n    \"payload\": {},\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"bid-request-·-accepted\">bid request · accepted</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />When the carriers accepts to do a load or indicates availability to move the load.</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong></p>\n<ul>\n<li><p>Delivery is at-least-once (duplicates are possible).</p>\n</li>\n<li><p>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</p>\n</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"bid_request.accepted\", \"data\": { ... } }\n\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><p><code>id</code> — unique event id</p>\n</li>\n<li><p><code>version</code> — event semantic version</p>\n</li>\n<li><p><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</p>\n</li>\n<li><p><code>occurred_at</code> — RFC 3339 timestamp</p>\n</li>\n<li><p><code>aggregate</code> — primary entity for ordering and context</p>\n</li>\n<li><p><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</p>\n</li>\n<li><p><code>payload</code> — event-specific content (see sample body)</p>\n</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong></p>\n<ul>\n<li><p>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).</p>\n</li>\n<li><p>(Optional) HMAC signatures may be added in a later version for body integrity.</p>\n</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"9f963fe9-0272-4ff6-83b2-446f15d040a7"},{"name":"🧪 [WIP] bid_request.confirmed","id":"d9f8d855-9823-4c4a-b23c-1e6ae55a46e2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"bid_request.confirmed\",\n  \"data\": {\n    \"id\": \"evt_0019\",\n    \"version\": 1,\n    \"occurred_at\": \"2025-11-11T17:00:19.000Z\",\n    \"aggregate\": {\n      \"type\": \"bid_request\",\n      \"id\": \"br_abc123\"\n    },\n    \"related\": {\n      \"load_auction_id\": \"load_auction_7\",\n      \"load_id\": \"load_42\",\n      \"bid_request_id\": \"br_abc123\",\n      \"carrier_id\": \"carrier_jane\"\n    },\n    \"payload\": {\n      \"carrier_id\": \"carrier_jane\",\n      \"carrier_name\": \"Jane's Transport Co.\"\n    },\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"bid-request-·-confirmed\">bid request · confirmed</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />When a load that has been accepted by the carrier is confirmed and assigned to said carrier.</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong></p>\n<ul>\n<li><p>Delivery is at-least-once (duplicates are possible).</p>\n</li>\n<li><p>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</p>\n</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:</p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"bid_request.confirmed\", \"data\": { ... } }\n\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><p><code>id</code> — unique event id</p>\n</li>\n<li><p><code>version</code> — event semantic version</p>\n</li>\n<li><p><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</p>\n</li>\n<li><p><code>occurred_at</code> — RFC 3339 timestamp</p>\n</li>\n<li><p><code>aggregate</code> — primary entity for ordering and context</p>\n</li>\n<li><p><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</p>\n</li>\n<li><p><code>payload</code> — event-specific content (see sample body)</p>\n</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong></p>\n<ul>\n<li><p>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).</p>\n</li>\n<li><p>(Optional) HMAC signatures may be added in a later version for body integrity.</p>\n</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"d9f8d855-9823-4c4a-b23c-1e6ae55a46e2"},{"name":"🧪 [WIP] bid_request.rejected","id":"ddbe6641-9907-4f7e-8ec6-a9a53f8b4d21","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"bid_request.rejected\",\n  \"data\": {\n    \"id\": \"evt_0022\",\n    \"version\": 1,\n    \"occurred_at\": \"2025-11-11T17:00:22.000Z\",\n    \"aggregate\": {\n      \"type\": \"bid_request\",\n      \"id\": \"br_xyz777\"\n    },\n    \"related\": {\n      \"load_auction_id\": \"load_auction_7\",\n      \"load_id\": \"load_42\",\n      \"bid_request_id\": \"br_xyz777\",\n      \"carrier_id\": \"carrier_omar\"\n    },\n    \"payload\": {},\n    \"schema_version\": 1\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"bid-request-·-rejected\">bid request · rejected</h3>\n<p><strong>Purpose</strong><br />This webhook informs your system about the following event in the Trebu tendering flow.</p>\n<p><strong>When it's sent</strong><br />When the shipper rejects a carrier's bid request or offer.</p>\n<p><strong>Authentication</strong><br />Include <code>Authorization: Bearer {api_key}</code> in the request headers.</p>\n<p><strong>Delivery</strong>  </p>\n<ul>\n<li>Delivery is at-least-once (duplicates are possible).  </li>\n<li>Recommended: treat webhooks as notifications and fetch current state via API, or apply client-side dedupe using a content fingerprint (e.g., SHA256 of <code>{event, aggregate.id, occurred_at, payload}</code>).</li>\n</ul>\n<p><strong>Schema</strong><br />Root envelope:  </p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{ \"event\": \"bid_request.rejected\", \"data\": { ... } }\n</code></pre>\n<p>Core fields inside <code>data</code>:</p>\n<ul>\n<li><code>id</code> — unique event id</li>\n<li><code>version</code> — event semantic version</li>\n<li><code>schema_version</code> — JSON schema structure version (MVP: <code>1</code>)</li>\n<li><code>occurred_at</code> — RFC 3339 timestamp</li>\n<li><code>aggregate</code> — primary entity for ordering and context</li>\n<li><code>related</code> — cross-links to other ids (load, carrier, auction, etc.)</li>\n<li><code>payload</code> — event-specific content (see sample body)</li>\n</ul>\n<p><strong>Retries &amp; Signatures (MVP)</strong>  </p>\n<ul>\n<li>Trebu will retry on non-2xx responses with exponential backoff (configurable in production).  </li>\n<li>(Optional) HMAC signatures may be added in a later version for body integrity.</li>\n</ul>\n<p><strong>Response</strong><br />Return HTTP <code>200</code> as quickly as possible. If you need to do heavy work, enqueue internally and return immediately.</p>\n<hr />\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"ddbe6641-9907-4f7e-8ec6-a9a53f8b4d21"}],"id":"c155b884-a69e-4594-a972-6d897e4de006","_postman_id":"c155b884-a69e-4594-a972-6d897e4de006","description":""},{"name":"FMT Tendering","item":[{"name":"✅ [Live] fmt.carrier_accepted","id":"1b874402-520d-44bf-aec4-e9db37eca069","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Webhook-Event","value":"fmt.carrier_accepted"},{"key":"X-Webhook-Timestamp","value":"1787487891"},{"key":"X-Webhook-Signature","value":"sha256=<hmac_sha256_hex_of_raw_body>"},{"key":"X-API-Key","value":"REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"fmt.carrier_accepted\",\n  \"timestamp\": \"2026-04-24T09:15:00Z\",\n  \"data\": {\n    \"trip_id\": 12345,\n    \"shipment_number\": \"SHP-2026-001\",\n    \"folio_number\": \"F-001\",\n    \"external_load_id\": \"SYS-LOAD-98765\",\n    \"origin\": {\"city\": \"Mexico City\", \"state\": \"CDMX\"},\n    \"destination\": {\"city\": \"Guadalajara\", \"state\": \"Jalisco\"},\n    \"loading_date\": \"2026-05-01\",\n    \"unit_type\": \"Caja 53ft\",\n    \"carrier\": {\n      \"carrier_id\": 101,\n      \"carrier_name\": \"Transportes del Norte\",\n      \"channel_id\": null,\n      \"phone\": \"+525512345678\"\n    },\n    \"rate\": 14500.00,\n    \"currency\": \"MXN\",\n    \"accepted_at\": \"2026-04-24T09:15:00Z\",\n    \"total_accepted\": 1,\n    \"total_carriers_contacted\": 8\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<p>Triggered when a carrier accepts a trip offer via WhatsApp.</p>\n<p>Use this to auto-confirm or notify your team. The <code>carrier_id</code> can be used with <code>POST /tendering/{trip_id}/confirm/</code> to confirm the carrier.</p>\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"1b874402-520d-44bf-aec4-e9db37eca069"},{"name":"✅ [Live] fmt.carrier_rejected","id":"eae3b13c-4f86-434c-8fdf-e7af4751bbec","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Webhook-Event","value":"fmt.carrier_rejected"},{"key":"X-Webhook-Timestamp","value":"1787487891"},{"key":"X-Webhook-Signature","value":"sha256=<hmac_sha256_hex_of_raw_body>"},{"key":"X-API-Key","value":"REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"fmt.carrier_rejected\",\n  \"timestamp\": \"2026-04-24T08:45:00Z\",\n  \"data\": {\n    \"trip_id\": 12345,\n    \"shipment_number\": \"SHP-2026-001\",\n    \"folio_number\": \"F-001\",\n    \"origin\": {\"city\": \"Mexico City\", \"state\": \"CDMX\"},\n    \"destination\": {\"city\": \"Guadalajara\", \"state\": \"Jalisco\"},\n    \"loading_date\": \"2026-05-01\",\n    \"unit_type\": \"Caja 53ft\",\n    \"carrier\": {\n      \"carrier_id\": 103,\n      \"carrier_name\": \"Express Transport\",\n      \"channel_id\": null,\n      \"phone\": \"+525587654321\"\n    },\n    \"rejected_at\": \"2026-04-24T08:45:00Z\",\n    \"total_rejected\": 1,\n    \"total_carriers_contacted\": 8\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<p>Triggered when a carrier declines a trip offer via WhatsApp.</p>\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"eae3b13c-4f86-434c-8fdf-e7af4751bbec"},{"name":"✅ [Live] fmt.carrier_question","id":"ef910520-48d6-4b99-8b79-13aa243b1dd4","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Webhook-Event","value":"fmt.carrier_question"},{"key":"X-Webhook-Timestamp","value":"1787487891"},{"key":"X-Webhook-Signature","value":"sha256=<hmac_sha256_hex_of_raw_body>"},{"key":"X-API-Key","value":"REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"fmt.carrier_question\",\n  \"timestamp\": \"2026-04-24T10:00:00Z\",\n  \"data\": {\n    \"trip_id\": 12345,\n    \"shipment_number\": \"SHP-2026-001\",\n    \"folio_number\": \"F-001\",\n    \"origin\": {\"city\": \"Mexico City\", \"state\": \"CDMX\"},\n    \"destination\": {\"city\": \"Guadalajara\", \"state\": \"Jalisco\"},\n    \"loading_date\": \"2026-05-01\",\n    \"unit_type\": \"Caja 53ft\",\n    \"carrier\": {\n      \"carrier_id\": 104,\n      \"carrier_name\": \"Reliable Freight\",\n      \"channel_id\": null,\n      \"phone\": \"+525598761234\"\n    },\n    \"question\": \"¿Requiere escolta?\",\n    \"asked_at\": \"2026-04-24T10:00:00Z\"\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<p>Triggered when a carrier asks a question about a trip via WhatsApp.</p>\n<p>Respond using <code>POST /tendering/{trip_id}/answer/</code> with the <code>carrier_id</code> and your answer text.</p>\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"ef910520-48d6-4b99-8b79-13aa243b1dd4"},{"name":"✅ [Live] fmt.trip_confirmed","id":"08689d8f-a42b-422f-8a9a-6fce2195311f","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Webhook-Event","value":"fmt.trip_confirmed"},{"key":"X-Webhook-Timestamp","value":"1787487891"},{"key":"X-Webhook-Signature","value":"sha256=<hmac_sha256_hex_of_raw_body>"},{"key":"X-API-Key","value":"REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"fmt.trip_confirmed\",\n  \"timestamp\": \"2026-04-24T11:00:00Z\",\n  \"data\": {\n    \"trip_id\": 12345,\n    \"shipment_number\": \"SHP-2026-001\",\n    \"folio_number\": \"F-001\",\n    \"external_load_id\": \"SYS-LOAD-98765\",\n    \"origin\": {\"city\": \"Mexico City\", \"state\": \"CDMX\"},\n    \"destination\": {\"city\": \"Guadalajara\", \"state\": \"Jalisco\"},\n    \"loading_date\": \"2026-05-01\",\n    \"unit_type\": \"Caja 53ft\",\n    \"carrier\": {\n      \"carrier_id\": 101,\n      \"carrier_name\": \"Transportes del Norte\",\n      \"channel_id\": null,\n      \"phone\": \"+525512345678\"\n    },\n    \"rate\": 14500.00,\n    \"currency\": \"MXN\",\n    \"confirmed_at\": \"2026-04-24T11:00:00Z\",\n    \"confirmed_by\": \"user@company.com\"\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<p>Triggered when a carrier is confirmed for a trip, either via API or manually in the UI.</p>\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"08689d8f-a42b-422f-8a9a-6fce2195311f"},{"name":"✅ [Live] fmt.trip_unconfirmed","id":"c69ccf75-69ca-49a2-977c-5e033bf78fdb","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Webhook-Event","value":"fmt.trip_unconfirmed"},{"key":"X-Webhook-Timestamp","value":"1787487891"},{"key":"X-Webhook-Signature","value":"sha256=<hmac_sha256_hex_of_raw_body>"},{"key":"X-API-Key","value":"REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"fmt.trip_unconfirmed\",\n  \"timestamp\": \"2026-04-24T15:00:00Z\",\n  \"data\": {\n    \"trip_id\": 12345,\n    \"shipment_number\": \"SHP-2026-001\",\n    \"folio_number\": \"F-001\",\n    \"external_load_id\": \"SYS-LOAD-98765\",\n    \"origin\": {\"city\": \"Mexico City\", \"state\": \"CDMX\"},\n    \"destination\": {\"city\": \"Guadalajara\", \"state\": \"Jalisco\"},\n    \"loading_date\": \"2026-05-01\",\n    \"unit_type\": \"Caja 53ft\",\n    \"previous_carrier\": {\n      \"carrier_id\": 101,\n      \"carrier_name\": \"Transportes del Norte\",\n      \"channel_id\": null,\n      \"phone\": \"+525512345678\"\n    },\n    \"reason\": \"Carrier requested schedule change\",\n    \"unconfirmed_at\": \"2026-04-24T15:00:00Z\",\n    \"unconfirmed_by\": \"user@company.com\"\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<p>Triggered when a previously confirmed carrier is unconfirmed (trip reassignment).</p>\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"c69ccf75-69ca-49a2-977c-5e033bf78fdb"},{"name":"✅ [Live] fmt.tendering_exhausted","id":"1534bde0-6ae5-40b3-9a4a-e5bfc8a0e51d","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Webhook-Event","value":"fmt.tendering_exhausted"},{"key":"X-Webhook-Timestamp","value":"1787487891"},{"key":"X-Webhook-Signature","value":"sha256=<hmac_sha256_hex_of_raw_body>"},{"key":"X-API-Key","value":"REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"fmt.tendering_exhausted\",\n  \"timestamp\": \"2026-04-24T18:00:00Z\",\n  \"data\": {\n    \"trip_id\": 12345,\n    \"shipment_number\": \"SHP-2026-001\",\n    \"folio_number\": \"F-001\",\n    \"origin\": {\"city\": \"Mexico City\", \"state\": \"CDMX\"},\n    \"destination\": {\"city\": \"Monterrey\", \"state\": \"Nuevo León\"},\n    \"loading_date\": \"2026-05-01\",\n    \"unit_type\": \"Caja 53ft\",\n    \"total_carriers_contacted\": 15,\n    \"total_rejected\": 12,\n    \"total_no_response\": 3,\n    \"exhausted_at\": \"2026-04-24T18:00:00Z\",\n    \"message\": \"All available carriers have been contacted. Consider adjusting trip parameters.\"\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<p>Triggered when all carriers have been contacted and none have accepted. Trip status becomes <code>no_carriers</code>.</p>\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"1534bde0-6ae5-40b3-9a4a-e5bfc8a0e51d"},{"name":"✅ [Live] fmt.tendering_cancelled","id":"aecf1a61-7d15-4a86-973b-fe17ab9c5838","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Webhook-Event","value":"fmt.tendering_cancelled"},{"key":"X-Webhook-Timestamp","value":"1787487891"},{"key":"X-Webhook-Signature","value":"sha256=<hmac_sha256_hex_of_raw_body>"},{"key":"X-API-Key","value":"REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"fmt.tendering_cancelled\",\n  \"timestamp\": \"2026-04-24T16:00:00Z\",\n  \"data\": {\n    \"trip_id\": 12345,\n    \"shipment_number\": \"SHP-2026-001\",\n    \"reason\": \"Trip cancelled by client\",\n    \"carriers_notified\": 5,\n    \"cancelled_at\": \"2026-04-24T16:00:00Z\",\n    \"cancelled_by\": \"user@company.com\"\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<p>Triggered when the tendering process is cancelled via API or UI.</p>\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"aecf1a61-7d15-4a86-973b-fe17ab9c5838"},{"name":"✅ [Live] fmt.trip_created","id":"f0230764-f117-4158-ae9a-8be8f0f0a01a","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Webhook-Event","value":"fmt.trip_created"},{"key":"X-Webhook-Timestamp","value":"1787487891"},{"key":"X-Webhook-Signature","value":"sha256=<hmac_sha256_hex_of_raw_body>"},{"key":"X-API-Key","value":"REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"fmt.trip_created\",\n  \"timestamp\": \"2026-04-24T08:00:00Z\",\n  \"data\": {\n    \"trip_id\": 12345,\n    \"external_load_id\": \"SYS-LOAD-98765\",\n    \"origin\": {\"city\": \"Mexico City\", \"state\": \"CDMX\", \"country\": \"MX\"},\n    \"destination\": {\"city\": \"Guadalajara\", \"state\": \"Jalisco\", \"country\": \"MX\"},\n    \"loading_datetime\": \"2026-05-01T08:00:00Z\",\n    \"unit_type\": \"Caja 53ft\",\n    \"created_at\": \"2026-04-24T08:00:00Z\"\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<p>Triggered when a trip is successfully created via the tendering API.</p>\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"f0230764-f117-4158-ae9a-8be8f0f0a01a"},{"name":"✅ [Live] fmt.tendering_started","id":"5943f6d6-7fb7-4352-af01-eba5e4de4265","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Webhook-Event","value":"fmt.tendering_started"},{"key":"X-Webhook-Timestamp","value":"1787487891"},{"key":"X-Webhook-Signature","value":"sha256=<hmac_sha256_hex_of_raw_body>"},{"key":"X-API-Key","value":"REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"fmt.tendering_started\",\n  \"timestamp\": \"2026-04-24T08:01:00Z\",\n  \"data\": {\n    \"trip_id\": 12345,\n    \"external_load_id\": \"SYS-LOAD-98765\",\n    \"origin\": {\"city\": \"Mexico City\", \"state\": \"CDMX\"},\n    \"destination\": {\"city\": \"Guadalajara\", \"state\": \"Jalisco\"},\n    \"loading_date\": \"2026-05-01\",\n    \"unit_type\": \"Caja 53ft\",\n    \"carriers_contacted\": 8,\n    \"carriers\": [\n      {\"carrier_id\": 101, \"carrier_name\": \"Transportes del Norte\", \"channel_id\": null, \"phone\": \"+525512345678\"}\n    ],\n    \"started_at\": \"2026-04-24T08:01:00Z\"\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<p>Triggered when carriers are first notified about a trip. Useful when no <code>candidate_carriers</code> were provided and carrier discovery happened asynchronously — <code>carriers_contacted</code> here has the final count.</p>\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"5943f6d6-7fb7-4352-af01-eba5e4de4265"},{"name":"✅ [Live] fmt.message_sent","id":"fc246dce-35e5-4791-ae7c-42d5c5b31376","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"X-Webhook-Event","value":"fmt.message_sent"},{"key":"X-Webhook-Timestamp","value":"1787487891"},{"key":"X-Webhook-Signature","value":"sha256=<hmac_sha256_hex_of_raw_body>"},{"key":"X-API-Key","value":"REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"event\": \"fmt.message_sent\",\n  \"timestamp\": \"2026-04-24T11:00:00Z\",\n  \"data\": {\n    \"carrier\": {\n      \"carrier_id\": 101,\n      \"carrier_name\": \"Transportes del Norte\",\n      \"channel_id\": null,\n      \"phone\": \"+525512345678\"\n    },\n    \"channel_id\": null,\n    \"message_text\": \"Your unit is confirmed for pickup tomorrow at 8:00 AM.\",\n    \"sent_at\": \"2026-04-24T11:00:00Z\"\n  }\n}"},"url":"https://example.com/webhooks/trebu","description":"<p><strong>Status:</strong> ✅ Live</p>\n<p>Triggered when a message is sent to a carrier via <code>POST /tendering/message/</code>. Not tied to a trip, so trip fields are omitted.</p>\n","urlObject":{"host":["https://example.com/webhooks/trebu"],"query":[],"variable":[]}},"response":[],"_postman_id":"fc246dce-35e5-4791-ae7c-42d5c5b31376"}],"id":"bb25329d-5908-4aa8-994e-6441fb4fc15e","description":"<p>Webhook events fired by the FMT (Find Me a Truck) tendering system. All fmt.* events include <code>X-Webhook-Event</code> and <code>X-Webhook-Timestamp</code> headers.</p>\n","_postman_id":"bb25329d-5908-4aa8-994e-6441fb4fc15e"}],"id":"3533a5fe-f20d-4d20-8543-4c0aa648123a","description":"<p>Events Trebu sends to your system. Use these to simulate incoming webhooks to your <code>https://example.com/webhooks/trebu</code>.</p>\n","_postman_id":"3533a5fe-f20d-4d20-8543-4c0aa648123a"},{"name":"Inbound API (to Trebu)","item":[{"name":"Webhooks Management","item":[{"name":"🧪 [WIP] Set callback URL","id":"e5cf6cb5-9453-4c82-a0ad-cedf2dab69b6","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"PUT","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"callback_url\": \"https://example.com/webhooks/trebu\"\n}"},"url":"https://api.trebu.io/api/v1/webhooks/callback_url","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"set-callback-url\">Set callback URL</h3>\n<p><strong>Purpose</strong>\nSet or replace the single webhook callback URL for your client. All outbound events will be delivered to this URL.</p>\n<p><strong>Single URL rule</strong>\nEach client can have <strong>one</strong> active callback URL. Setting a new URL replaces the previous destination immediately.</p>\n<p><strong>Headers</strong></p>\n<ul>\n<li><code>Authorization: Bearer REPLACE_ME</code></li>\n<li>Optional `\n<strong>Response (200)</strong></li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"callback_url\": \"https://example.com/trebu-hooks\",\n  \"updated_at\": \"2025-11-12T17:12:03Z\"\n}\n</code></pre>\n","urlObject":{"protocol":"https","path":["api","v1","webhooks","callback_url"],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"e5cf6cb5-9453-4c82-a0ad-cedf2dab69b6"},{"name":"🧪 [WIP] Get current callback URL","id":"2d9c4258-3b96-47dd-a463-ed93d016e69c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"url":"https://api.trebu.io/api/v1/webhooks/callback_url","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"get-current-callback-url\">Get current callback URL</h3>\n<p>Returns the configured webhook callback URL for this client.</p>\n<p><strong>Response (200)</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"callback_url\": \"https://example.com/trebu-hooks\"\n}\n</code></pre>\n","urlObject":{"protocol":"https","path":["api","v1","webhooks","callback_url"],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"2d9c4258-3b96-47dd-a463-ed93d016e69c"}],"id":"64acaae1-6112-4d05-9094-fe766c8c6a54","description":"<p>Manage your single callback URL via API.</p>\n","_postman_id":"64acaae1-6112-4d05-9094-fe766c8c6a54"},{"name":"Bid Requests","item":[{"name":"🧪 [WIP]  Reply to carrier question","id":"124405fb-77fb-42be-83e8-f933dd8932c8","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"text\": \"Yes, live unload is required.\"\n}"},"url":"https://api.trebu.io/api/v1/bid_requests/1/questions/1/reply","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"reply-to-carrier-question\">Reply to carrier question</h3>\n<p><strong>Purpose</strong>\nPost an official answer to a question a carrier asked on a bid request.</p>\n<p><strong>Path params</strong></p>\n<ul>\n<li><code>bid_request_id</code></li>\n<li><code>question_id</code></li>\n</ul>\n<p><strong>Body</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"text\": \"Yes, live unload is required.\"\n}\n</code></pre>\n<p><strong>Result</strong></p>\n<ul>\n<li>Triggers a notification to the carrier.</li>\n<li>May result in an outbound webhook (e.g., <code>bid_request.question_answered</code>) in a future iteration.</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","v1","bid_requests","1","questions","1","reply"],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"124405fb-77fb-42be-83e8-f933dd8932c8"}],"id":"46b2b6df-79da-4b4b-808b-05eff0e46298","description":"<p>Interact with bid requests (e.g., reply to carrier questions).</p>\n","_postman_id":"46b2b6df-79da-4b4b-808b-05eff0e46298"},{"name":"Loads & Auctions","item":[{"name":"🧪 [WIP]  Start auction for a load","id":"0eff5b10-c5c2-42a8-abce-6d50ce4663ae","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{}"},"url":"https://api.trebu.io/api/v1/loads/1/auction-start","description":"<p><strong>Status:</strong> 🧪 WIP</p>\n<h3 id=\"start-auction-for-a-load\">Start auction for a load</h3>\n<p><strong>Purpose</strong>\nCreate and open a load auction using only the <code>load_id</code> path parameter.</p>\n<p><strong>Path param</strong></p>\n<ul>\n<li><code>load_id</code></li>\n</ul>\n<p><strong>Body (optional fields)</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"deadline_at\": \"2025-11-12T23:00:00Z\",\n  \"timezone\": \"America/Monterrey\",\n  \"note\": \"MVP tender for dedicated lane\"\n}\n</code></pre>\n<p><strong>Response (201)</strong></p>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n  \"load_auction_id\": \"load_auction_7\",\n  \"opened_at\": \"2025-11-11T17:01:00Z\"\n}\n</code></pre>\n<p><strong>Side effects</strong></p>\n<ul>\n<li>On success, you should see outbound webhook(s) like <code>load_auction.created</code> (and later, <code>carrier_assigned</code>, etc.).</li>\n</ul>\n","urlObject":{"protocol":"https","path":["api","v1","loads","1","auction-start"],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"0eff5b10-c5c2-42a8-abce-6d50ce4663ae"}],"id":"6f9b8ce5-f922-4883-9a38-6804d5089c09","description":"<p>Start auctions for specific loads and manage tendering lifecycle.</p>\n","_postman_id":"6f9b8ce5-f922-4883-9a38-6804d5089c09"},{"name":"Facilities","item":[{"name":"✅ [Live] Add or Update Facility","id":"3be5a195-d2ab-4530-ace0-1a5366cbfd4c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json","type":"text"},{"key":"Authorization","value":"Api-Key REPLACE_ME","type":"text"}],"body":{"mode":"raw","raw":"{\n  \"shipper\": \"ACME CORP S.A. de C.V.\",\n  \"facility_name\": \"CEDIS ACME Bajio\",\n  \"qa_facility_id\": null,\n  \"facility_id\": \"6581\",\n  \"country\": \"Mexico\",\n  \"state\": \"Guanajuato\",\n  \"city\": \"León de los Aldama\"\n}","options":{"raw":{"language":"json"}}},"url":"https://api.trebu.io/api/v1/update-facilities","urlObject":{"protocol":"https","path":["api","v1","update-facilities"],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"3be5a195-d2ab-4530-ace0-1a5366cbfd4c"}],"id":"b15dd045-edd0-4292-978d-3993a95c75e7","_postman_id":"b15dd045-edd0-4292-978d-3993a95c75e7","description":""},{"name":"FMT Tendering","item":[{"name":"List Trips","id":"c580e127-d8d0-4aa9-81c2-836c34430b57","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"url":"https://api.trebu.io/api/v1/client/tendering/?status=pending&limit=50&offset=0","description":"<p>List all trips for the authenticated company. Returns paginated results.</p>\n","urlObject":{"protocol":"https","path":["api","v1","client","tendering",""],"host":["api","trebu","io"],"query":[{"description":{"content":"<p>pending | awaiting_confirmation | confirmed | no_carriers | cancelled</p>\n","type":"text/plain"},"key":"status","value":"pending"},{"disabled":true,"description":{"content":"<p>YYYY-MM-DD</p>\n","type":"text/plain"},"key":"from_date","value":"2026-01-01"},{"disabled":true,"description":{"content":"<p>YYYY-MM-DD</p>\n","type":"text/plain"},"key":"to_date","value":"2026-04-24"},{"description":{"content":"<p>Max 100</p>\n","type":"text/plain"},"key":"limit","value":"50"},{"key":"offset","value":"0"}],"variable":[]}},"response":[],"_postman_id":"c580e127-d8d0-4aa9-81c2-836c34430b57"},{"name":"Create Trip (Single)","event":[{"listen":"test","script":{"exec":["if (pm.response.code === 201) { var j = pm.response.json(); pm.collectionVariables.set('trip_id', j.trip_id); }"],"type":"text/javascript","id":"50152f3e-72f9-47bb-b55b-64cf4a559ce7"}}],"id":"073a5c96-6566-42d2-b414-598ee07000db","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"external_load_id\": \"LOAD-2026-001\",\n  \"folio_number\": \"FOL-2026-001\",\n  \"shipper\": {\n    \"name\": \"Acme Corporation\",\n    \"contact\": \"John Doe\",\n    \"phone\": \"+52-555-1234567\",\n    \"email\": \"john@acme.com\"\n  },\n  \"origin\": {\n    \"name\": \"Warehouse A\",\n    \"address_line\": \"Calle Principal 123\",\n    \"city\": \"Guadalajara\",\n    \"state\": \"Jalisco\",\n    \"country\": \"MX\",\n    \"scheduled_datetime\": \"2026-05-01T08:00:00Z\"\n  },\n  \"destination\": {\n    \"city\": \"Ciudad de Mexico\",\n    \"state\": \"Ciudad de Mexico\",\n    \"country\": \"MX\"\n  },\n  \"load_details\": {\n    \"unit_type\": \"Caja 53ft\",\n    \"weight_kg\": 15000,\n    \"pallets\": 20\n  },\n  \"candidate_carriers\": [\n    {\n      \"carrier_name\": \"Fast Logistics S.A.\",\n      \"contact_name\": \"Maria Garcia\",\n      \"phone\": \"+52-555-9876543\",\n      \"preferred_language\": \"es\"\n    }\n  ],\n  \"options\": {\n    \"broadcast_immediately\": true,\n    \"rate_requested\": true,\n    \"proposed_rate\": 25000,\n    \"currency\": \"MXN\"\n  }\n}"},"url":"https://api.trebu.io/api/v1/client/tendering/","description":"<p>Create a single trip and optionally send it to candidate carriers.</p>\n<p>Use <code>carrier_name</code>+<code>contact_name</code> (explicit) instead of the legacy <code>name</code> field.\nUse <code>phone</code> for direct chats or <code>channel_id</code> for group chats — mutually exclusive.</p>\n<p>The response <code>carriers[].carrier_id</code> is the Trebu internal ID — store it for future calls.</p>\n<p><strong>Multi-stop loads:</strong> add an optional <code>stops: [...]</code> array to declare additional drops on the same load. See the \"Create Multi-Stop Load (Single)\" example for details. Omitting <code>stops</code> or sending <code>[]</code> is identical to a single-destination load.</p>\n","urlObject":{"protocol":"https","path":["api","v1","client","tendering",""],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"073a5c96-6566-42d2-b414-598ee07000db"},{"name":"Create Multi-Stop Load (Single)","event":[{"listen":"test","script":{"exec":["if (pm.response.code === 201) {","    var jsonData = pm.response.json();","    pm.collectionVariables.set('trip_id', jsonData.trip_id);","}"],"type":"text/javascript","id":"3fa57b76-00f6-4c5a-8482-ad24eb9a32f8"}}],"id":"baff2e87-93a0-45a9-86f8-b6e200ff6892","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"external_load_id\": \"ORDER-9001\",\n  \"shipper\": {\n    \"name\": \"Acme Corporation\"\n  },\n  \"origin\": {\n    \"city\": \"Monterrey\",\n    \"state\": \"Nuevo Leon\",\n    \"country\": \"MX\",\n    \"scheduled_datetime\": \"2026-06-01T08:00:00Z\"\n  },\n  \"destination\": {\n    \"city\": \"Queretaro\",\n    \"state\": \"Queretaro\",\n    \"country\": \"MX\",\n    \"scheduled_datetime\": \"2026-06-02T08:00:00Z\"\n  },\n  \"load_details\": {\n    \"unit_type\": \"Caja 53ft\",\n    \"weight_kg\": 18000,\n    \"pallets\": 24\n  },\n  \"candidate_carriers\": [\n    {\n      \"carrier_name\": \"Fast Logistics S.A.\",\n      \"phone\": \"+52-555-9876543\"\n    }\n  ],\n  \"options\": {\n    \"broadcast_immediately\": true\n  },\n  \"stops\": [\n    {\n      \"destination\": {\n        \"city\": \"Ciudad de Mexico\",\n        \"state\": \"Ciudad de Mexico\",\n        \"country\": \"MX\",\n        \"scheduled_datetime\": \"2026-06-02T14:00:00Z\"\n      }\n    },\n    {\n      \"destination\": {\n        \"city\": \"Puebla\",\n        \"state\": \"Puebla\",\n        \"country\": \"MX\",\n        \"scheduled_datetime\": \"2026-06-02T19:00:00Z\"\n      },\n      \"external_load_id\": \"ORDER-9001-LEG-3\",\n      \"load_details\": {\n        \"weight_kg\": 6000,\n        \"pallets\": 8\n      }\n    }\n  ]\n}"},"url":"https://api.trebu.io/api/v1/client/tendering/api/v1/client/tendering/","description":"<p>Create a load with multiple delivery destinations.</p>\n<p>The load has one pickup (<code>origin</code>) and N drops: the load-level <code>destination</code> is the first drop, and each entry in <code>stops[]</code> is an additional drop.</p>\n<p><strong>Stop fields:</strong></p>\n<ul>\n<li><code>destination</code> (required): same shape as the load-level destination, with its own <code>scheduled_datetime</code> (used as unloading time).</li>\n<li><code>load_details</code> (optional): per-stop overrides. Any field omitted inherits from the parent's <code>load_details</code>. Omit entirely to inherit everything.</li>\n<li><code>external_load_id</code> (optional): if you want to track this stop separately. Stays <code>null</code> if omitted — never auto-generated.</li>\n</ul>\n<p><strong>NOT allowed on a stop</strong> (returns 400): <code>origin</code>, <code>loading_date</code>, <code>loading_time</code>, <code>shipper</code>, <code>candidate_carriers</code>, <code>options</code>, <code>folio_number</code> — these are load-level only.</p>\n<p>Limits: max 9 stops per load (10 legs total). Stops are not separately broadcast and not visible as standalone trips in <code>GET /tendering/</code>.</p>\n","urlObject":{"path":["api","v1","client","tendering",""],"host":["https://api.trebu.io/api/v1/client/tendering"],"query":[],"variable":[]}},"response":[],"_postman_id":"baff2e87-93a0-45a9-86f8-b6e200ff6892"},{"name":"Create Trip (Group Chat Carriers)","event":[{"listen":"test","script":{"exec":["if (pm.response.code === 201) { var j = pm.response.json(); pm.collectionVariables.set('trip_id', j.trip_id); }"],"type":"text/javascript","id":"a676089f-9a1b-424e-84b2-12f46fd47c13"}}],"id":"59bcb358-236b-460c-b98e-19ef47d30e6e","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"external_load_id\": \"LOAD-2026-002\",\n  \"origin\": {\n    \"city\": \"Guadalajara\",\n    \"state\": \"Jalisco\",\n    \"country\": \"MX\",\n    \"scheduled_datetime\": \"2026-05-01T08:00:00Z\"\n  },\n  \"destination\": {\n    \"city\": \"Ciudad de Mexico\",\n    \"country\": \"MX\"\n  },\n  \"load_details\": {\"unit_type\": \"Caja 53ft\"},\n  \"candidate_carriers\": [\n    {\n      \"carrier_name\": \"Grupo Transportes ABC SA de CV\",\n      \"channel_id\": \"120363423718359534@g.us\"\n    }\n  ],\n  \"options\": {\"broadcast_immediately\": true}\n}"},"url":"https://api.trebu.io/api/v1/client/tendering/","description":"<p>Create a trip using WhatsApp group chat carriers via <code>channel_id</code>. Mutually exclusive with <code>phone</code>.</p>\n","urlObject":{"protocol":"https","path":["api","v1","client","tendering",""],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"59bcb358-236b-460c-b98e-19ef47d30e6e"},{"name":"Batch Create Trips","event":[{"listen":"test","script":{"exec":["if (pm.response.code === 201) { var j = pm.response.json(); if (j.trips && j.trips.length > 0) pm.collectionVariables.set('trip_id', j.trips[0].trip_id); }"],"type":"text/javascript","id":"f6f4b404-1b73-458d-a485-a234a46b7802"}}],"id":"e37901a7-7047-4ccf-a864-4887d2c39a66","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"[\n  {\n    \"external_load_id\": \"BATCH-001\",\n    \"origin\": {\"city\": \"Guadalajara\", \"country\": \"MX\", \"scheduled_datetime\": \"2026-05-01T08:00:00Z\"},\n    \"destination\": {\"city\": \"Ciudad de Mexico\", \"country\": \"MX\"},\n    \"load_details\": {\"unit_type\": \"Caja 53ft\"},\n    \"candidate_carriers\": [{\"carrier_name\": \"Fast Logistics\", \"phone\": \"+525512345678\"}],\n    \"options\": {\"broadcast_immediately\": true}\n  },\n  {\n    \"external_load_id\": \"BATCH-002\",\n    \"origin\": {\"city\": \"Monterrey\", \"country\": \"MX\", \"scheduled_datetime\": \"2026-05-01T10:00:00Z\"},\n    \"destination\": {\"city\": \"Puebla\", \"country\": \"MX\"},\n    \"load_details\": {\"unit_type\": \"Caja 53ft\"},\n    \"candidate_carriers\": [{\"carrier_name\": \"Fast Logistics\", \"phone\": \"+525512345678\"}],\n    \"options\": {\"broadcast_immediately\": true}\n  }\n]"},"url":"https://api.trebu.io/api/v1/client/tendering/","description":"<p>Create up to 15 loads atomically by sending a JSON array. Stops in <code>stops[]</code> do NOT count toward the 15-load cap, but the total number of trips (loads + stops) cannot exceed 50. All <code>external_load_id</code> values — including any stop-level ones supplied — must be unique within the batch. All trips must have the same <code>broadcast_immediately</code> value.</p>\n<p><strong>Multi-stop:</strong> any load in the batch can include an optional <code>stops: [...]</code> array. See the \"Create Multi-Stop Batch\" example.</p>\n","urlObject":{"protocol":"https","path":["api","v1","client","tendering",""],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"e37901a7-7047-4ccf-a864-4887d2c39a66"},{"name":"Create Multi-Stop Batch","event":[{"listen":"test","script":{"exec":["if (pm.response.code === 201) {","    var jsonData = pm.response.json();","    if (jsonData.trips && jsonData.trips.length > 0) {","        pm.collectionVariables.set('trip_id', jsonData.trips[0].trip_id);","    }","}"],"type":"text/javascript","id":"57a0aa05-de04-4b8c-927a-704ee78ede5c"}}],"id":"211df2f8-b3d3-4916-8fea-20abc4bc5e1b","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"[\n  {\n    \"external_load_id\": \"BATCH-MS-001\",\n    \"origin\": {\n      \"city\": \"Guadalajara\",\n      \"state\": \"Jalisco\",\n      \"country\": \"MX\",\n      \"scheduled_datetime\": \"2026-02-01T08:00:00Z\"\n    },\n    \"destination\": {\n      \"city\": \"Ciudad de Mexico\",\n      \"state\": \"Ciudad de Mexico\",\n      \"country\": \"MX\",\n      \"scheduled_datetime\": \"2026-02-02T10:00:00Z\"\n    },\n    \"load_details\": {\n      \"unit_type\": \"Caja 53ft\",\n      \"weight_kg\": 18000,\n      \"pallets\": 22\n    },\n    \"candidate_carriers\": [\n      {\n        \"carrier_name\": \"Fast Logistics S.A.\",\n        \"phone\": \"+52-555-9876543\"\n      }\n    ],\n    \"options\": {\n      \"broadcast_immediately\": true\n    },\n    \"stops\": [\n      {\n        \"destination\": {\n          \"city\": \"Puebla\",\n          \"state\": \"Puebla\",\n          \"country\": \"MX\",\n          \"scheduled_datetime\": \"2026-02-02T16:00:00Z\"\n        }\n      }\n    ]\n  },\n  {\n    \"external_load_id\": \"BATCH-MS-002\",\n    \"origin\": {\n      \"city\": \"Monterrey\",\n      \"state\": \"Nuevo Leon\",\n      \"country\": \"MX\",\n      \"scheduled_datetime\": \"2026-02-01T10:00:00Z\"\n    },\n    \"destination\": {\n      \"city\": \"Saltillo\",\n      \"state\": \"Coahuila\",\n      \"country\": \"MX\",\n      \"scheduled_datetime\": \"2026-02-01T14:00:00Z\"\n    },\n    \"load_details\": {\n      \"unit_type\": \"Caja 53ft\",\n      \"weight_kg\": 12000,\n      \"pallets\": 18\n    },\n    \"candidate_carriers\": [\n      {\n        \"carrier_name\": \"Fast Logistics S.A.\",\n        \"phone\": \"+52-555-9876543\"\n      }\n    ],\n    \"options\": {\n      \"broadcast_immediately\": true\n    }\n  }\n]"},"url":"https://api.trebu.io/api/v1/client/tendering/api/v1/client/tendering/","description":"<p>Batch with one multi-stop load (BATCH-MS-001 has one extra stop) and one single-destination load (BATCH-MS-002). Demonstrates that multi-stop and single-stop loads can be mixed freely in the same batch.</p>\n<p>The response's per-load entry includes a <code>stops</code> array (empty for loads without additional stops).</p>\n","urlObject":{"path":["api","v1","client","tendering",""],"host":["https://api.trebu.io/api/v1/client/tendering"],"query":[],"variable":[]}},"response":[],"_postman_id":"211df2f8-b3d3-4916-8fea-20abc4bc5e1b"},{"name":"Get Trip Detail","id":"4d33818c-4a5d-4823-8e03-9188f1c52e30","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"url":"https://api.trebu.io/api/v1/client/tendering/12345/","description":"<p>Get full trip details including all carrier responses (<code>carrier_id</code>, <code>status</code>, <code>rate</code>, <code>question</code>, etc.).</p>\n","urlObject":{"protocol":"https","path":["api","v1","client","tendering","12345",""],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"4d33818c-4a5d-4823-8e03-9188f1c52e30"},{"name":"Confirm Carrier","id":"5eedc1bb-c026-4efd-9f2b-12fbe67ed778","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"carrier_id\": 101,\n  \"notes\": \"Best rate\"\n}"},"url":"https://api.trebu.io/api/v1/client/tendering/12345/confirm/","description":"<p>Confirm a carrier for a trip. The carrier must have <code>status: accepted</code>. Triggers a confirmation message to the carrier.</p>\n","urlObject":{"protocol":"https","path":["api","v1","client","tendering","12345","confirm",""],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"5eedc1bb-c026-4efd-9f2b-12fbe67ed778"},{"name":"Answer Carrier Question","id":"50c00998-7ec0-46a3-9cfa-000e7639a2df","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"carrier_id\": 101,\n  \"answer\": \"The loading dock is available from 8 AM to 6 PM.\"\n}"},"url":"https://api.trebu.io/api/v1/client/tendering/12345/answer/","description":"<p>Answer a carrier's question about a trip. The answer is sent to the carrier via WhatsApp.</p>\n","urlObject":{"protocol":"https","path":["api","v1","client","tendering","12345","answer",""],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"50c00998-7ec0-46a3-9cfa-000e7639a2df"},{"name":"Send Message to Carrier","id":"a0e4d87e-e02e-4c66-a387-91b5cb498f3c","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","value":"application/json"},{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"raw","raw":"{\n  \"carrier_id\": 101,\n  \"message\": \"Your unit is confirmed for pickup tomorrow at 8:00 AM.\"\n}"},"url":"https://api.trebu.io/api/v1/client/tendering/message/","description":"<p>Send an arbitrary message directly to a carrier's WhatsApp chat. Not tied to a trip.</p>\n<p>Provide <code>carrier_id</code> and/or <code>channel_id</code> (WhatsApp group id ending in <code>@g.us</code>). At least one is required. If BOTH are provided and they are not linked in our system, the request is rejected with <code>carrier_channel_mismatch</code> (400). Triggers the <code>fmt.message_sent</code> webhook on success.</p>\n","urlObject":{"protocol":"https","path":["api","v1","client","tendering","message",""],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"a0e4d87e-e02e-4c66-a387-91b5cb498f3c"},{"name":"Cancel Tendering","id":"834fc609-8c62-4bc7-b897-9680ee414def","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"},{"key":"Content-Type","value":"application/json"}],"body":{"mode":"raw","raw":"{\n  \"reason\": \"Trip cancelled by client\"\n}"},"url":"https://api.trebu.io/api/v1/client/tendering/12345/cancel/","description":"<p>Cancel the tendering process for a trip. All contacted carriers are notified. <code>reason</code> is optional.</p>\n","urlObject":{"protocol":"https","path":["api","v1","client","tendering","12345","cancel",""],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"834fc609-8c62-4bc7-b897-9680ee414def"},{"name":"Upload Trips File","id":"ad0b2605-c2ea-4e43-b6b1-25c8e8742207","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Authorization","value":"Api-Key REPLACE_ME"}],"body":{"mode":"formdata","formdata":[{"key":"file","type":"file","description":"<p>CSV or Excel file (.csv, .xlsx, .xls)</p>\n","value":null},{"key":"broadcast_immediately","value":"true","type":"text","description":"<p>Optional, default true</p>\n"},{"key":"sheet_name","value":"Trips","type":"text","description":"<p>Optional: Excel sheet name</p>\n","disabled":true}]},"url":"https://api.trebu.io/api/v1/client/tendering/upload/","description":"<p>Upload a CSV or Excel file to create multiple trips at once. Duplicate files (by content hash) are rejected with 409.</p>\n","urlObject":{"protocol":"https","path":["api","v1","client","tendering","upload",""],"host":["api","trebu","io"],"query":[],"variable":[]}},"response":[],"_postman_id":"ad0b2605-c2ea-4e43-b6b1-25c8e8742207"}],"id":"5fe4374a-772e-4a19-8242-4916a5c287a5","description":"<p>FMT (Find Me a Truck) tendering API. Base path: /api/v1/client/tendering/</p>\n<p>Authentication is inherited from the collection (Api-Key header).</p>\n<p>Set the <code>trip_id</code> and <code>carrier_id</code> collection variables after creating a trip to use the action endpoints.</p>\n","_postman_id":"5fe4374a-772e-4a19-8242-4916a5c287a5"}],"id":"6c8de4e2-1ecc-4ad4-86a4-46475a99125e","description":"<p>Endpoints you call to interact with Trebu (manage webhooks, reply to questions, start auctions, tendering API).</p>\n","_postman_id":"6c8de4e2-1ecc-4ad4-86a4-46475a99125e"}],"id":"5214fa5c-9e4f-4f03-8866-9d77bd90b435","description":"<p>Current API &amp; Webhooks (MVP). Backwards-compatible additions will land here. Breaking changes will go to v2+.</p>\n","_postman_id":"5214fa5c-9e4f-4f03-8866-9d77bd90b435"}],"variable":[{"key":"base_url","value":"https://api.trebu.io/api/v1/client/tendering"},{"key":"callback_url","value":"https://example.com/webhooks/trebu"},{"key":"receiver_url","value":"https://example.com/webhooks/trebu"},{"key":"api_key_or_token","value":"REPLACE_ME"},{"key":"api_key","value":"REPLACE_ME"},{"key":"webhook_signature","value":"<hmac_sha256_hex_of_raw_body>"},{"key":"trip_id","value":"12345"},{"key":"carrier_id","value":"101"},{"key":"bid_request_id","value":"1"},{"key":"question_id","value":"1"},{"key":"load_id","value":"1"}]}