List campaign recipients
GET
https://api.voice-agent.gowajee.ai/api/campaign/:id/recipientsReturns a campaign’s recipients, 100 per page, newest first. Each one shows how many times it was called and the status of its latest call.
Parameters
Section titled “Parameters”| Name | In | Type | Default | Description |
|---|---|---|---|---|
id |
path | string | The campaign ID. | |
page |
query | integer | 1 |
The page number, starting at 1. |
The page size is fixed at 100. A limit parameter is ignored.
Request
Section titled “Request”curl "https://api.voice-agent.gowajee.ai/api/campaign/eac2489c-672c-455e-ab8c-4e0ecd18d7dc/recipients?page=1" \ -H "X-API-Key: $GOWAJEE_API_KEY"// Read every pageconst all = [];for (let page = 1; ; page++) { const res = await fetch( `https://api.voice-agent.gowajee.ai/api/campaign/${campaignId}/recipients?page=${page}`, { headers: { 'X-API-Key': process.env.GOWAJEE_API_KEY } }, ); const { data } = await res.json(); all.push(...data.recipients); if (page >= data.totalPages) break;}recipients, page = [], 1while True: data = requests.get( f"https://api.voice-agent.gowajee.ai/api/campaign/{campaign_id}/recipients", params={"page": page}, headers={"X-API-Key": os.environ["GOWAJEE_API_KEY"]}, timeout=30, ).json()["data"] recipients += data["recipients"] if page >= data["totalPages"]: break page += 1Response
Section titled “Response”{ "success": true, "message": "Get Campaign recipients successfully", "data": { "totalRecipients": 1200, "totalPages": 12, "page": 1, "recipients": [ { "id": "5b1f0c9e-2d4a-4f6b-9a61-3c7e8d2f1a04", "customerName": "Somchai", "tel": "0812345678", "callAttempt": 2, "latestCallStatus": "COMPLETED", "agentParams": { "customer_name": "Somchai", "amount_due": 1500 }, "campaignId": "eac2489c-672c-455e-ab8c-4e0ecd18d7dc", "createdAt": "2026-09-30T08:12:44.120Z", "updatedAt": "2026-10-01T03:20:11.004Z", "personalDataMasked": false } ] }}{ "success": false, "statusCode": 404, "code": "CAMPAIGN_NOT_FOUND", "message": "Campaign not found", "errors": ["Campaign not found"]}{ "success": false, "statusCode": 400, "code": "VALIDATION_FAILED", "message": "page must be an integer of 1 or more", "errors": ["page must be an integer of 1 or more"]}| Field | Type | Description |
|---|---|---|
totalRecipients |
integer | Recipients in the campaign. |
totalPages |
integer | Pages at 100 per page. |
recipients[].id |
string (UUID) | The recipient ID. Use it with Get a recipient. |
recipients[].customerName |
string or null |
null if you didn’t send a name. |
recipients[].callAttempt |
integer | How many call attempts have ended for this recipient so far. A call that timed out in the queue isn’t counted. |
recipients[].latestCallStatus |
string or null |
The status of the newest call. Once the campaign is started, everyone has a call, so a person not dialled yet shows SCHEDULED. It is null only before the campaign is started. See Call status. |
recipients[].agentParams |
object | The data you uploaded. |
recipients[].personalDataMasked |
boolean | true when the retention policy has removed this person’s data. tel is then masked (08xxxxxx78) and customerName is "". agentParams keeps every key, but each value becomes null. Keys that start with metadata__ keep their values. |
Errors
Section titled “Errors”The body is the usual error envelope.
| Status | code |
message |
Cause |
|---|---|---|---|
400 |
INVALID_ID |
id must be a valid UUID |
The id in the path isn’t a UUID. |
400 |
VALIDATION_FAILED |
page must be an integer of 1 or more |
page is 0, negative, a decimal, empty or not a number. Leave it out to get page 1. |
404 |
CAMPAIGN_NOT_FOUND |
Campaign not found |
Wrong id, or the campaign belongs to another organization. |