Skip to main content
AgentTax

API Reference

Tax intelligence, gain/loss tracking, and compliance for AI-to-AI transactions.

Quick Start

Get tax-compliant in under 5 minutes. What an integration involves, step by step

1
Create Account
POST /api/v1/auth/signup with your email. Save the API key — shown once.
2
Calculate Tax
POST /api/v1/calculate with amount, buyer_state and counterparty_id, plus the role and transaction_type that fit the deal.
3
Track Gains
POST /api/v1/trades to log buys/sells. Cost basis and gains are automatic.
Python SDK
pip install agenttax
Full example — Python
from agenttax import AgentTaxClient

client = AgentTaxClient(api_key="atx_live_YOUR_KEY")

# Use tax on a purchase (buyer side needs no nexus setup)
result = client.calculate(
    role="buyer",
    amount=2500,
    buyer_state="TX",
    transaction_type="api_access",
    counterparty_id="seller_01",
)

print(result["total_tax"])     # 125.0 (TX taxes 80% of data processing at 6.25%)
print(result["confidence"])    # {"score": ..., "level": ...}

# Selling instead? Configure nexus first (POST /api/v1/nexus).
# A new account has none, so a seller call returns total_tax 0 until you do.

# Log a capital gains trade
trade = client.log_trade(
    asset_symbol="COMPUTE_CREDIT",
    trade_type="buy",
    quantity=100,
    price_per_unit=0.25,
)
Full example — curl
# 1. Sign up
curl -X POST https://agenttax.io/api/v1/auth/signup \
  -H "Content-Type: application/json" \
  -d '{"email":"agent@example.com","password":"securepass8+","agent_name":"My Agent","agent_work_type":"compute"}'

# 2. Calculate tax (buyer side: no nexus setup needed)
curl -X POST https://agenttax.io/api/v1/calculate \
  -H "Content-Type: application/json" \
  -H "X-API-Key: atx_live_YOUR_KEY" \
  -d '{"role":"buyer","amount":2500,"buyer_state":"TX",
       "transaction_type":"api_access","counterparty_id":"seller_01"}'

# 3. Log a trade
curl -X POST https://agenttax.io/api/v1/trades \
  -H "Content-Type: application/json" \
  -H "X-API-Key: atx_live_YOUR_KEY" \
  -d '{"asset_symbol":"COMPUTE_CREDIT","trade_type":"buy",
       "quantity":100,"price_per_unit":0.25}'
Expected response — /calculate
{
  "success": true,
  "role": "buyer",
  "jurisdiction": "Texas",
  "classification_basis": "data_processing",
  "use_tax": {
    "amount": 125.00,
    "rate": 0.0625,
    "taxable_percentage": 0.8,
    "note": "TX Tax Code §151.351 — 20% statutory exemption"
  },
  "confidence": { "score": 62, "level": "partial", ... },
  "total_tax": 125.00
}

That's it — one request, and you get the tax amount, the statute, and a confidence score. The free tier gives you 1,500 calls/month with no credit card. Upgrade anytime from your dashboard.

Authentication

Include your API key in every authenticated request.

Header format
X-API-Key: atx_live_YOUR_KEY_HERE

Also accepts Authorization: Bearer atx_live_... — Keys are SHA-256 hashed. Raw key shown once at creation.

Free
1,500/mo
Hard cutoff
Starter — $25/mo
10,000/mo
No overage billing
Growth — $99/mo
100,000/mo
$0.01 overage
Pro — $199/mo
1,000,000/mo
$0.005 overage
Keyless access (demo mode)

POST /api/v1/calculate also answers with no API key and no payment. It is the only endpoint that does. The request body is the same, including the required counterparty_id.

  • Limits, per IP: 30 requests per minute and 50 per UTC day (resets at 00:00 UTC). Every request counts, including ones rejected with 400. Remaining calls are in the X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers. Over either limit returns 429 RATE_LIMITED with a free-signup block and the x402 pay-per-call option.
  • What it returns: "mode": "demo", total_tax, combined_rate, applied_rate, classification_basis, a confidence score and level, and nexus_configured_for_state. When a $0.00 comes from a default rather than a determination it also carries exemption or tax_if_nexus with a note.
  • What it leaves out: the audit trail, the jurisdiction breakdown, advisories (for example the Chicago lease-tax advisory) and the sales_tax / use_tax detail. Do not treat a demo result as final without those. Seller-side demo calls use a shared demo nexus profile, not yours.
  • Nothing is saved to an account: demo calls do not appear in any transaction history or nexus tracking.

