Authentication
All API requests require a Bearer token in the Authorization header.
Authorization: Bearer sltax_t2_your_api_key_here
Token Format
API keys follow the format sltax_t2_<random> where t2 identifies the token version. Keys are issued per-tenant and scoped to your account.
Quick Start
Calculate surplus lines tax for a $50,000 premium in Texas with a single API call:
curl -X POST https://api.sltax360.com/api/v1/calculator/estimate \
-H "Authorization: Bearer sltax_t2_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"state": "TX",
"premium": 50000,
"policy_fees": 500
}'
The response includes an itemized breakdown of every tax and fee:
{
"success": true,
"data": {
"state": { "id": 44, "code": "TX", "name": "Texas" },
"input": { "premium": 50000, "policy_fees": 500, "effective_date": "2026-02-26" },
"tax_base": 50500,
"line_items": [
{ "name": "Surplus Lines Tax", "code": "sl_tax", "rate": 4.85, "rate_type": "percentage", "amount": 2449.25 },
{ "name": "Stamping Fee", "code": "stamping_fee", "rate": 0.075, "rate_type": "percentage", "amount": 37.88 }
],
"rounding_rule": "standard",
"total_taxes_and_fees": 2487.13,
"total_due": 52987.13,
"special_notes": "Texas: 4.85% SL tax, 0.075% stamping fee to SLTX. Tax is on total gross premium including policy fees.",
"calculated_at": "2026-02-26T15:30:45+00:00"
},
"meta": {
"timestamp": "2026-02-26T15:30:45Z",
"request_id": "req_a1b2c3d4e5f6",
"response_time_ms": 45
}
}
POST /estimate
Calculate surplus lines taxes and fees for a given state and premium amount. Returns an itemized breakdown of all applicable taxes and fees.
Request Parameters
Send as JSON request body.
| Parameter | Type | Description |
|---|---|---|
state required |
string | 2-letter state code (e.g., "TX", "CA", "FL") |
premium required |
number | Premium amount in USD. Must be greater than 0.01. |
policy_fees optional |
number | Policy fees in USD. Defaults to 0. Some states include fees in the tax base. |
effective_date optional |
string | Date in YYYY-MM-DD format for rate lookup. Defaults to today. Use for historical calculations. |
Response Fields
| Field | Type | Description |
|---|---|---|
state |
object | State info: id, code, name |
input |
object | Echo of your input parameters |
tax_base |
number | Computed tax base (premium, or premium + fees depending on state rules) |
line_items |
array | Itemized list of taxes and fees. Each item has name, code, rate, rate_type, amount, unrounded_amount |
rounding_rule |
string | State rounding rule: standard, whole_dollar, or no_rounding |
total_taxes_and_fees |
number | Sum of all line item amounts |
total_due |
number | Premium + policy fees + total taxes and fees |
special_notes |
string|null | State-specific notes or caveats, if any |
calculated_at |
string | ISO 8601 timestamp of the calculation |
Line Item Codes
| Code | Name | Rate Type | Description |
|---|---|---|---|
sl_tax | Surplus Lines Tax | percentage | Primary state surplus lines tax |
stamping_fee | Stamping Fee | percentage | Stamping office processing fee |
fire_marshal | Fire Marshal Tax | percentage | State fire marshal assessment |
figa | FIGA Assessment | percentage | Guaranty association assessment |
service_fee | Service Fee | percentage | State service/processing fee |
surcharge | State Surcharge | percentage | Additional state surcharge |
regulatory_fee | Regulatory Fee | percentage | Regulatory compliance fee |
slas_fee | SLAS/Clearinghouse Fee | percentage | Clearinghouse or SLAS fee |
municipal_tax | Municipal Tax | percentage | City or local jurisdiction tax |
flat_fee | Filing Fee | flat | Fixed dollar filing fee |
Not all codes appear for every state. The response only includes line items applicable to the requested state.
Response Format
All responses use a consistent JSON envelope with success, data/error, and meta fields.
Success Response
{
"success": true,
"data": { /* endpoint-specific data */ },
"meta": {
"timestamp": "2026-02-26T15:30:45Z",
"request_id": "req_a1b2c3d4e5f6",
"response_time_ms": 45
}
}
Error Response
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"details": { /* field-level errors when applicable */ }
},
"meta": { /* same as success */ }
}
Meta Object
| Field | Description |
|---|---|
timestamp | ISO 8601 timestamp of the response |
request_id | Unique request identifier for debugging. Include this in support requests. |
response_time_ms | Server-side processing time in milliseconds |
Error Codes
| HTTP Status | Error Code | Description |
|---|---|---|
400 | BAD_REQUEST | Malformed request or invalid state code |
401 | UNAUTHORIZED | Missing or invalid API key |
403 | FORBIDDEN | Tax Calculator feature not enabled for your plan |
404 | NOT_FOUND | Endpoint not found |
405 | METHOD_NOT_ALLOWED | Wrong HTTP method (e.g., GET on POST-only endpoint) |
422 | VALIDATION_ERROR | Request parameters failed validation. Check details.fields. |
429 | RATE_LIMIT_EXCEEDED | Too many requests. Retry after the period in the response. |
500 | INTERNAL_ERROR | Unexpected server error. Contact support with request_id. |
Validation Error Example
{
"success": false,
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation failed",
"details": {
"fields": {
"state": ["must be exactly 2 characters"],
"premium": ["must be greater than 0.01"]
}
}
}
}
Rate Limits
API requests are rate-limited per API key on a per-hour basis. Limits vary by plan tier.
Response Headers
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests allowed per hour |
X-RateLimit-Remaining | Requests remaining in the current window |
X-RateLimit-Reset | Unix timestamp when the limit resets |
Limits by Plan
| Plan | Requests / Hour |
|---|---|
| Professional | 500 |
| Enterprise | 5,000 |
State-Specific Rules
Each state has unique tax rules that the API handles automatically. Here are the key concepts:
Tax Base Composition
Some states include policy fees in the tax base; others tax only the premium. The API determines this automatically based on the state — you just provide both values.
premium and policy_fees values.
Rounding Rules
| Rule | Behavior | Example |
|---|---|---|
standard | Round to nearest cent | $1,515.456 → $1,515.46 |
whole_dollar | Round to whole dollar | $1,515.456 → $1,515.00 |
no_rounding | Full precision (5 decimals) | $1,515.45600 |
Complexity Spectrum
States range from simple (1-2 line items) to complex (5+ fees). Two examples:
Wyoming (Simple)
- Surplus Lines Tax: 3.0%
Florida (Complex)
- Surplus Lines Tax: 4.94%
- Stamping Fee: 0.06%
- Fire Marshal Tax: 1.0% (fire/allied lines)
- FIGA Assessment: 0.5%
- Service Fee: 0.1%
- Municipal Tax (if applicable)
Code Examples
curl -X POST https://api.sltax360.com/api/v1/calculator/estimate \
-H "Authorization: Bearer sltax_t2_your_api_key_here" \
-H "Content-Type: application/json" \
-d '{
"state": "FL",
"premium": 75000,
"policy_fees": 250,
"effective_date": "2026-03-01"
}'
const response = await fetch('https://api.sltax360.com/api/v1/calculator/estimate', {
method: 'POST',
headers: {
'Authorization': 'Bearer sltax_t2_your_api_key_here',
'Content-Type': 'application/json',
},
body: JSON.stringify({
state: 'FL',
premium: 75000,
policy_fees: 250,
effective_date: '2026-03-01',
}),
});
const result = await response.json();
if (result.success) {
console.log('Total due:', result.data.total_due);
result.data.line_items.forEach(item =>
console.log(` ${item.name}: $${item.amount}`)
);
} else {
console.error('Error:', result.error.message);
}
import requests
response = requests.post(
"https://api.sltax360.com/api/v1/calculator/estimate",
headers={
"Authorization": "Bearer sltax_t2_your_api_key_here",
"Content-Type": "application/json",
},
json={
"state": "FL",
"premium": 75000,
"policy_fees": 250,
"effective_date": "2026-03-01",
},
)
result = response.json()
if result["success"]:
data = result["data"]
print(f"Total due: ${data['total_due']:,.2f}")
for item in data["line_items"]:
print(f" {item['name']}: ${item['amount']:,.2f}")
else:
print(f"Error: {result['error']['message']}")
Getting Started
Get API Key
Contact us to receive your API credentials
Test Calculator
Try the free online calculator first
First API Call
Use the Quick Start example above
Integrate
Use code examples in your language
request_id for fastest resolution.