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 | Total policy fees in USD. Defaults to 0. Some states include fees in the tax base. If fees array is provided, it takes precedence. |
fees optional |
array | Granular fee breakdown. Each item: {"type": "fee_code", "amount": 250}. When provided, the API calculates per-category tax base inclusion (e.g., Texas taxes policy fees + inspection + broker; California excludes inspection). See Fee Types below. Use GET /api/v1/reference/fee-types for valid codes. |
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 |
fee_breakdown |
object|null | Only present when fees array is provided. Contains: policy_fees_taxable, inspection_fees_taxable, broker_fees_taxable, non_taxable_fees, total_fees, total_taxable_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.
Fee Types (for fees array)
When using the fees array, each fee is categorized for per-state tax base inclusion:
| Fee Code | Category | Description |
|---|---|---|
policy_fee_company | Policy Fee | Company Policy Fee |
policy_fee_broker | Policy Fee | Broker Policy Fee |
technology_fee | Policy Fee | Technology Fee |
acca_dues | Policy Fee | ACCA Dues |
reinstatement_fee | Policy Fee | Reinstatement Fee |
equipment_charge | Policy Fee | Equipment Charge |
assessment_fee | Policy Fee | Assessment Fee |
vehicle_crime_fee | Policy Fee | Vehicle Crime Fee |
other | Policy Fee | Other/miscellaneous fee |
inspection_fee | Inspection Fee | Inspection Fee |
broker_fee | Broker Fee | Broker Fee |
filing_fee | Pass-through | Surplus Lines Filing Fee |
clearinghouse_fee | Pass-through | Clearinghouse Fee |
fire_marshall_tax | Pass-through | Fire Marshall Tax |
fslso_service | Pass-through | FSLSO Service Fee |
Example with fees array
{
"state": "TX",
"premium": 50000,
"fees": [
{ "type": "policy_fee_company", "amount": 250 },
{ "type": "broker_fee", "amount": 150 },
{ "type": "inspection_fee", "amount": 100 },
{ "type": "filing_fee", "amount": 25 }
]
}
For Texas, the tax_base = $50,000 + $250 (policy) + $150 (broker) + $100 (inspection) = $50,500. The $25 filing fee is pass-through (not taxed). The response includes a fee_breakdown showing exactly which fees were taxed.
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.