curl --request GET \
--url https://api.voice.mergenlab.ai/v1/campaigns \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.voice.mergenlab.ai/v1/campaigns', 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"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "cmp_7c1d2e3f4a5b4c6d8e9f0a1b2c3d4e5f",
"tenant_id": "ten_credfin",
"name": "Credfin pre-due Nov",
"description": "EMI due 5 Nov",
"status": "running",
"input_type": "csv",
"agent": {
"id": "agt_credfin_predue_m",
"name": "Credfin pre-due (Hindi, male)"
},
"agent_contract": {
"required_variables": [
"borrower_first_name",
"emi_amount",
"due_date"
],
"optional_variables": [
"lender_name"
],
"default_variables": {
"lender_name": "Credfin"
},
"post_call_variables": [
{
"name": "payment_date",
"type": "date",
"description": "Date the customer said they will pay",
"options": []
},
{
"name": "callback_at",
"type": "datetime",
"description": "When the customer asked to be called back",
"options": []
}
],
"outcomes": [
"confirmed_on_time",
"paid_early",
"callback_scheduled",
"do_not_call",
"wrong_number",
"refused",
"not_reached"
],
"read_at": "2026-10-24T05:00:00.000Z"
},
"goal": {
"outcomes": [
"confirmed_on_time",
"paid_early"
],
"label": "Confirmed or paid"
},
"variables": {
"static": {
"lender_name": "Credfin"
}
},
"csv": {
"phone_column": "phone_number",
"mapping": {
"borrower_first_name": "Name",
"emi_amount": "EMI"
},
"external_id_column": "loan_id"
},
"schedule": {
"start_date": "2026-10-26",
"end_date": "2026-11-05",
"timezone": "Asia/Kolkata",
"time_window_enabled": true,
"daily_start_time": "09:00",
"daily_end_time": "18:00",
"active_days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
]
},
"execution": {
"max_concurrency": 20,
"max_attempts": 3,
"dnc_enabled": true,
"reschedule_enabled": true,
"dial_first_attempt_immediately": false,
"skip_duplicates": true,
"skip_invalid_phones": true,
"budget_micros": 5000000000,
"pause_reason": null,
"pause_details": null
},
"attempts": [
{
"attempt_number": 1,
"day": 1,
"start_time": "10:00",
"instant_redial": true,
"instant_redial_delay_minutes": 5,
"instant_redial_on_statuses": [
"no_answer",
"busy"
],
"conditions": {}
},
{
"attempt_number": 2,
"day": 1,
"start_time": "16:00",
"instant_redial": false,
"instant_redial_delay_minutes": 0,
"instant_redial_on_statuses": [],
"conditions": {
"previous_status_in": [
"no_answer",
"busy"
]
}
},
{
"attempt_number": 3,
"day": 2,
"start_time": "11:00",
"instant_redial": false,
"instant_redial_delay_minutes": 0,
"instant_redial_on_statuses": [],
"conditions": {}
}
],
"retry": {
"retry_on_no_answer": true,
"retry_on_busy": true,
"retry_on_short_call": true,
"short_call_threshold_seconds": 10,
"retry_delay_minutes": 30,
"insight_based_retry_conditions": []
},
"outcome_rules": {
"do_not_call": [
"do_not_call"
],
"callback": [
"callback_scheduled"
],
"wrong_number": [
"wrong_number"
],
"callback_variable": "callback_at"
},
"metadata": {
"portfolio": "nov-predue"
},
"counts": {
"total": 1200,
"pending": 702,
"calling": 18,
"completed": 431,
"exhausted": 25,
"closed": 12,
"skipped": 12
},
"results": {
"success": 286,
"wrong_number": 24,
"final_outcome": 121,
"exhausted": 25,
"end_date": 0,
"do_not_call": 6,
"paid": 6,
"canceled": 0,
"invalid_phone": 7,
"duplicate": 3,
"missing_variables": 2
},
"success_rate": 24.1,
"spend": {
"amount_micros": 1840000000,
"status": "pending",
"calls": 412,
"budget_micros": 5000000000
},
"collected": {
"amount_micros": 91480000000,
"events": 20
},
"window": {
"open_now": true,
"closes_at": "2026-10-26T12:30:00.000Z",
"next_open_at": null
},
"pause_reason": null,
"pause_details": null,
"test_report": {
"status": "passed_with_warnings",
"ran_at": "2026-10-25T10:00:00.000Z",
"checks": [
{
"id": "agent",
"level": "ok",
"title": "Agent",
"detail": "Credfin pre-due (Hindi, male) is active."
},
{
"id": "numbers",
"level": "ok",
"title": "Outbound numbers",
"detail": "2 usable numbers."
},
{
"id": "goal",
"level": "ok",
"title": "Goal",
"detail": "Success: confirmed_on_time, paid_early."
},
{
"id": "records",
"level": "ok",
"title": "Records",
"detail": "1188 of 1200 records will be called."
},
{
"id": "skipped",
"level": "warning",
"title": "Skipped records",
"detail": "12 (1%) will not be called: 7 invalid phone, 3 duplicate, 2 missing variables."
},
{
"id": "dnc",
"level": "warning",
"title": "Do-not-call list",
"detail": "4 records are on the do-not-call list and will be closed."
},
{
"id": "window",
"level": "ok",
"title": "Calling hours",
"detail": "First calls possible 2026-10-26 09:00 (Asia/Kolkata)."
},
{
"id": "ladder",
"level": "ok",
"title": "Attempt ladder",
"detail": "3 attempts per record."
},
{
"id": "capacity",
"level": "ok",
"title": "Capacity",
"detail": "About 2138 attempts, roughly 3.6 calling hours at 20 parallel calls."
}
],
"timeline": [
{
"attempt_number": 1,
"at": "2026-10-26T04:30:00.000Z",
"local": "2026-10-26 10:00",
"note": "day 1 from 10:00; redials 5 min later on no_answer, busy"
},
{
"attempt_number": 2,
"at": "2026-10-26T10:30:00.000Z",
"local": "2026-10-26 16:00",
"note": "day 1 from 16:00; only if its conditions hold"
},
{
"attempt_number": 3,
"at": "2026-10-27T05:30:00.000Z",
"local": "2026-10-27 11:00",
"note": "day 2 from 11:00"
}
],
"samples": [
{
"phone": "+9198XXXXXX01",
"variables": {
"borrower_first_name": "Ravi",
"emi_amount": "4574",
"due_date": "2026-11-05",
"lender_name": "Credfin"
}
}
],
"estimate": {
"records": 1188,
"expected_attempts": 2138,
"calls_per_hour": 600,
"open_hours": 81,
"hours_needed": 3.6,
"fits_schedule": true
}
},
"locked": true,
"actions": [
"edit",
"pause",
"cancel",
"duplicate"
],
"duplicated_from": null,
"launched_at": "2026-10-25T09:55:00.000Z",
"tested_at": "2026-10-25T10:00:00.000Z",
"locked_at": "2026-10-26T04:30:05.000Z",
"started_at": "2026-10-26T04:30:00.000Z",
"paused_at": null,
"completed_at": null,
"canceled_at": null,
"created_at": "2026-10-24T05:00:00.000Z",
"updated_at": "2026-10-26T06:00:00.000Z",
"canceling": false
}
],
"next_cursor": "eyJhdCI6IjIwMjYtMTAtMjRUMDU6MDA6MDAuMDAwWiIsImlkIjoiY21wXzdjMWQifQ"
}List campaigns
Your campaigns, newest first.
curl --request GET \
--url https://api.voice.mergenlab.ai/v1/campaigns \
--header 'Authorization: Bearer <token>'const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.voice.mergenlab.ai/v1/campaigns', 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"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text){
"data": [
{
"id": "cmp_7c1d2e3f4a5b4c6d8e9f0a1b2c3d4e5f",
"tenant_id": "ten_credfin",
"name": "Credfin pre-due Nov",
"description": "EMI due 5 Nov",
"status": "running",
"input_type": "csv",
"agent": {
"id": "agt_credfin_predue_m",
"name": "Credfin pre-due (Hindi, male)"
},
"agent_contract": {
"required_variables": [
"borrower_first_name",
"emi_amount",
"due_date"
],
"optional_variables": [
"lender_name"
],
"default_variables": {
"lender_name": "Credfin"
},
"post_call_variables": [
{
"name": "payment_date",
"type": "date",
"description": "Date the customer said they will pay",
"options": []
},
{
"name": "callback_at",
"type": "datetime",
"description": "When the customer asked to be called back",
"options": []
}
],
"outcomes": [
"confirmed_on_time",
"paid_early",
"callback_scheduled",
"do_not_call",
"wrong_number",
"refused",
"not_reached"
],
"read_at": "2026-10-24T05:00:00.000Z"
},
"goal": {
"outcomes": [
"confirmed_on_time",
"paid_early"
],
"label": "Confirmed or paid"
},
"variables": {
"static": {
"lender_name": "Credfin"
}
},
"csv": {
"phone_column": "phone_number",
"mapping": {
"borrower_first_name": "Name",
"emi_amount": "EMI"
},
"external_id_column": "loan_id"
},
"schedule": {
"start_date": "2026-10-26",
"end_date": "2026-11-05",
"timezone": "Asia/Kolkata",
"time_window_enabled": true,
"daily_start_time": "09:00",
"daily_end_time": "18:00",
"active_days": [
"monday",
"tuesday",
"wednesday",
"thursday",
"friday"
]
},
"execution": {
"max_concurrency": 20,
"max_attempts": 3,
"dnc_enabled": true,
"reschedule_enabled": true,
"dial_first_attempt_immediately": false,
"skip_duplicates": true,
"skip_invalid_phones": true,
"budget_micros": 5000000000,
"pause_reason": null,
"pause_details": null
},
"attempts": [
{
"attempt_number": 1,
"day": 1,
"start_time": "10:00",
"instant_redial": true,
"instant_redial_delay_minutes": 5,
"instant_redial_on_statuses": [
"no_answer",
"busy"
],
"conditions": {}
},
{
"attempt_number": 2,
"day": 1,
"start_time": "16:00",
"instant_redial": false,
"instant_redial_delay_minutes": 0,
"instant_redial_on_statuses": [],
"conditions": {
"previous_status_in": [
"no_answer",
"busy"
]
}
},
{
"attempt_number": 3,
"day": 2,
"start_time": "11:00",
"instant_redial": false,
"instant_redial_delay_minutes": 0,
"instant_redial_on_statuses": [],
"conditions": {}
}
],
"retry": {
"retry_on_no_answer": true,
"retry_on_busy": true,
"retry_on_short_call": true,
"short_call_threshold_seconds": 10,
"retry_delay_minutes": 30,
"insight_based_retry_conditions": []
},
"outcome_rules": {
"do_not_call": [
"do_not_call"
],
"callback": [
"callback_scheduled"
],
"wrong_number": [
"wrong_number"
],
"callback_variable": "callback_at"
},
"metadata": {
"portfolio": "nov-predue"
},
"counts": {
"total": 1200,
"pending": 702,
"calling": 18,
"completed": 431,
"exhausted": 25,
"closed": 12,
"skipped": 12
},
"results": {
"success": 286,
"wrong_number": 24,
"final_outcome": 121,
"exhausted": 25,
"end_date": 0,
"do_not_call": 6,
"paid": 6,
"canceled": 0,
"invalid_phone": 7,
"duplicate": 3,
"missing_variables": 2
},
"success_rate": 24.1,
"spend": {
"amount_micros": 1840000000,
"status": "pending",
"calls": 412,
"budget_micros": 5000000000
},
"collected": {
"amount_micros": 91480000000,
"events": 20
},
"window": {
"open_now": true,
"closes_at": "2026-10-26T12:30:00.000Z",
"next_open_at": null
},
"pause_reason": null,
"pause_details": null,
"test_report": {
"status": "passed_with_warnings",
"ran_at": "2026-10-25T10:00:00.000Z",
"checks": [
{
"id": "agent",
"level": "ok",
"title": "Agent",
"detail": "Credfin pre-due (Hindi, male) is active."
},
{
"id": "numbers",
"level": "ok",
"title": "Outbound numbers",
"detail": "2 usable numbers."
},
{
"id": "goal",
"level": "ok",
"title": "Goal",
"detail": "Success: confirmed_on_time, paid_early."
},
{
"id": "records",
"level": "ok",
"title": "Records",
"detail": "1188 of 1200 records will be called."
},
{
"id": "skipped",
"level": "warning",
"title": "Skipped records",
"detail": "12 (1%) will not be called: 7 invalid phone, 3 duplicate, 2 missing variables."
},
{
"id": "dnc",
"level": "warning",
"title": "Do-not-call list",
"detail": "4 records are on the do-not-call list and will be closed."
},
{
"id": "window",
"level": "ok",
"title": "Calling hours",
"detail": "First calls possible 2026-10-26 09:00 (Asia/Kolkata)."
},
{
"id": "ladder",
"level": "ok",
"title": "Attempt ladder",
"detail": "3 attempts per record."
},
{
"id": "capacity",
"level": "ok",
"title": "Capacity",
"detail": "About 2138 attempts, roughly 3.6 calling hours at 20 parallel calls."
}
],
"timeline": [
{
"attempt_number": 1,
"at": "2026-10-26T04:30:00.000Z",
"local": "2026-10-26 10:00",
"note": "day 1 from 10:00; redials 5 min later on no_answer, busy"
},
{
"attempt_number": 2,
"at": "2026-10-26T10:30:00.000Z",
"local": "2026-10-26 16:00",
"note": "day 1 from 16:00; only if its conditions hold"
},
{
"attempt_number": 3,
"at": "2026-10-27T05:30:00.000Z",
"local": "2026-10-27 11:00",
"note": "day 2 from 11:00"
}
],
"samples": [
{
"phone": "+9198XXXXXX01",
"variables": {
"borrower_first_name": "Ravi",
"emi_amount": "4574",
"due_date": "2026-11-05",
"lender_name": "Credfin"
}
}
],
"estimate": {
"records": 1188,
"expected_attempts": 2138,
"calls_per_hour": 600,
"open_hours": 81,
"hours_needed": 3.6,
"fits_schedule": true
}
},
"locked": true,
"actions": [
"edit",
"pause",
"cancel",
"duplicate"
],
"duplicated_from": null,
"launched_at": "2026-10-25T09:55:00.000Z",
"tested_at": "2026-10-25T10:00:00.000Z",
"locked_at": "2026-10-26T04:30:05.000Z",
"started_at": "2026-10-26T04:30:00.000Z",
"paused_at": null,
"completed_at": null,
"canceled_at": null,
"created_at": "2026-10-24T05:00:00.000Z",
"updated_at": "2026-10-26T06:00:00.000Z",
"canceling": false
}
],
"next_cursor": "eyJhdCI6IjIwMjYtMTAtMjRUMDU6MDA6MDAuMDAwWiIsImlkIjoiY21wXzdjMWQifQ"
}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.
Query Parameters
Only campaigns with this status.
draft (being set up; everything can change), created (launched; the configuration passed its blocking
checks), testing (the dry run is working), tested (the dry run finished; see test_report), running,
paused, completed (no record is left to call, or the end date passed) and canceled. A campaign moves from
draft to created with launch, may be tested any number of times, then goes to running with start.
draft, created, testing, tested, running, paused, completed, canceled Only campaigns that use this agent.
1 - 128Part of the campaign name (case is ignored).
100Page size.
1 <= x <= 100next_cursor of the previous page.
1