Skip to main content
POST
/
api
/
v1
/
s3
/
presigned-upload-url
Generate a presigned URL for direct CSV upload
curl --request POST \
  --url https://app.dograh.com/api/v1/s3/presigned-upload-url \
  --header 'Content-Type: application/json' \
  --data '
{
  "file_name": "<string>",
  "file_size": 123,
  "content_type": "text/csv"
}
'
{
  "upload_url": "<string>",
  "file_key": "<string>",
  "expires_in": 123
}
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-dograh-instance/api/v1/s3/presigned-upload-url \
  -H "X-API-Key: dg_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.
phone_number,customer_name,plan
+14155550100,Jane Smith,premium
+14155550101,Bob Jones,basic

Headers

authorization
string | null
X-API-Key
string | null

Body

application/json
file_name
string
required

CSV filename

Pattern: .*\.csv$
file_size
integer
required

File size in bytes (max 10MB)

Required range: x <= 10485760
content_type
string
default:text/csv

File content type

Response

Successful Response

upload_url
string
required
file_key
string
required
expires_in
integer
required