Developer
Export data
Read your clean data out of DataCops with simple GET endpoints. Every record is already bot filtered, fraud scored, and consent checked.
Overview
The export endpoints let you read your data out of DataCops. Each one is a GET request, authenticated with your private key and paginated by time, so you can pull new records on a schedule into a warehouse, a spreadsheet, or an automation.
Base URL
https://api.joindatacops.com/api/v1Authentication
Send your Private API Key in the x-dc-key header on every request. Create a key in the dashboard under Settings, then API Keys. See Authentication for details.
x-dc-key: dcp_your_private_api_keyQuery parameters
Every list endpoint below accepts the same three optional parameters.
- since (ISO date): return records at or after this time. Defaults to the beginning.
- until (ISO date): return records before this time. Defaults to now.
- limit (number): page size. Default 100, maximum 500.
Validated conversions
GET /export/conversions
Conversions that passed the bot and consent gates and were delivered to a destination. One row per conversion. No raw PII is returned.
curl "https://api.joindatacops.com/api/v1/export/conversions?limit=100" \
-H "x-dc-key: dcp_your_private_api_key"{
"success": true,
"data": [
{
"id": "1001",
"validated": true,
"event_name": "Purchase",
"provider": "meta",
"value": 49.0,
"currency": "USD",
"order_id": "1001",
"country": "US",
"has_consent": true,
"refunded": false,
"confirmation": "payment_confirmed",
"http_status": 200,
"created_at": "2026-08-26T12:00:00.000Z"
}
],
"pagination": { "count": 1, "has_more": false, "next_since": null }
}The confirmation field
Every conversion carries a confirmation tier — the answer to "did this sale really happen?" Use it to decide what to act on: fulfil, pay commission, or trigger a workflow on confirmed sales, not on unconfirmed pixels.
- payment_confirmed: a payment gateway's server confirmed the sale. Today that is a Shopify
Purchase, which arrives from the server-sideorders/paidwebhook (not a browser pixel). Stripe, Paddle, and Adyen purchases join this tier as their payment-confirm webhook rolls out. - crm_qualified: a CRM or ESP confirmed the lead became qualified (the qualification gate). The confirmation that matters for lead-based flows.
- tracked: a client-side pixel or generic conversion. A real signal, but not gateway- or CRM-confirmed — don't pay or fulfil on this tier alone.
Tip: for confirmed sales only, filter the feed to confirmation === "payment_confirmed". To get server-confirmed Shopify purchases, register the orders/paid webhook topic (it fires only once payment clears).
Identified users
GET /export/identified-users
Real people who identified themselves on your site, each with email fraud and IP risk signals so you only act on genuine leads.
curl "https://api.joindatacops.com/api/v1/export/identified-users?limit=100" \
-H "x-dc-key: dcp_your_private_api_key"{
"success": true,
"data": [
{
"id": "abc123",
"email": "[email protected]",
"source": "client_sdk",
"email_risk_score": 4,
"email_risk_label": "low",
"is_disposable": false,
"ip_country": "US",
"ip_is_vpn": false,
"identified_at": "2026-08-26T12:00:00.000Z"
}
],
"pagination": { "count": 1, "has_more": false, "next_since": null }
}Events
GET /export/events
Your configured Event Manager events. An integration lists these so a user can pick the same event they set up, rather than typing one that may not match.
curl "https://api.joindatacops.com/api/v1/export/events" \
-H "x-dc-key: dcp_your_private_api_key"{
"success": true,
"data": [
{ "key": "Purchase", "name": "Purchase", "source": "standard", "sends_as": "Purchase" },
{ "key": "Lead", "name": "Lead", "source": "standard", "sends_as": "Lead" },
{ "key": "contact_form", "name": "Contact form", "source": "site", "sends_as": "Lead" }
]
}- key: the value to send as the event when posting a conversion.
- name: the human readable label.
- source: where it comes from (standard, site, pixel, hosted, signup).
- sends_as: the standard conversion it maps to, or null if unmapped.
Sessions and detections
Three more list endpoints share the same authentication, query parameters, and paginated response shape as above.
- GET /export/sessions: visit level records, one per session.
- GET /export/bot-detections: visits ruled to be bots, with the reasons.
- GET /export/vpn-proxy-detections: visits hidden behind a VPN, proxy, or Tor.
Pagination
Every list response includes a pagination object. When has_more is true, pass the returned next_since value back as since on your next call, so you never miss or repeat a record.
GET https://api.joindatacops.com/api/v1/export/conversions?since=2026-08-26T12:00:00.000Z&limit=100
x-dc-key: dcp_your_private_api_keyErrors
- 200: success.
- 401: missing or invalid
x-dc-key. - 402: the workspace is paused. Upgrade to resume.
- 500: an unexpected server error. Retry the request.