curl --request GET \
--url https://api.voice.mergenlab.ai/v1/campaigns/{campaignId}/records/{recordId} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.voice.mergenlab.ai/v1/campaigns/{campaignId}/records/{recordId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.voice.mergenlab.ai/v1/campaigns/{campaignId}/records/{recordId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"id": "rec_1a2b3c4d5e6f40718293a4b5c6d7e8f9",
"campaign_id": "cmp_7c1d2e3f4a5b4c6d8e9f0a1b2c3d4e5f",
"seq": 1,
"phone": "+9198XXXXXX01",
"external_id": "LN-123",
"variables": {
"borrower_first_name": "Ravi",
"emi_amount": "4574",
"due_date": "2026-11-05",
"lender_name": "Credfin"
},
"source": "csv",
"source_row": 2,
"status": "completed",
"result": "success",
"result_detail": "confirmed_on_time",
"missing_variables": [],
"attempts_made": 2,
"callbacks_used": 0,
"next_attempt_number": null,
"next_attempt_at": null,
"next_is_callback": false,
"last_status": "completed",
"last_outcome": "confirmed_on_time",
"last_call_at": "2026-10-26T10:31:00.000Z",
"post_call": {
"payment_date": "2026-11-05"
},
"attempts": [
{
"attempt_number": 1,
"call_id": "call_0a1b2c3d4e5f40718293a4b5c6d7e8f1",
"scheduled_for": "2026-10-26T04:30:00.000Z",
"started_at": "2026-10-26T04:30:04.000Z",
"ended_at": "2026-10-26T04:30:49.000Z",
"status": "no_answer",
"outcome": null,
"duration_sec": 0,
"post_call": {},
"cost_micros": 0,
"decision": "instant_redial",
"callback": false
},
{
"attempt_number": 2,
"call_id": "call_0a1b2c3d4e5f40718293a4b5c6d7e8f2",
"scheduled_for": "2026-10-26T10:30:00.000Z",
"started_at": "2026-10-26T10:30:02.000Z",
"ended_at": "2026-10-26T10:31:00.000Z",
"status": "completed",
"outcome": "confirmed_on_time",
"duration_sec": 52,
"post_call": {
"payment_date": "2026-11-05"
},
"cost_micros": 4500000,
"decision": "done",
"callback": false
}
],
"paid_at": null,
"collected_micros": 0,
"closed_at": "2026-10-26T10:31:00.000Z",
"created_at": "2026-10-24T05:05:00.000Z",
"updated_at": "2026-10-26T10:31:00.000Z"
}Get one record of a campaign
The record with every attempt so far.
curl --request GET \
--url https://api.voice.mergenlab.ai/v1/campaigns/{campaignId}/records/{recordId} \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.voice.mergenlab.ai/v1/campaigns/{campaignId}/records/{recordId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.voice.mergenlab.ai/v1/campaigns/{campaignId}/records/{recordId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"id": "rec_1a2b3c4d5e6f40718293a4b5c6d7e8f9",
"campaign_id": "cmp_7c1d2e3f4a5b4c6d8e9f0a1b2c3d4e5f",
"seq": 1,
"phone": "+9198XXXXXX01",
"external_id": "LN-123",
"variables": {
"borrower_first_name": "Ravi",
"emi_amount": "4574",
"due_date": "2026-11-05",
"lender_name": "Credfin"
},
"source": "csv",
"source_row": 2,
"status": "completed",
"result": "success",
"result_detail": "confirmed_on_time",
"missing_variables": [],
"attempts_made": 2,
"callbacks_used": 0,
"next_attempt_number": null,
"next_attempt_at": null,
"next_is_callback": false,
"last_status": "completed",
"last_outcome": "confirmed_on_time",
"last_call_at": "2026-10-26T10:31:00.000Z",
"post_call": {
"payment_date": "2026-11-05"
},
"attempts": [
{
"attempt_number": 1,
"call_id": "call_0a1b2c3d4e5f40718293a4b5c6d7e8f1",
"scheduled_for": "2026-10-26T04:30:00.000Z",
"started_at": "2026-10-26T04:30:04.000Z",
"ended_at": "2026-10-26T04:30:49.000Z",
"status": "no_answer",
"outcome": null,
"duration_sec": 0,
"post_call": {},
"cost_micros": 0,
"decision": "instant_redial",
"callback": false
},
{
"attempt_number": 2,
"call_id": "call_0a1b2c3d4e5f40718293a4b5c6d7e8f2",
"scheduled_for": "2026-10-26T10:30:00.000Z",
"started_at": "2026-10-26T10:30:02.000Z",
"ended_at": "2026-10-26T10:31:00.000Z",
"status": "completed",
"outcome": "confirmed_on_time",
"duration_sec": 52,
"post_call": {
"payment_date": "2026-11-05"
},
"cost_micros": 4500000,
"decision": "done",
"callback": false
}
],
"paid_at": null,
"collected_micros": 0,
"closed_at": "2026-10-26T10:31:00.000Z",
"created_at": "2026-10-24T05:05:00.000Z",
"updated_at": "2026-10-26T10:31:00.000Z"
}Authorizations
Authorization: Bearer vg_live_<32 hex characters>. Keys are issued by Mergen admins and shown once.
Missing or invalid key: 401 unauthorized. Suspended account: 403 tenant_suspended.
Path Parameters
Campaign id (cmp_ + 32 hex characters).
Campaign record id (rec_ + 32 hex characters).
Response
The record.
One person to call in a campaign. variables are the resolved values the calls use. seq is the order of
arrival and source_row the CSV row (or the position in the API request). next_attempt_at is when the next
attempt is planned (next_is_callback when it is a callback the customer asked for). post_call holds the
post-call variables of the latest answered call.
rec_ + 32 hex characters.
x >= 1E.164.
Show child attributes
Show child attributes
csv, api pending (waiting for its next attempt), calling (an attempt is on the line), completed (finished with a
success, another final outcome or a wrong number), exhausted (attempts or the schedule used up), closed
(do not call, paid, or canceled) and skipped (never called: invalid phone, duplicate or missing variables).
pending, calling, completed, exhausted, closed, skipped How a record ended: success (an outcome of goal.outcomes), wrong_number, final_outcome (another outcome
that ends the record; result_detail names it), exhausted (no attempt left), end_date (the schedule ended
first), do_not_call, paid (a customer event), canceled, invalid_phone, duplicate and
missing_variables (result_detail lists them).
success, wrong_number, final_outcome, exhausted, end_date, do_not_call, paid, canceled, invalid_phone, duplicate, missing_variables The outcome behind final_outcome or success, or the missing variables.
x >= 0x >= 0Show child attributes
Show child attributes
x >= 0