Base URL and versioning
Production base URL: https://api.informationdirect.us. Sandbox base URL: https://api-sandbox.informationdirect.us. All requests are versioned by URL path - current version is v1. We add backward-compatible changes without bumping the version; breaking changes get a new version with a 12-month deprecation overlap.
Authentication
The API uses OAuth 2.0 with client credentials. Request a token at POST /oauth/token:
POST /oauth/token
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials
&client_id=YOUR_CLIENT_ID
&client_secret=YOUR_CLIENT_SECRET
&scope=orders.write orders.read webhooks.write Response:
{
"access_token": "eyJhbGciOi...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "orders.write orders.read webhooks.write"
} Include the token on every request: Authorization: Bearer eyJhbGciOi.... Tokens expire in one hour. Your SDK should auto-refresh on 401 responses; our first-party SDKs (Python, Node.js, Java, .NET, PHP, Ruby) do this by default.
Credentials and scopes
Obtain client credentials from your account manager or by opening a ticket from the portal. Scopes available:
orders.read- list and retrieve orders.orders.write- create orders and modify in-progress orders.reports.read- retrieve completed report data and PDFs.webhooks.write- register and modify webhooks.batches.write- create and retrieve batch orders.
Create an order
POST /v1/orders
Authorization: Bearer eyJhbGciOi...
Content-Type: application/json
Idempotency-Key: req-2026-0187
{
"package": "plus",
"applicant": {
"first_name": "Jordan",
"middle_name": "A",
"last_name": "Rivera",
"dob": "1987-06-14",
"email": "jordan@example.com",
"phone": "+13235550177",
"ssn": "123-45-6789"
},
"external_id": "REQ-2026-0187",
"metadata": { "requisition": "R-417", "role": "Warehouse Associate" }
} Response (201):
{
"id": "ord_01HY7R3K8V2NQW",
"status": "pending_consent",
"package": "plus",
"created_at": "2026-04-22T14:05:18Z",
"links": {
"applicant_consent": "https://clients.informationdirect.us/consent/abc123",
"portal_view": "https://clients.informationdirect.us/orders/ord_01HY7R3K8V2NQW"
}
} Include Idempotency-Key on all POST requests. If you retry with the same key within 24 hours, you get the original response - no duplicate orders.
Retrieve an order
GET /v1/orders/ord_01HY7R3K8V2NQW
Authorization: Bearer eyJhbGciOi... Response includes status, component-level findings (if complete), and report-access links.
List orders
GET /v1/orders?status=complete&created_after=2026-04-01&limit=50
Authorization: Bearer eyJhbGciOi... Supports cursor pagination via next_cursor. Filter by status, created_after, created_before, external_id, and package.
Batch orders
POST /v1/orders/batch
Authorization: Bearer eyJhbGciOi...
Content-Type: application/json
{
"default_package": "plus",
"orders": [
{ "applicant": { "first_name": "Jordan", "last_name": "Rivera",
"dob": "1987-06-14", "email": "jordan@example.com" },
"external_id": "REQ-0187" },
{ "applicant": { "first_name": "Priya", "last_name": "Desai",
"dob": "1992-03-02", "email": "priya@example.com" },
"package": "premium", "external_id": "REQ-0188" }
]
} Returns a batch_id plus an array of order IDs. Per-order errors are reported without failing the whole batch.
Reports
GET /v1/reports/ord_01HY7R3K8V2NQW
Authorization: Bearer eyJhbGciOi... Returns machine-readable findings organized by component - criminal records, verifications, credit, MVR, etc. Each finding has a source line, date, jurisdiction, and disposition.
GET /v1/reports/ord_01HY7R3K8V2NQW/pdf
Authorization: Bearer eyJhbGciOi... Returns a binary PDF of the report, identical to the portal export.
Webhooks
Register a webhook to receive state transitions:
POST /v1/webhooks
Authorization: Bearer eyJhbGciOi...
Content-Type: application/json
{
"url": "https://yourapp.example.com/webhooks/infodirect",
"events": ["order.consent_signed", "order.component_complete",
"order.report_complete", "order.dispute_opened"],
"secret": "whsec_..."
} Every delivery includes an X-InfoDirect-Signature header: t=<timestamp>,v1=<hmac_sha256>. Verify server-side before processing - never trust the payload alone. Our SDKs include verification helpers.
Event types
order.created- order accepted, invitation pendingorder.consent_signed- applicant signed disclosure and authorizationorder.component_complete- a single component (e.g., county criminal) finishedorder.report_complete- all components complete; final report availableorder.dispute_opened- applicant opened a dispute on a findingorder.dispute_resolved- reinvestigation concludedorder.adverse_action_pre- pre-adverse action notice sentorder.adverse_action_final- final adverse action issuedorder.canceled- order canceled before completion
Rate limits
Defaults:
- 1,000 requests per minute per access token.
- 500 order creations per minute.
- 50 batch creations per hour.
Exceeding these returns 429 Too Many Requests with a Retry-After header. Enterprise accounts can request increased limits.
Errors
Errors follow a consistent shape:
{
"error": {
"type": "validation_error",
"message": "applicant.dob is required and must be a valid date",
"field": "applicant.dob",
"request_id": "req_01HY7R3KA9"
}
} Include the request_id when contacting support - it's how we find your request in logs.
Common types: validation_error, authentication_error, permission_error, rate_limit_error, not_found, idempotency_error, api_error (retriable).
SDKs
First-party SDKs wrap auth, retries, webhook verification, and typed response models:
- Python -
pip install informationdirect - Node.js -
npm install @informationdirect/node - Java - Maven coordinates on apidocs
- .NET - NuGet
InformationDirect - PHP -
composer require informationdirect/php - Ruby -
gem install informationdirect
Sandbox environment
Test credentials and sandbox base URL are available in the portal under Account / API keys / Sandbox. The sandbox simulates the full order lifecycle with configurable delays, canned findings, and webhook delivery. No real applicants are contacted in sandbox; consent emails route to a test inbox.
Need beta access?
The public API is in limited beta. To request credentials and production access, contact your account manager or email api@informationdirect.us. Turnaround on beta requests is typically two business days.