Upload Contacts CSV
Uploading contacts is a two-step process. First call this endpoint to get a presigned upload URL, then PUT your CSV directly to that URL.
# Step 1: Get upload URL
curl -X POST https://your-intracord-host.example/api/v1/s3/presigned-upload-url \
-H "X-API-Key: itc_your_api_key"
# Response:
# { "upload_url": "https://...", "s3_key": "campaigns/..." }
# Step 2: Upload the CSV
curl -X PUT "https://presigned-url..." \
-H "Content-Type: text/csv" \
--data-binary @contacts.csv
Use the s3_key from the response as the source_url when creating a campaign.
CSV format
The CSV must include a phone_number column. Any additional columns are passed as initial_context to each call, making them available as template variables in the workflow.
What counts as a valid phone_number depends on the telephony configuration the campaign dials with. Carriers require E.164 — a +, country code, then the number. An Asterisk ARI configuration also accepts extensions, SIP URIs and dial strings, since those are what its PBX reaches. Either way, numbers must be unique within a campaign and cannot contain spaces, commas or ampersands.
phone_number,customer_name,plan,greeting_override_type,greeting_override_text
+14155550100,Jane Smith,premium,text,Hello {{customer_name}}
+14155550101,Bob Jones,basic,text,Welcome back {{customer_name}}
To override the Start node greeting for a row, use these optional columns:
- Text: set
greeting_override_typetotextand put the message ingreeting_override_text. - Recording: set
greeting_override_typetoaudioand put the public recording ID ingreeting_override_recording_id.
Greeting text can reference other CSV columns, such as Hello {{customer_name}}. Empty override columns preserve the greeting configured in the Start node.