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

Base URL
https://api.joindatacops.com/api/v1

Authentication

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.

HTTP
x-dc-key: dcp_your_private_api_key

Query 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
curl "https://api.joindatacops.com/api/v1/export/conversions?limit=100" \
  -H "x-dc-key: dcp_your_private_api_key"
200 OK
{
  "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-side orders/paid webhook (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
curl "https://api.joindatacops.com/api/v1/export/identified-users?limit=100" \
  -H "x-dc-key: dcp_your_private_api_key"
200 OK
{
  "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
curl "https://api.joindatacops.com/api/v1/export/events" \
  -H "x-dc-key: dcp_your_private_api_key"
200 OK
{
  "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.

HTTP
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_key

Errors

  • 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.
Was this page helpful?