Skip to main content
Selects one eligible offer for a messaging surface and returns its link plus context fields so you can compose and send the message yourself. No message is composed server-side.
For when to call (thread triggers, per-thread caps) and how to compose and send the message, see the Automated Messaging guide. If you render offers in your own app UI rather than a text conversation, use POST /offers/feed: a nearly identical payload that returns an array and adds advertiserLogo, additionalImages, and a per-offer impressionUid.

Authentication

Pass your publishable key in the X-API-Key header (pk_live_* for production, pk_test_* for development). Multi-app projects also send X-Platform: api. Full model: overview’s Authentication section.

Request

Structure

Field Reference

Response

Structure

Field Reference

The response carries no internal identifiers (impression, campaign, creative, or request ids) and no server-composed message; you build the text from the fields above.

Example

Status codes

Retry guidance

  • Idempotency is on your side. The server does not deduplicate retries; every call generates a fresh short link and analytics row. Call /offers/message once per inbound message you’ve decided to attach an offer to, and de-dupe inbound webhooks on your side before calling.
  • Use exponential backoff with jitter (for example 200ms, 1s, 5s, max 3 retries) for transient failures (429 / 503 / network).
  • After exhausting retries, drop the call and send only your client’s normal reply.