Quickstart
Five minutes, five steps, one real rate. At the end of this page you’ll have an API key, a working curl call, and an SDK-based version of the same lookup in the language of your choice.
Create a free Ziptax account
Head to platform.zip.tax and sign up. The free tier is enough for this walkthrough and for evaluating the API.
Copy your API key
After signing in, open API Keys in the dashboard. Create a new key if one isn’t already there and copy the value. It looks like a long opaque string. Keep it out of client-side code and source control.
Make your first call
Replace YOUR_API_KEY and run this:
If the key and address are valid, you’ll get a JSON response that looks like this (trimmed):
taxSummaries[0].rate is the combined sales tax rate at that
address. For 200 Spectrum Center Dr it’s 7.75% at the time of
writing.
Didn’t get a code: 100? Look up what the code means on the
Response Codes page. 101 means the
key wasn’t accepted, 109 means the address didn’t resolve.
Do the same call from an SDK
The REST endpoint is easy to hit from any language, but the SDKs add typed models, retries, and convenience helpers. Pick one:
Pick your next step
You’re integrated. Now find the shape that matches your use case:
Idiomatic Go, Python, and Node.js clients with typed models.
Learn when to use address vs. lat/lng vs. postal code, and the full parameter set.
Give an AI agent direct access to Ziptax via MCP or the Claude Skill.
Attach a product category for accurate tax on clothing, food, SaaS, and so on.
Troubleshooting
code: 101, key wasn't accepted
code: 101, key wasn't accepted
Double-check for trailing whitespace or wrapping quotes in the
header. Regenerate the key from the dashboard if in doubt. The
header name is case-sensitive in some clients, so use exactly
X-API-Key.
code: 109, address didn't resolve
code: 109, address didn't resolve
Usually a typo or a ZIP that doesn’t match the city. Try the address without the ZIP, or drop the ZIP+4 suffix if present.
Rate limit after a test loop
If you hit code: 108, you’ve tripped the per-minute request
limit. The window is 60 seconds, so wait and retry. Read the
Rate Limiting guide before
wiring this into a tight loop.
Want historical rates or Canadian coverage
Both are available on Pro and Enterprise plans via the historical
and countryCode=CAN parameters respectively. See the
REST API guide for the full parameter list.
