Developers
API v1.0The trade intelligence API.
Classify products, calculate duties across 180+ countries, and turn shipping documents into validated data — all through one REST API with OAuth 2.0 and real-time webhooks.
POST/tariffs/classify
curl -X POST https://api.wove.com/api/v1/external/tariffs/classify \
-H "Authorization: Bearer $WOVE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"description": "Insulated stainless steel travel mug",
"country_of_origin": "CN",
"destination_market": "US"
}'
Response200 OK · 412 ms
{
"hts_code": "7323.93.00.60",
"description": "Table, kitchen or household articles of stainless steel",
"confidence": 0.94,
"duty_rates": {
"base_rate": "2.0%",
"section_301": "7.5%",
"section_122": "10.0%",
"total_effective_rate": "19.5%"
},
"fta_eligible": false,
"alternatives": [
{
"hts_code": "7323.93.00.80",
"confidence": 0.71,
"note": "Consider if item has handle"
}
]
}
180+
Countries and markets covered
21,000+
HS codes in the active database
301 · 232 · 122
Additional duties stacked, plus FTA, MFN and preferential rates
OAuth 2.0
Client-credentials auth with signed webhooks
Two APIs, one platform
What are you building?
For freight forwarders, brokers and TMS platforms
Automate the document workflow.
Extract structured data from commercial invoices, bills of lading and packing lists, validate it across documents, and get status updates pushed to your system in real time.
- Extraction and cross-document validation with confidence scores
- Create and manage shipments — containers, packages, references
- Webhooks the moment extraction or validation status changes
- Trigger processing straight from inbound email
Endpoint highlights
POST/documents— upload and trigger extraction
GET/shipments/{id}/details— full validated shipment record
GET/shipments/{id}/validation-items— cross-document validation
POST/webhooks— register event listeners
GET/shipments/shp_abc123/details
{
"id": "shp_abc123",
"shipmentNumber": "WOV240001",
"status": "validated",
"mode": "ocean",
"origin": { "code": "CNSHA", "name": "Shanghai" },
"destination": { "code": "USLAX", "name": "Los Angeles" },
"containers": [
{ "number": "MSKU1234567", "type": "40HC", "weight": 28500, "weightUnit": "kg" }
],
"documents": [
{ "type": "commercial_invoice", "extractionStatus": "completed", "validationStatus": "passed" }
],
"validationItems": [
{
"type": "container_weight",
"status": "validated",
"confidence": 0.95,
"sources": ["commercial_invoice", "packing_list"]
}
]
}
Getting started
From credentials to first call.
- 01Create an OAuth clientYour account manager issues client credentials for your platform.
- 02Get an access tokenExchange credentials for a bearer token using the client-credentials flow.
- 03Make API callsSend the token in the Authorization header on every request.
- 04Handle rate limitsRead the rate-limit headers on each response and back off as needed.
POST/oauth/token
curl -X POST https://api.wove.com/api/v1/external/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET"
// Response
{
"access_token": "eyJhbGciOiJSUzI1NiIs...",
"token_type": "Bearer",
"expires_in": 3600
}
Built for production
Secure by default. Ready to scale.
- Webhook payloads signed with HMAC-SHA256
- OAuth 2.0 client credentials with short-lived bearer tokens
- Predictable rate limits, reported on every response
- AES-256 at rest and TLS 1.3 in transit
- Customer data is never used to train AI models
REST + JSONWebhooksBulk endpointsSOC 2 Type II in progress
Built on the Wove API
“We plugged Wove's document processing and HTS classification into our platform via API. Our customers get instant extraction and accurate classification on every shipment.”
ExFreight“We embedded Wove's AP Invoice automation into our TMS and rolled it out across our customer network. Our customers no longer manually reconcile invoices or chase down discrepancies.”
LogiwareReady to integrate?
Start with the docs, or talk to a solutions engineer about your use case.