A key is required for the full response, your own nexus configuration, transaction history, volume above the demo limits (the free tier is 1,500 calls/month, no card), and every other authenticated endpoint. A key is free: POST /api/v1/auth/signup.

Test Mode

Test mode (atx_test_ prefixed keys) is on the roadmap. Until available, use the free tier (1,500 calls/month, no credit card) for integration testing. The free tier writes to live data — use a dedicated test account.

Rate Limiting

Keyed /calculate calls are rate-limited per API key to 120 requests per 60 seconds. Going over returns 429 RATE_LIMITED with a Retry-After header. Using up the Free plan's 1,500 calls/month also returns 429 RATE_LIMITED, but with a "Monthly limit reached" error, an upgrade block and no Retry-After — retrying will not help until the month resets.

Response headers on /calculate
Headers
X-RateLimit-Limit: 120          # Requests allowed per 60-second window
X-RateLimit-Remaining: 117      # Requests left in the current window
X-RateLimit-Reset: 1714521600   # Unix time when the current window resets

# On burst 429 responses:
Retry-After: 2                  # Seconds to wait before retrying

These headers describe the short burst window, not your monthly allowance. Monthly usage is on your dashboard. Recommended retry strategy for a burst 429: honor Retry-After, otherwise exponential backoff starting at 1 second, maximum 5 retries, jitter ±20%. Do not retry a 429 whose error says "Monthly limit reached".

Error Responses

All endpoints return errors in a consistent envelope. SDKs should branch on code (a frozen SCREAMING_SNAKE enum) rather than the human-readable error string.

StatusCodeMeaning
400INVALID_INPUTRequest body or query param failed validation
400INVALID_JSON_BODYBody present but JSON.parse failed
400IDEMPOTENCY_KEY_INVALIDIdempotency-Key header malformed (length / charset)
401UNAUTHORIZEDMissing/invalid API key, session, or partner secret
401WEBHOOK_SIGNATURE_INVALIDOutbound webhook delivery callback failed HMAC verification
402PAYMENT_REQUIREDx402 / MPP missing or invalid; demo daily limit hit and unauthenticated
403FORBIDDENAuthenticated but lacks permission (cross-tenant, deactivated partner, etc.)
429TIER_LIMIT_REACHEDMonthly optimization-report allowance for your plan used up (/optimize)
404RESOURCE_NOT_FOUNDEntity / API key / partner / record / endpoint not found
405METHOD_NOT_ALLOWEDWrong HTTP method for the route
409RESOURCE_CONFLICTUnique-constraint violation, soft-deleted collision, optimistic-CAS lost race
409IDEMPOTENCY_KEY_CONFLICTSame Idempotency-Key reused with different request body
422NEXUS_NOT_REACHEDReserved, not currently returned. A seller call into a state with no nexus configured gets 200 with total_tax 0 and final_determination no_nexus
429RATE_LIMITEDBurst or demo limiter tripped (see Retry-After), or the Free plan's monthly allowance is used up (no Retry-After)
500INTERNALUnexpected server error — safe to retry with exponential backoff
503DB_UNAVAILABLEPostgres unreachable — transient; retry
Error Response Shape
{
  "success": false,
  "code": "INVALID_INPUT",
  "error": "buyer_state is required for seller role calculations",
  "request_id": "req_01HX..."
}

Tax Engine

Calculate sales tax, use tax, and 1099 obligations. Specify your role — seller gets collection obligations; buyer gets use tax exposure and seller remittance verification.

