> ## 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.

# Get Offer

> Retrieve a single offer by its unique ID.

Returns the full details of a specific offer. The offer must belong to your account.

## Path Parameters

<ParamField path="id" type="string" required>
  The unique identifier of the offer.
</ParamField>

## Response Fields

<ResponseField name="id" type="string">
  Unique identifier for the offer.
</ResponseField>

<ResponseField name="slug" type="string">
  Human-readable unique slug for the offer, in the form `ofr_{slugified-name}_{hex}`.
</ResponseField>

<ResponseField name="name" type="string">
  Display name of the offer.
</ResponseField>

<ResponseField name="tracking_url" type="string">
  The tracking/click URL for this offer.
</ResponseField>

<ResponseField name="external_platform" type="string">
  The external affiliate platform. One of `tune`, `everflow`, or `null`.
</ResponseField>

<ResponseField name="external_id" type="string">
  The offer ID on the external platform.
</ResponseField>

<ResponseField name="advertiser_id" type="string">
  The advertiser ID associated with the offer.
</ResponseField>

<ResponseField name="advertiser_name" type="string">
  The advertiser name associated with the offer.
</ResponseField>

<ResponseField name="payout" type="float">
  Payout amount for the offer.
</ResponseField>

<ResponseField name="payout_type" type="string">
  Payout model. One of `cpa` or `cpc`.
</ResponseField>

<ResponseField name="filter_bots" type="boolean">
  Whether bot click filtering is enabled.
</ResponseField>

<ResponseField name="status" type="string">
  Current status of the offer: `active`, `paused`, or `archived`.
</ResponseField>

<ResponseField name="metadata" type="object">
  Custom key-value metadata attached to the offer.
</ResponseField>

<ResponseField name="excluded_days_of_week" type="array">
  Weekday names (lowercase `monday` through `sunday`) on which the SMS ad server will not send this offer, evaluated in the contact's local time. Empty array when none are excluded.
</ResponseField>

<ResponseField name="day_parting_enabled" type="boolean">
  Whether intra-day send-window restrictions apply to this offer.
</ResponseField>

<ResponseField name="day_parting" type="object">
  Allow-list of send windows keyed by lowercase weekday, evaluated in Eastern Time. Shape: `{"monday": [{"start": "HH:MM", "end": "HH:MM"}]}`. Empty object when no windows are configured.
</ResponseField>

<ResponseField name="created_at" type="datetime">
  ISO 8601 timestamp of when the offer was created.
</ResponseField>

<ResponseField name="updated_at" type="datetime">
  ISO 8601 timestamp of the last update.
</ResponseField>

## Examples

<RequestExample>
  <CodeGroup>
    ```bash cURL theme={null}
    curl -X GET "https://api.tracklysms.com/api/v2/offers/664f1a2b3c4d5e6f7a8b9c0d" \
      -H "X-Api-Key: trk_your_api_key_here"
    ```

    ```python Python theme={null}
    import requests

    offer_id = "664f1a2b3c4d5e6f7a8b9c0d"

    response = requests.get(
        f"https://api.tracklysms.com/api/v2/offers/{offer_id}",
        headers={"X-Api-Key": "trk_your_api_key_here"}
    )

    offer = response.json()
    print(offer["name"], offer["status"])
    ```

    ```javascript Node.js theme={null}
    const offerId = "664f1a2b3c4d5e6f7a8b9c0d";

    const response = await fetch(
      `https://api.tracklysms.com/api/v2/offers/${offerId}`,
      {
        headers: {
          "X-Api-Key": "trk_your_api_key_here"
        }
      }
    );

    const offer = await response.json();
    console.log(offer.name, offer.status);
    ```
  </CodeGroup>
</RequestExample>

<ResponseExample>
  ```json 200 - Success theme={null}
  {
    "id": "664f1a2b3c4d5e6f7a8b9c0d",
    "slug": "ofr_summer-promo_a1b2c3",
    "name": "Summer Promo",
    "tracking_url": "https://track.example.com/click?offer_id=123",
    "external_platform": "tune",
    "external_id": "4521",
    "advertiser_id": "adv_882",
    "advertiser_name": "Acme Health",
    "payout": 2.50,
    "payout_type": "cpa",
    "filter_bots": true,
    "status": "active",
    "metadata": {
      "vertical": "health",
      "geo": "US"
    },
    "excluded_days_of_week": ["saturday", "sunday"],
    "day_parting_enabled": true,
    "day_parting": {
      "monday": [{"start": "09:00", "end": "17:00"}]
    },
    "created_at": "2025-11-01T14:30:00",
    "updated_at": "2025-12-15T09:12:00"
  }
  ```

  ```json 404 - Not Found theme={null}
  {
    "error": "Offer not found",
    "code": "not_found"
  }
  ```

  ```json 401 - Unauthorized theme={null}
  {
    "error": "Invalid credentials",
    "code": "invalid_credentials"
  }
  ```
</ResponseExample>

## Error Codes

| HTTP Status | Error Code            | Description                                                                |
| ----------- | --------------------- | -------------------------------------------------------------------------- |
| 401         | `invalid_credentials` | API key is missing or invalid.                                             |
| 403         | `account_suspended`   | Your account is suspended. Resolve outstanding billing or contact support. |
| 429         | `rate_limited`        | Request throttled; retry with exponential backoff after the window resets. |
| 404         | `not_found`           | No offer exists with the specified ID.                                     |
| 500         | `server_error`        | An unexpected error occurred on the server.                                |

## Next Steps

<CardGroup cols={2}>
  <Card title="Offers Overview" icon="tag" href="/guides/offers/overview">
    Manage offers and payouts
  </Card>

  <Card title="Record Revenue" icon="dollar-sign" href="/api-reference/v2/revenue/record-revenue">
    Track revenue for this offer
  </Card>
</CardGroup>
