APIUpdated 2026-07-17

API Quickstart: Authentication, Sandbox, and Errors

Create an API key, make your first calls, and handle rate limits and the error envelope.

The Acquired Data API lets you run everything the dashboard can do — skip tracing, DNC scrubbing, property pulls, and buyer searches — from your own code. All endpoints live under a single base URL:

Base URL
https://data.acquiredcrm.com/api/v1

Create an API key

Go to Dashboard → Webhooks → API Keys and create a key. Keys look like ad_live_... and are shown once, at creation time — copy it into your secrets manager immediately. If you lose a key, revoke it and create a new one. Every request authenticates with a standard bearer header:

Authentication header
Authorization: Bearer ad_live_XXXX

API usage bills against the same credit balance as the dashboard, at your account's per-operation rates.

Your first two calls

Start with GET /me — it verifies your key and returns your credit balances plus the environment your account is running in:

Request
curl https://data.acquiredcrm.com/api/v1/me \
  -H "Authorization: Bearer ad_live_XXXX"
Response
{
  "email": "you@company.com",
  "credits_balance": 52689,
  "monthly_credits": 30000,
  "purchased_credits": 22689,
  "environment": "production"
}

Then fetch GET /pricing. Pricing is per account — custom rates override the platform defaults — so always read your own numbers instead of hardcoding them:

Request
curl https://data.acquiredcrm.com/api/v1/pricing \
  -H "Authorization: Bearer ad_live_XXXX"
Response
{
  "currency": "credits",
  "per_record": {
    "base_trace": 1,
    "single_trace": 2,
    "llc_trust_trace": 6,
    "property_pull": 11,
    "buyer_profile": 70,
    "cached_buyer_profile": 10
  },
  "add_ons": {
    "dnc": 0.5,
    "phone_verification": 0.5,
    "litigator": 0.5,
    "deceased": 0,
    "tested_emails": 0.1,
    "data_verification": 0.9,
    "family_contacts": 1,
    "property_valuation": 17,
    "property_liens": 14
  },
  "notes": "Costs are per record, in credits. LLC/Trust-owned records bill at llc_trust_trace instead of base_trace; add-ons are charged per record on top."
}

Sandbox vs. production

The environment field on /me (and on every job response) tells you which mode your account is in. In sandbox, requests return realistic sample data and never bill credits — ideal for wiring up your integration end to end. In production, every operation runs against live data and charges credits. Contact support to switch your account between environments.

Rate limiting

Each key is limited to 60 requests per minute. Exceeding it returns 429 rate_limited with a Retry-After header (seconds until the window resets). Bulk operations also allow only one active job of each kind per account at a time; a concurrent submission returns 429 job_in_progress — wait for the running job to resolve, or honor Retry-After.

Error envelope

Every error response uses one consistent envelope:

Error envelope
{
  "error": {
    "code": "insufficient_credits",
    "message": "Not enough credits for this job."
  }
}
StatusCodeWhen
401unauthorizedMissing, malformed, or revoked API key
402insufficient_creditsNot enough credits — top up in Billing
403lockdownPlatform temporarily locked by an administrator
404not_foundResource doesn't exist or belongs to another account
409job_not_completeResults or a webhook retry requested before the job resolved
422validation_errorBad request body — the message lists the offending fields
429job_in_progressAnother job is running on this account — retry after Retry-After
429rate_limitedOver 60 requests/minute on this key — retry after Retry-After
500internal_errorUnexpected failure — safe to retry

Next steps