/accountRead company pricing and wallet
Returns orderingEnabled, prices.STORED, prices.FRESH, wallet and limits. Prices can be null before setup. Wallet fields balance, held and available are USD cents.
Request a report by VIN, follow its progress and deliver the completed document through a private company API.
https://akis-solutions.com/api/v1/carfaxAuthentication and account inspection can be integrated now. New paid orders require agreed company prices and prepaid funding. Check orderingEnabled before submitting a purchase.
01 · START HERE
Use a company key supplied separately by AKIS. This read-only call returns the current prices, wallet and ordering status. Every monetary value is an integer number of USD cents.
BASE_URL="https://akis-solutions.com/api/v1/carfax"
# CARFAX_API_KEY is loaded from your server's secret store.
curl "$BASE_URL/account" \
-H "Authorization: Bearer $CARFAX_API_KEY"{
"company": "carreport360.com",
"currency": "USD",
"prices": { "STORED": null, "FRESH": null },
"orderingEnabled": false,
"wallet": { "balance": 0, "held": 0, "available": 0 },
"limits": {
"requestsPerMinute": 60,
"pendingReports": 5,
"reportsPerDay": 100
}
}Read GET /account. Proceed only when ordering is enabled and available credit covers the selected price.
Generate a UUID once and persist it with the VIN, mode and quoted price. Use it as the Idempotency-Key for every retry of this purchase.
Submit POST /reports. Save its response id; poll status initially every five seconds and back off if processing continues.
When status is ready, download using the bearer endpoint or the five-minute signed link.
02 · AUTHENTICATION
Send the header below on account, order, status and direct-download requests. Store the credential in your server’s secret manager and exclude it from client bundles, analytics, URLs and logs.
Authorization: Bearer <CARFAX_API_KEY>Authenticated API calls must come from your server. Requests carrying browser Origin or Sec-Fetch-Site headers are rejected. A signed report URL can open the completed document in a browser without exposing the company key.
03 · API REFERENCE
Append these paths to the base URL. JSON requests and responses use UTF-8. Account and order endpoints accept no query parameters.
/accountReturns orderingEnabled, prices.STORED, prices.FRESH, wallet and limits. Prices can be null before setup. Wallet fields balance, held and available are USD cents.
/reportsRequires Content-Type: application/json and a UUID in the Idempotency-Key header. The body contains exactly these three fields:
| Field | Required value |
|---|---|
vin | A 17-character VIN; letters I, O and Q are excluded. Input is trimmed and uppercased. |
mode | STORED uses an available completed report. FRESH requests a new supplier report. |
expectedPriceCents | The selected price from GET /account, as a positive integer no larger than 100000000. |
{
"vin": "1HGCM82633A004352",
"mode": "FRESH",
"expectedPriceCents": 200
}The example’s 200 cents is illustrative. Company prices are agreed separately.
# Replace 200 with the current FRESH quote from GET /account.
# Replace the example UUID with your saved purchase UUID.
# Keep the same UUID and body for retries of this purchase.
curl "$BASE_URL/reports" \
-X POST \
-H "Authorization: Bearer $CARFAX_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 11111111-2222-4333-8444-555555555555" \
--data '{"vin":"1HGCM82633A004352","mode":"FRESH","expectedPriceCents":200}'A new pending order returns HTTP 202. A completed or failed result, including an idempotent replay, can return 200. Save the returned id, which can refer to a matching existing order. A stored request returns 404 if no completed stored report is available.
/reports?id={id}Send the request ID returned by the order endpoint. Inspect status on every response: HTTP 200 alone does not mean a document is ready. Pending responses include Retry-After: 5.
{
"id": "11111111-2222-4333-8444-555555555555",
"vin": "1HGCM82633A004352",
"mode": "FRESH",
"status": "processing",
"priceCents": 200,
"currency": "USD",
"createdAt": "2026-01-01T12:00:00.000Z",
"updatedAt": "2026-01-01T12:00:05.000Z",
"error": null,
"report": null
}A ready response replaces report: null with url, expiresAt, mimeType and retrievedAt. A new status request issues a new five-minute signed URL.
/report?id={id}Use the company bearer header to fetch the file directly, or open the signed report.url before expiresAt. Signed URLs include an opaque ticket parameter and must be treated as private access credentials.
Delivery returns application/pdf or cleaned text/html. Inspect Content-Type and Content-Disposition when saving the file. Document size is limited to 15 MiB. PDF conversion and extracted vehicle-history JSON are outside this contract.
04 · REPORT LIFECYCLE
Reports are acquired asynchronously. Supplier processing has no promised completion time. Your application’s polling timeout does not cancel an accepted order.
| Status | Meaning | Client action |
|---|---|---|
| queued | The order is waiting for acquisition. | Keep its ID and poll. |
| processing | The supplier or document validation is still working. | Back off polling; retain the original order. |
| ready | A completed report version is validated and available. | Download the document. |
| failed | The order could not be delivered; its reserved credit is released. | Stop polling and inspect error. |
Keep polling the original order when processing takes longer than expected. A new fresh purchase can incur a new charge. The API never automatically places a replacement paid supplier order.
05 · BILLING & RETRIES
An accepted order holds its quoted price against prepaid available credit while it is pending.
A supplier acknowledgement is followed by document completion and validation.
A validated ready report is debited once. Failed delivery releases the reservation.
409 IDEMPOTENCY_CONFLICT.409 PENDING_REQUEST_CONFLICT.STORED report reopens without another debit. The returned order retains its original purchase mode and priceCents; that field is not a new charge on replay.409 PRICE_CHANGED. Read the account again and explicitly approve the new quote before making a new purchase.New orders are currently paused until company pricing and prepaid funding are agreed. Existing order status and completed-document retrieval remain available to authorized accounts. Monthly invoicing is not configured.
06 · LIMITS & ERRORS
The request-rate limit is shared across the company account, including signed-link downloads. The daily order limit resets at midnight UTC and includes failed orders. Replays and reopens reuse their existing order. JSON request bodies are limited to 8 KiB.
{
"error": {
"code": "ORDERING_DISABLED",
"message": "Report ordering is disabled until company pricing and billing are configured."
}
}| HTTP | Typical cause | Next step |
|---|---|---|
400 | Invalid VIN, mode, price, UUID or parameters. | Correct the request. |
401 | Invalid company key or expired signed link. | Check the key, or renew the link through status. |
403 | Disabled ordering/account, or browser API request. | Check account activation and server integration. |
404 | Unavailable stored report or inaccessible request/file. | Check the request ID, ownership and readiness. |
409 | Price, idempotency, pending-request or balance conflict. | Review the error code and existing account/order. |
413 / 415 | Oversized request/file or wrong request media type. | Keep within size limits; send JSON. |
429 | Request rate or report limit reached. | Honor Retry-After: 60; also check pending/day limits. |
503 / 504 | Service unavailable or GATEWAY_TIMEOUT. | Back off; retain the original purchase key and payload. |
After a POST timeout or gateway error, an order may already exist. If you have its ID, poll that order. Otherwise, retry the original request with the same saved UUID and unchanged payload after backoff.
A one-minute retry delay does not reset a daily report cap. Wait for the relevant limit to clear or contact AKIS account support.
07 · INTEGRATION FILES
Endpoint schemas, request fields, response types and authentication.
carfax-openapi.jsonServer-side requests, bounded polling and report downloads.
carfax-client.mjsimport { CarfaxClient } from './carfax-client.mjs';
const client = new CarfaxClient({
apiKey: process.env.CARFAX_API_KEY,
baseUrl: 'https://akis-solutions.com/api/v1/carfax'
});
const account = await client.getAccount();
console.log({
orderingEnabled: account.orderingEnabled,
prices: account.prices
});The client exposes getAccount(), requestReport(), getReport(), waitForReport() and downloadReport(). requestReport() takes an explicitly supplied UUID. Polling is bounded and opt-in; purchases are not automatically retried.
Custom software, business systems and vehicle services.
Loading your page…
Custom software, business systems and vehicle services.
Custom software, business systems and vehicle services.
Loading your page…
Custom software, business systems and vehicle services.