Tarifflo
  • Pricing
  • Refunds
  • IEEPA Refunds
Sign In

API version

v2Currentv1Deprecated

Get started

  • Overview
  • Authentication
  • Errors
  • Rate limits

Build

  • Webhooks
  • MCP connector

Help

  • Request a feature

Get started

Errors

Errors return a non-2xx status and a JSON body with a stable code and a readable message.

v2

A v2 error carries error.code and error.message. A 400 adds issues, one entry per invalid input with its path. Branch on error.code, not on the message.

400 Bad Request
json
{
  "error": {
    "code": "BAD_REQUEST",
    "message": "Invalid input",
    "issues": [{ "code": "invalid_type", "message": "Expected string", "path": ["legalName"] }]
  }
}
StatusSchemaMeaning
400error.BAD_REQUESTInvalid input data
401error.UNAUTHORIZEDAuthorization not provided
402error.PAYMENT_REQUIREDNot enough credits
403error.FORBIDDENInsufficient access
404error.NOT_FOUNDNot found
409error.CONFLICTThe first request with this Idempotency-Key is still filing
412error.PRECONDITION_FAILEDNo webhook URL for the key's environment
413error.PAYLOAD_TOO_LARGEThe file or the row count is over the limit
422error.UNPROCESSABLE_CONTENTThe entry is not valid
500error.INTERNAL_SERVER_ERRORInternal server error
501error.NOT_IMPLEMENTED`config: "post"` is not available yet
502error.BAD_GATEWAYSubmitting to CBP failed

v1 (deprecated)

Branch on error.code, not on the message. Validation errors add a details array with one entry per problem.

400 Bad Request
json
{
  "error": {
    "code": "VALIDATION_ERROR",
    "message": "Invalid request parameters",
    "details": ["rates[0].origin must be a 2-letter ISO country code"]
  }
}

v1 codes

StatusCodeMeaning
400VALIDATION_ERRORThe body failed validation. `details` lists every problem.
401MISSING_API_KEYNo X-API-Key header.
401INVALID_API_KEY_FORMATThe key does not start with tflo_.
401INVALID_API_KEYThe key is unknown, revoked or wrong.
401EXPIRED_API_KEYThe key has passed its expiry date.
402INSUFFICIENT_CREDITSThe balance cannot cover the request. `needed`, `available` and `purchaseUrl` say what to add; a `runId` means the run exists and resumes once credits land.
403INSUFFICIENT_PERMISSIONSThe key lacks a scope the endpoint requires. `details` lists both.
404NOT_FOUNDNo job with this id exists in your organization.
429RATE_LIMIT_EXCEEDED / DAILY_RATE_LIMIT_EXCEEDEDToo many requests. Wait `retryAfter` seconds.
500INTERNAL_SERVER_ERRORSomething failed on our side. Retry with backoff.

Failed jobs

A v1 job that was accepted and then failed does not change the HTTP status of the poll. GET on the job returns 200 with "status": "failed" and an error object.

Tarifflo

AI-driven trade automation for modern importers and brokers.

Get started free

Platform

  • Audit
  • ABI Filing
  • PGA
  • Suppliers

Customs

  • HTS Classification
  • Schedule B
  • ECCN
  • Tariff Rates
  • Customs Clearance

Developers

  • Docs
  • API reference
  • Webhooks
  • MCP Connector

Product

  • Pricing
  • Refunds
  • IEEPA Refunds
  • Explore data

Company

  • FAQ
  • Contact Us
  • Book a Demo

© 2026 Tarifflo, Inc. All rights reserved.

Privacy PolicyTerms & Conditions