POST/api/v1/calculateAPI Key (or none: demo mode)
Calculate tax obligations. Sellers get sales tax with nexus/exemption checks. Buyers get use tax, seller remittance status, and 1099 tracking. Add buyer_zip for combined state+local rates.
POST/api/v1/calculateAPI Key
Buyer example — use tax, seller remittance verification, 1099 tracking.
GET/api/v1/transactionsAPI Key
List transaction history with tax calculations, newest first.

Gain/Loss Tracker

Track trades, manage cost basis lots (FIFO/LIFO/Specific ID), and calculate realized capital gains. Supports fractional quantities to 8 decimals — crypto, compute credits, data bundles, any tradeable AI agent asset.

POST/api/v1/tradesAPI Key
Log a buy or sell. Buys create cost basis lots. Sells match lots and compute realized gains with holding period classification.
POST/api/v1/tradesAPI Key
Sell — matches lots via FIFO and computes realized gains.
GET/api/v1/tradesAPI Key
List trades with per-asset summary stats.

Accounts & Keys

Create accounts, manage API keys, handle dashboard authentication.

POST/api/v1/auth/signup
Create a free account with agent registration. No credit card.
POST/api/v1/auth/login
Log in → session token for dashboard.
GET/api/v1/auth/meSession Token
Get the logged-in account: entity, agents, keys, this month's usage, recent transactions and trades.
GET/api/v1/keysAPI Key
List API keys (prefixes only).
POST/api/v1/keysAPI Key
Generate a new API key.
DELETE/api/v1/keysAPI Key
Revoke a key by prefix.
POST/api/v1/checkout
Stripe checkout to upgrade plan. Send either { product, tier } for one product or { tax_tier, gains_tier } for the bundle.

Agent Network

Register agents, manage tax profiles, discover counterparties, configure nexus.

POST/api/v1/networkAPI Key
Create or update your network profile.
GET/api/v1/networkAPI Key
Get your network profile.
GET/api/v1/network-directory
Browse public agents, 20 per page.
POST/api/v1/nexusAPI Key
Configure the states you have nexus in. Sellers need this: without it, seller calculations return $0 sales tax.
GET/api/v1/nexusAPI Key
List the states you have nexus in.

Compliance

Nexus threshold monitoring, idempotency for agent retries, and 1099-DA draft exports.

POST/api/v1/calculateAPI Key
Nexus alerts — there is no separate alerts endpoint. Every keyed /calculate response carries a nexus_alerts array when your YTD revenue in any state is at 80% or more of its economic nexus threshold.
GET/api/v1/export/1099-daAPI Key
Generate a draft 1099-DA (Digital Asset Proceeds) export. Returns JSON matching IRS form fields — ready for tax software import or accountant handoff.

Idempotency Keys

AI agents frequently retry failed network calls. To prevent duplicate tax entries or double-counted trades, include an Idempotency-Key header on POST requests.

Usage
curl -X POST https://agenttax.io/api/v1/trades \
  -H "Content-Type: application/json" \
  -H "X-API-Key: atx_live_YOUR_KEY" \
  -H "Idempotency-Key: 550e8400-e29b-41d4-a716-446655440000" \
  -d '{"asset_symbol":"ETH","trade_type":"buy","quantity":1,"price_per_unit":3000}'

# Retry with same key → returns cached response, no duplicate entry
# Response includes: X-Idempotency-Status: cached
Supported on
POST /calculate, /trades
Key TTL
24 hours
Cache header
X-Idempotency-Status

Reference Data

Public endpoints — no authentication required.

GET/api/v1/health
API status and database connectivity.
GET/api/v1/rates
Tax rates for all 50 states + DC. Filter by state.
GET/api/v1/rates/local
Combined state+local tax rate for a specific zip code. No auth required. Use buyer_zip in POST /api/v1/calculate to get this applied automatically.
POST/api/v1/verify
Submit state rates you researched; get back which ones match the engine's current-law rates.
GET/api/v1/blog
Blog articles with metadata. Filter with ?category= or fetch one post with ?slug=.
GET/api/v1/rss
RSS feed for blog syndication.

Questions? support@agenttax.io

© 2026 Agentic Tax Solutions. All obligations belong to the legal entity, not the AI agent.