3. Conversion upload API
For the full documentation please visit: https://docs.dripcel.com
Sales and/or Conversion can be uploaded via a POST request or the traditional, postback-via-URL, GET request.
To post a sale back you will need:
API
keywith the required permissions:["sale.create"]
One of either:
campaign_idorsend_idorclick_idto match the sale back to the correct campaign. If you use more than one of these IDs your upload will fail.The
cellof the associated saleThe
soldAtdate if applicable (If blank, the current datetime is used)As well as the
saleValue(If no saleValue is present, thedefaultSaleValueof the corresponding campaign will be used).
Note: If the sales you are uploading are from Campaigns V2, you need to send the cell in international phone number format, example, South Africa: 27631231234.
GET REQUEST / POSTBACK URL
url: POST https://api.dripcel.com/sales/create
This is used to post single sales back, if you want to upload multiple sales, use the POST request.
Note: If a timestamp is included in in soldAt it must be encoded.
Non-encoded: 2025-10-14 16:47:36 | Encoded: 2025-10-14%2016%3A47%3A36
Example (No Timestamp)
https://api.dripcel.com/sales/create?key=KEY&soldAt=2025-10-14&campaign_id=CAMPAIGN_ID&cell=27112223333
Example (Encoded Timestamp)
https://api.dripcel.com/sales/create?key=KEY&soldAt=2025-10-14%2009%3A02%3A51&campaign_id=CAMPAIGN_ID&cell=27112223333
POST REQUEST / Bulk
url: GET https://api.dripcel.com/sales
Body
type Sales = {
/** The campaign ID associated with the sale */
campaign_id: string;
/** The send_id ID associated with the sale */
send_id: string;
/** The click_id ID associated with the sale */
click_id?: string;
/** The cell number of the contact who converted the sale. Can be in local or international format (if local, the country of the corresponding campaign will be used) */
cell: string;
/** The date the sale was made. Must be in ISO format (YYYY-MM-DD), and doesn't have to include time. If blank, the current datetime is used. */
soldAt?: string;
/** The value of the sale. If blank, the `defaultSaleValue` of the corresponding campaign will be used */
saleValue?: number;
}[];Headers
{ "Authorization": "Bearer <key>" }Example
[
{
"cell": "0111111111",
"campaign_id": "639978184d735c88ed8bbd68"
},
{
"saleValue": 100,
"cell": "0111111112",
"soldAt": "2023-02-14",
"campaign_id": "639978184d735c88ed8bbd68",
}
]Response
Success
{
ok: true;
}Error
{
ok: false;
error: "Campaign not found";
}{
ok: false;
// A sale is considered a duplicate if it has the same cell number, campaign_id, and soldAt date as an existing sale
error: "Duplicate sale";
}