> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tracklysms.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Manage Offers and Creatives with an Assistant

> Let a connected assistant list, create, edit, activate, and archive SMS offers and creatives, including their send dates.

A connected assistant can manage your SMS [offers](/guides/offers/overview.md) and [creatives](/guides/creatives/overview.md): list and read them, create new ones, change their fields and send dates, activate or pause them, and archive them. These tools do not send messages. Sending stays in the [held-send workflow](/agents/send-with-approval.md).

## Authorize offers and creatives

Start a fresh client connection that requests `trackly.offers`. Add `trackly.agent` if the assistant also needs the SMS tools, and `trackly.registration` for [number registration](/agents/number-registration.md). In Trackly's consent screen, the owner reviews the **Offers and creatives** section and accepts it. If the client requests only `trackly.agent` or `trackly.registration`, the consent screen still shows **Offers and creatives** as an optional checkbox; select it to add offer and creative management to that connection.

* An existing `trackly.agent` or `trackly.registration` connection does not include offers and creatives. Token refresh cannot add the scope; reconnect and select **Offers and creatives** on the consent screen.
* Private API-key MCP connections cannot use these tools.
* The reviewer demo does not support them.

A connection with this permission shows an **Offers and creatives** badge in **Settings → Agent connections**, where an owner can disconnect it.

A tool called without the permission returns `insufficient_scope` with reconnection guidance and makes no request to Trackly.

## Activation sends without further approval

An active offer or creative is eligible for scheduled and automated sends with no further approval. Activating an offer also resumes journeys that were auto-paused because of it, and pausing or archiving an offer auto-pauses journeys that can no longer send.

Ask the assistant to create records with `status: "paused"`, review them with you, and activate them only after you confirm. Both create tools default to `active` when no status is given.

## Tools

| Tool | What it does |
| - | - |
| `trackly_list_offers` | List offers, newest first. Filter by `status`, `external_id`, `external_platform`, or `platform_config_id` |
| `trackly_get_offer` | Read one offer, including status, send dates, day exclusions, and day parting |
| `trackly_create_offer` | Create an offer. Requires `name` and `tracking_url` |
| `trackly_update_offer` | Change an offer's fields or status. Omitted fields stay unchanged |
| `trackly_archive_offer` | Archive an offer so it no longer sends |
| `trackly_list_creatives` | List creatives, newest first. Filter by `status`, `creative_type`, or `list_id` |
| `trackly_get_creative` | Read one creative, including its message, link mappings, status, and send dates |
| `trackly_create_creative` | Create a creative. Requires `name` and `message` |
| `trackly_update_creative` | Change a creative's fields or status. Omitted fields stay unchanged |
| `trackly_archive_creative` | Archive a creative so it is no longer selected for sends |

The tools call the [Offers](/api-reference/v2/offers/list-offers.md) and [Creatives](/api-reference/v2/creatives/list-creatives.md) endpoints of the v2 API, so field names and validation match the API reference.

### Creative links

Each `{{linkN}}` placeholder in a creative's `message` needs an `offer_links` entry with exactly one of `offer_id` or `custom_url`. On update, `offer_links` replaces every existing mapping. Messages are checked against blocked-content rules.

## Send dates

Offers and creatives accept the same send-date fields:

| Field | Value |
| - | - |
| `start_date` | `YYYY-MM-DD`. First day the record can send |
| `end_date` | `YYYY-MM-DD`. Last day the record can send (included) |
| `dates_timezone` | `America/New_York`, `America/Chicago`, `America/Denver`, `America/Los_Angeles`, or `UTC`. `null` follows the account timezone |

On update, `null` clears a date and an omitted field keeps its value. An end date before the start date returns `invalid_date_window`. Send dates never change a record's status. See [Send Dates](/guides/offers/overview.md#send-dates) for how they apply to each send path.

## Uncertain outcomes

If Trackly's response to a create, update, or archive is missing or doesn't confirm the requested change, the tool returns an `unknown_*` code (for example `unknown_offer_create` or `unknown_creative_archive`). The assistant should read the record back, or list records after a create, before doing anything else. Creation is not idempotent, so the assistant must never repeat a create automatically.

Validation errors such as `invalid_date_window` are returned unchanged. The assistant should correct the input and ask you before trying again.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.