Your first successful call takes a few minutes after your workspace is enabled: create a sandbox key, inspect the key's configuration and coverage, send a stateless calculation, and review the response. Sandbox transactions remain isolated from live filing and reporting workflows.
- Request workspace enablement. If you are not yet a customer, the Request sandbox access form starts a manual enablement review. Submitting the form does not immediately create a workspace, user, or API key.
- Create a sandbox key. After enablement, an organization administrator signs in to the Developer Console and creates the key. Sandbox keys start with
itms_test_, and the secret is displayed once. Store it server-side. - Discover the active contract. Call
GET /api/v1/configfor effective limits, scopes, and tax codes, thenGET /api/v1/coverage/statesfor current jurisdiction coverage. - Send a stateless calculation. The example uses
nexus_mode=referenceso a newly enabled sandbox can calculate before nexus is configured. Reference mode is available only for stateless analysis and is rejected for committed transactions. Prefer a mid-windowtransaction_date(the sample uses2026-07-15) so owned statewide-general packages that intentionally start after historical transition tails (for example Maryland) are exercised on their official rate path rather than a snapshot fallback. - Inspect authority and warnings. Each line returns tax, jurisdiction detail, and warnings. The metadata reports calculation authority and resolution quality without requiring knowledge of ITMS's internal content-processing architecture.
Not sure which call comes first?
The signed-in Developer Console includes a request planner. Describe your objective in plain English and it returns an ordered set of documented sandbox calls with methods, paths, scopes, request bodies, and copyable cURL. It suggests calls only—it never runs them or inserts a real credential. Review the generated placeholders before testing.
Calculate tax
curl -X POST https://prophit.ai/api/v1/tax/calculate \
-H "Authorization: Bearer itms_test_YOUR_SANDBOX_KEY" \
-H "Content-Type: application/json" \
-d '{
"transaction_date": "2026-07-15",
"nexus_mode": "reference",
"ship_to": {
"line1": "350 5th Ave",
"city": "New York",
"state": "NY",
"zip_code": "10118"
},
"lines": [
{ "number": 1, "amount": "100.00", "quantity": 1, "tax_code": "TAXABLE", "description": "Tangible personal property test item" }
]
}'Representative response
{
"request_id": "9f4c1d2e-7b3a-4f7e-9c1d-2e7b3a4f7e9c",
"environment": "sandbox",
"transaction_date": "2026-07-15",
"currency": "USD",
"customer_code": null,
"subtotal": "100.00",
"total_tax": "8.88",
"total": "108.88",
"lines": [
{
"number": 1,
"status": "calculated",
"taxable_amount": "100.00",
"tax_rate": "0.08875",
"tax_amount": "8.88",
"jurisdiction": {
"name": "New York", "state": "NY",
"combined_rate": "0.08875", "state_rate": "0.04000",
"county_rate": "0.00000", "city_rate": "0.04500", "special_rate": "0.00375"
},
"nexus": false,
"exemption_applied": false,
"suppression_reason": null,
"warnings": ["Reference-mode tax was calculated without configured nexus."]
}
],
"metadata": {
"calculation_authority": "deterministic",
"experimental": false,
"jurisdiction_precision": "geocode",
"fallback_used": false
},
"warnings": ["Reference-mode tax was calculated without configured nexus."]
}This is an abbreviated response for the example request. Monetary and rate values are JSON strings to preserve decimal precision. Read the actual response rather than hard-coding the displayed rate or tax; tax content and address resolution are evaluated for the request's date and facts. See Schemas.
Next steps
- Coverage — interpret the live state-coverage response.
- Endpoint reference — all customer-facing
/api/v1operations. - Rate limits — request buckets and safe retries.
- Transaction lifecycle — commit, void, and refund.
- Webhooks — react to transaction and key events.
- Code samples — JavaScript, Python, and a Node helper.
