> For the complete documentation index, see [llms.txt](https://docs.cekat.ai/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.cekat.ai/api-documentation/chat/broadcast/get-campaign-details.md).

# Get campaign details

Lists every recipient's message in a campaign, newest first, with delivery status, failure reason, and whether they replied or tapped a button. Recommended over `GET /api/campaigns/{id}/messages`.

```json
{"openapi":"3.0.3","info":{"title":"Cekat Open API","version":"1.0.0"},"tags":[{"name":"Broadcast","description":"Use these endpoints to manage WhatsApp message templates, upload recipient lists, and run broadcast campaigns.\n\n## Typical flow\n1. **Create a template** with `POST /templates`. Meta reviews it; its `status` starts as `PENDING`.\n2. **Check approval** with `GET /api/templates`. Only templates with `status: APPROVED` can be sent. If you created or edited templates directly in Meta, call `POST /templates/sync` first to copy them into Cekat.\n3. **Send to one contact** with `POST /templates/send`, or continue below to send to many.\n4. **Upload a recipient list** with `POST /api/recipients`. Contacts are imported in the background; poll `GET /api/recipients` until the list's `total_contacts` matches the number returned by the upload.\n5. **Create a campaign** with `POST /api/campaigns`, using the template's `wa_template_id` as `template_id`. Leave out `schedule_at` to send right away.\n6. **Track results** with `GET /api/campaigns` for totals and `GET /api/v2/campaigns/{id}/messages` for each recipient's delivery status and replies.\n\nEvery step needs the `inbox_id` of a connected WhatsApp inbox. Get it from `GET /api/inboxes` (the `id` of an inbox whose `type` is `whatsapp`).\n"}],"servers":[{"url":"https://api.cekat.ai","description":"Production"}],"security":[{"CekatApiKey":[]},{"BearerAuth":[]}],"components":{"securitySchemes":{"CekatApiKey":{"type":"apiKey","in":"header","name":"api_key","description":"Your business's Cekat API key, from **Settings → Developers & API** in the Cekat dashboard (https://chat.cekat.ai/developers?section=apikeys). Available on the Business and Enterprise plans."},"BearerAuth":{"type":"http","scheme":"bearer","description":"The same Cekat API key, sent as `Authorization: Bearer YOUR_API_KEY`. Accepted only by endpoints under `/api/...`."}},"schemas":{"CampaignMessage":{"type":"object","description":"One recipient's campaign message and what happened to it. Empty strings mean \"not available\".","properties":{"id":{"type":"string","description":"Message ID."},"campaign_id":{"type":"string","format":"uuid"},"campaign_name":{"type":"string"},"conversation_id":{"type":"string"},"phone_number":{"type":"string"},"name":{"type":"string"},"message":{"type":"string","description":"The text that was sent, with variables filled in."},"media_type":{"type":"string"},"media_url":{"type":"string"},"template_category":{"type":"string"},"sent_by":{"type":"string"},"sent_by_name":{"type":"string"},"sent_by_type":{"type":"string"},"created_at":{"type":"string","format":"date-time"},"date_sent":{"type":"string","description":"When the message was sent; empty if it has not been sent."},"last_status":{"type":"string","description":"Latest delivery status, for example `sent`, `delivered`, `read`, or `failed`."},"last_status_at":{"type":"string"},"sent":{"type":"boolean"},"delivered":{"type":"boolean"},"read":{"type":"boolean"},"failed":{"type":"boolean"},"error":{"type":"string","description":"Failure reason when `failed` is true."},"replied":{"type":"boolean"},"is_replied":{"type":"boolean","description":"Same as `replied`."},"button_clicked":{"type":"boolean"},"agent_replied":{"type":"boolean"},"first_reply_id":{"type":"string"},"first_reply_message":{"type":"string"},"first_reply_sent_by":{"type":"string"},"first_reply_sent_by_name":{"type":"string"},"first_reply_media_url":{"type":"string"},"first_reply_media_type":{"type":"string"},"first_reply_created_at":{"type":"string"}}},"ApiError":{"type":"object","description":"Error body returned by the `/api/...` endpoints.","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"statusCode":{"type":"integer"},"error":{"type":"object","properties":{"message":{"type":"string"}}},"correlationId":{"type":"string","description":"Request ID. Include it when contacting Cekat support."}}},"RateLimitError":{"type":"object","properties":{"message":{"type":"string"}}}},"responses":{"ApiUnauthorized":{"description":"The API key is missing or invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"ApiNotFound":{"description":"The resource was not found or does not belong to your business.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"TooManyRequests":{"description":"Rate limit exceeded. Wait and retry.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateLimitError"}}}}}},"paths":{"/api/v2/campaigns/{id}/messages":{"get":{"tags":["Broadcast"],"operationId":"GetCampaignDetailsV2","summary":"Get campaign details","description":"Lists every recipient's message in a campaign, newest first, with delivery status, failure reason, and whether they replied or tapped a button. Recommended over `GET /api/campaigns/{id}/messages`.","parameters":[{"name":"id","in":"path","required":true,"description":"Campaign ID.","schema":{"type":"string","format":"uuid"}},{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":20}}],"responses":{"200":{"description":"A page of campaign messages.","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"array","items":{"$ref":"#/components/schemas/CampaignMessage"}},"metadata":{"type":"object","properties":{"pagination":{"type":"object","properties":{"current_page":{"type":"integer"},"total_page":{"type":"integer"},"limit_per_page":{"type":"integer"},"total_items":{"type":"integer"}}}}}}}}}},"400":{"description":"`page` or `limit` is out of range.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiError"}}}},"401":{"$ref":"#/components/responses/ApiUnauthorized"},"404":{"$ref":"#/components/responses/ApiNotFound"},"429":{"$ref":"#/components/responses/TooManyRequests"}}}}}}
```
