The ShipVAT API provides RESTful endpoints for tax calculation, transaction recording, customer management, and compliance reporting.
| Endpoint |
Method |
Description |
/health |
GET |
Health check (no auth required) |
/v1/status |
GET |
Public system status and collector freshness |
/v1/calculate |
POST |
Calculate tax for transactions |
/v1/calculate/batch |
POST |
Batch calculate multiple transactions |
/v1/rates |
GET |
Get tax rates for a jurisdiction |
/v1/thresholds |
GET |
Get nexus thresholds |
/v1/decision/collect |
POST |
Tax collection decision |
| Endpoint |
Method |
Description |
/v1/transactions |
POST |
Create a transaction |
/v1/transactions |
GET |
List transactions |
/v1/transactions/:id |
GET |
Get transaction details |
/v1/transactions/external/:externalId |
GET |
Get transaction by external ID |
/v1/transactions/:id/refund |
POST |
Refund a transaction |
/v1/transactions/:id/void |
POST |
Void a pending transaction |
/v1/transactions/batch |
POST |
Create multiple transactions (max 50) |
| Endpoint |
Method |
Description |
/v1/customers |
POST |
Create a customer |
/v1/customers |
GET |
List customers |
/v1/customers/:id |
GET |
Get customer details |
/v1/customers/external/:externalId |
GET |
Get customer by external ID |
/v1/customers/:id |
PUT |
Update a customer |
/v1/customers/:id |
DELETE |
Delete a customer |
/v1/customers/:id/exemptions |
POST |
Add tax exemption |
/v1/customers/:id/exemptions/:exemptionId |
PUT |
Update exemption |
/v1/customers/:id/exemptions/:exemptionId |
DELETE |
Remove exemption |
/v1/customers/:id/exemptions/check |
GET |
Check exemption status |
| Endpoint |
Method |
Description |
/v1/vat/validate |
POST |
Validate VAT ID (EU VIES) |
/v1/vat/format-check |
GET |
Check VAT format only |
/v1/vat/validate-customer/:customerId |
POST |
Validate and update customer VAT |
/v1/vat/countries |
GET |
List supported VAT countries |
| Endpoint |
Method |
Description |
/v1/reports/summary |
GET |
Tax summary by jurisdiction |
/v1/reports/transactions |
GET |
Transaction report for period |
/v1/reports/filing |
GET |
Filing report (EU OSS, etc.) |
/v1/reports/export |
GET |
Export report as CSV |
| Endpoint |
Method |
Description |
/v1/webhooks |
POST |
Create webhook endpoint |
/v1/webhooks |
GET |
List webhooks |
/v1/webhooks/:id |
GET |
Get webhook details |
/v1/webhooks/:id |
PUT |
Update webhook |
/v1/webhooks/:id |
DELETE |
Delete webhook |
/v1/webhooks/:id/rotate-secret |
POST |
Rotate webhook secret |
/v1/webhooks/:id/deliveries |
GET |
List delivery history |
/v1/webhooks/:id/test |
POST |
Send signed test event |
/v1/webhooks/:id/re-enable |
POST |
Re-enable endpoint |
/v1/webhooks/deliveries/:id |
GET |
Get delivery details |
/v1/webhooks/deliveries/:id/redeliver |
POST |
Redeliver event with same id |
/v1/webhooks/events/list |
GET |
List available event types |
| Endpoint |
Method |
Description |
/v1/addresses/validate |
POST |
Validate and normalize address |
/v1/addresses/countries |
GET |
List supported countries |
/v1/addresses/regions/:country |
GET |
Get regions for country |
| Endpoint |
Method |
Description |
/v1/metadata/jurisdictions |
GET |
List all jurisdictions |
/v1/metadata/jurisdictions/:id |
GET |
Get jurisdiction details |
/v1/metadata/sync-status |
GET |
Data sync status |
/v1/export/snapshot |
GET |
Export full data snapshot |
https://shipvat.com/status |
GET |
Public status page |
/api/data-sources-freshness/ |
GET |
Data sources and freshness metadata |
All /v1/* endpoints require a Bearer token except /v1/status:
curl https://api.shipvat.com/v1/rates?jurisdiction=DE \
-H "Authorization: Bearer sk_live_your_api_key"
All successful responses are JSON with a queried_at timestamp:
"queried_at": "2024-01-15T10:30:00Z"
"error_code": "VALIDATION_ERROR",
"message": "Human readable message",
"reason": "Invalid jurisdiction code"
| Code |
HTTP Status |
Description |
UNAUTHORIZED |
401 |
Invalid or missing API key |
FORBIDDEN |
403 |
Insufficient permissions |
NOT_FOUND |
404 |
Resource not found |
VALIDATION_ERROR |
400 |
Invalid request parameters |
RATE_LIMIT_EXCEEDED |
429 |
Too many requests |
INTERNAL_ERROR |
500 |
Server error |
| Tier |
Limit |
| Free |
10 requests/minute |
| Pro |
1,000 requests/minute |
| Enterprise |
10,000 requests/minute |