---
title: "Send offer using default template"
method: POST
path: "/v2/tms/offers/{offer_id}/send"
tags: ["v2", "tms", "Load Offers"]
---

# Send offer using default template

`POST /v2/tms/offers/{offer_id}/send`

## Request

- Base URL: `https://api.mentium.io` (the document declares no server; this is the origin it was published from)
- URL: `https://api.mentium.io/v2/tms/offers/{offer_id}/send`
- Auth: HTTP bearer

Sends offer to carriers using the default template for the channel.

    **Auto-Creation:**
    - If the offer doesn't exist, it will be automatically created using calculated defaults
    - Requires `integration_connection_id` in request body when offer doesn't exist
    - Pass the literal string `new` as `offer_id` to skip the existing-offer lookup and force
      creation from the request payload (used by the compose flow before any offer is persisted)
    - When `min_load_offer_carrier_rate_amount` is provided in the body it overrides any saved value;
      the LoadOffer is created or updated at send time using that amount

    **Template System:**
    - If `template_id` is provided, uses that specific template
    - If `subject` and `body` are provided, uses them directly (no template)
    - Otherwise, uses the default template for the channel
    - Template variables are automatically filled with load and carrier data from Vortex

    **Template Variables:**
    Templates support {{variable}} syntax filled from LoadSchema and CarrierSchema:
    - {{load.external_reference_id}}, {{load.weight}}, {{load.equipment_type}}
    - {{carrier.name}}, {{carrier.dot_number}}
    - {{load.customer.name}}, {{load.stops.0.city}}, etc.

    **Channel Types:**
    - EMAIL: Sends via workspace email integration
    - SMS: Sends via SMS integration (future)
    - WHATSAPP: Sends via WhatsApp integration (future)

## Path parameters

- `offer_id` string, required

## Headers

- `mentium-workspace-id` string, nullable

## Request body

- SendOfferRequest
  - `channel` 'EMAIL' | 'SMS' | 'WHATSAPP' | 'TEAMS', required
  - `subject` string, nullable: Email subject (optional if using template)
  - `body` string, nullable: Email body HTML (optional if using template)
  - `carriers` CarrierRecipient[], required
    - `carrier_id` string, nullable
    - `external_reference_id` string, required
    - `email` string, nullable
    - `phone` string, nullable
    - `name` string, nullable
    - `contact_name` string, nullable
    - `contact_email` string, nullable
    - `contact_phone` string, nullable
    - `contact_type` string, nullable
    - `recipient_contacts` OfferRecipientContact[], nullable
      - `email` string, required
      - `name` string, nullable
      - `phone` string, nullable
      - `type` string, nullable
      - `subject_override` string, nullable: Per-contact rendered subject. Takes precedence over the carrier-level subject_override for this recipient only. Frontend ships this when the user edits the email for a specific contact (e.g. fixing a name spelling).
      - `body_override` string, nullable: Per-contact rendered body HTML. Takes precedence over the carrier-level body_override.
    - `public_booking_token` string, nullable: Pending booking token returned by /prepare-public-booking-link.
    - `public_booking_signature` string, nullable: HMAC signature returned by /prepare-public-booking-link; required when token is set.
    - `public_booking_expires_at` string, date-time, nullable: Expiry timestamp returned by /prepare-public-booking-link; required when token is set.
    - `subject_override` string, nullable: Per-carrier rendered subject. When provided, the template is not re-rendered for this carrier.
    - `body_override` string, nullable: Per-carrier rendered body HTML. When provided, the template is not re-rendered for this carrier.
  - `load_external_reference_id` string, required
  - `integration_connection_id` string, required: TMS integration connection UUID (required for auto-creating offer if it doesn't exist)
  - `min_load_offer_carrier_rate_amount` number, nullable: Carrier-facing opening rate to persist if the offer is created or updated during send.
  - `max_load_offer_carrier_rate_amount` number, nullable: Maximum acceptable carrier bid.
  - `template_id` string, nullable: Specific template ID to use (optional, uses default if not provided)
  - `content_is_rendered` boolean: When true, subject/body are final edited content and must not be rendered again.

## Response `200`

Successful Response

- SendOfferBulkResponse: Response from bulk send offer operation
  - `success` boolean, required
  - `sent_count` integer, required
  - `results` SendOfferResult[], required
    - `carrier_id` string, required
    - `carrier_name` string, nullable
    - `carrier_contact_email` string, nullable
    - `carrier_contact_name` string, nullable
    - `carrier_phone` string, nullable
    - `conversation_id` string, nullable
    - `carrier_offer_id` string, nullable
    - `success` boolean, required
    - `error` string, nullable

## Other responses

- `422`: Validation Error

---

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