Skip to main content

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_type to text and put the message in greeting_override_text.
  • Recording: set greeting_override_type to audio and put the public recording ID in greeting_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.