SLAC - Surplus Line Association of California
SLIP AMS APIDeveloper Docs
https://slip-api.slacal.com Support Get API Key

SLIP AMS Developer Documentation

Get Started with SLIP AMS

This resource is designed for developers and technical teams looking to integrate with the SLA system to submit and track insurance policies directly, programmatically, in real time.

SLIP AMS enables authorized brokers to electronically submit their policy information to the Surplus Line Association of California through a lightweight, developer-friendly web service. To get started, proceed to Step 1 to obtain API credentials.

🔑
1. Get API Credentials
Set up your SLIP account and obtain your broker number, username, and API key.
🔒
2. Authenticate
Exchange your credentials for a JWT Bearer token via the session's endpoint.
📋
3. Submit Policies
Post your JSON data and supporting documents to create and track submissions.
🔍
4. Track Submissions
Check submission status, view transactions, and inspect tag details in real time.
JWT Bearer Auth REST / JSON 7 Endpoints Prod + Train Envs

Environment

Switch between Production and Train environments using the toggle in the top bar. All code samples update automatically.

Base URL https://slip-api.slacal.com

Response format

All responses are application/json. Authenticated endpoints require a JWT Bearer token in the Authorization header. Tokens are obtained via POST /api/sessions. JWT tokens expire periodically — handle 401 Unauthorized responses by re-authenticating.

Postman CollectionAll 7 endpoints with pre-configured environments and example payloads.
Download
Getting Started/API Credentials & Account Setup
API Credentials & Account Setup

All authenticated SLIP AMS API requests require a JWT Bearer token. Obtain one by calling POST /api/sessions with your credentials.

To use the SLIP AMS API, you need a valid SLIP account with AMS API access enabled. Contact support@slacal.com if you do not yet have a SLIP account.
Setup Steps
1Log in to your SLIP account for your brokerage.
2Navigate to the Settings Tab, locate the AMS Token field. Note the SLABrokerNumber, Username, and AMS Token (API Key). If the field is empty, click “Regenerate AMS Token” to get a new API Key.
3Use these credentials in the POST /api/sessions call to obtain a JWT Bearer token for all subsequent requests.
4Pass the token in the Authorization header as Bearer <token> for every authenticated endpoint.
JWT tokens expire periodically. Your application should handle 401 Unauthorized responses by re-authenticating and retrying the request.
All authenticated endpoints
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Sessions/Create Session
POST/api/sessions

Authenticates an AMS user and returns a JSON Web Token (JWT). Include this token as a Bearer token in the Authorization header of all subsequent authenticated requests.

Query Parameters

ParameterTypeStatusDescription
SLABrokerNumber
string
RequiredYour SLAC broker number
Username
string
RequiredYour SLIP AMS username
APIKey
string
RequiredYour AMS Token (API Key) from SLIP Settings

Request

curl -X POST "{{BASE_URL}}/api/sessions?SLABrokerNumber=YOUR_BROKER_NUM&Username=YOUR_USER&APIKey=YOUR_API_KEY" \
  -H "accept: application/json" \
  -H "Content-Length: 0"

Response

200 OKAuthentication successful
{
  "Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
401 UnauthorizedInvalid or missing JWT bearer token.
429 Too Many RequestsRate limit exceeded.
{
  "Error": "Rate limit exceeded",
  "limit": "per-minute"
}
500 Internal Server ErrorServer error
Submissions/Create Submission
POST/api/submissions

Submit a surplus lines policy to SLIP. The request body must be multipart/form-data containing the policy JSON and a supporting ZIP file with all required documents.

Requires Authorization: Bearer <token>. The policy JSON must conform to the submission schema available at GET /api/schema.

Request Body (multipart/form-data)

ParameterTypeStatusDescription
json
string
RequiredJSON-encoded policy data (stringified)
file
file (ZIP)
RequiredZIP archive of all supporting policy documents
previewInSlip
boolean
OptionalPreview submission in SLIP before filing (default: false)
comments
string
OptionalNotes or comments for the submission

Request

curl -X POST "{{BASE_URL}}/api/submissions" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -F "json={\"PolicyNumber\":\"POL-001\",\"InsuredName\":\"John Smith\"}" \
  -F "file=@policy_docs.zip"

Response

200 OKSubmission accepted
{
  "SubmissionNumber": "2026-02-17/001"
}
400 Bad RequestInvalid submission which returns a list of errors.
{
  "Errors": [
    "string"
  ]
}
401 UnauthorizedInvalid or missing JWT bearer token.
415 Unsupported Media TypeForm enctype not set to multipart/form-data.
429 Too Many RequestsRate limit exceeded.
{
  "Error": "Rate limit exceeded",
  "limit": "per-minute"
}
500 Internal Server ErrorServer error.
Schema/Submission Schema
GET/api/schema

Returns the JSON schema for the latest version of the SLIP AMS submission format. Use this to validate your policy JSON before submitting. No authentication required.

Request

curl "{{BASE_URL}}/api/schema"

Response

200 OKSchema returned
{
  "$schema": "http://json-schema.org/draft/2020-12/schema",
  "$id": "https://slip-api.slacal.com/batch-submission/2.0/schema",
  "title": "SLIP AMS JSON Schema - Version 2-0. Last updated January 2024",
  "description": "This schema defines the data format for submitting batches to the SLIP system",
  "type": "object",
  "properties": {
    "Version": {
      "type": "string",
      "enum": ["2.0"]
    },
    "BatchDataSet": { ... }
  }
}
429 Too Many RequestsRate limit exceeded.
{
  "Error": "Rate limit exceeded",
  "limit": "per-minute"
}
500 Internal Server ErrorServer error.
Schema/Batch Schema
GET/batch-submission/{version}/schema

Returns the JSON schema for a specific version of the SLIP AMS batch submission format. No authentication required.

Path Parameters

ParameterTypeStatusDescription
version
string
RequiredSchema version number (e.g. 1.1, 2.0)

Request

curl "{{BASE_URL}}/batch-submission/2.0/schema"

Response

200 OKVersioned schema
{
  "$schema": "http://json-schema.org/draft/2020-12/schema",
  "$id": "https://slip-api.slacal.com/batch-submission/2.0/schema",
  "title": "SLIP AMS JSON Schema - Version 2-0. Last updated January 2024",
  "description": "This schema defines the data format for submitting batches to the SLIP system",
  "type": "object",
  "properties": {
    "Version": {
      "type": "string",
      "enum": ["2.0"]
    },
    "BatchDataSet": { ... }
  }
}
400 Bad RequestInvalid version requested.
Invalid version requested: 3.0
429 Too Many RequestsRate limit exceeded.
{
  "Error": "Rate limit exceeded",
  "limit": "per-minute"
}
500 Internal Server ErrorServer error.
Submissions/Submission Status
GET/api/submissions/{submissionNumber}

Retrieves the current status and summary details for a specific submission by its submission number. Requires JWT Bearer token.

Path Parameters

ParameterTypeStatusDescription
submissionNumber
string
RequiredThe submission number (e.g. 2026-02-17/001)

Request

curl "{{BASE_URL}}/api/submissions/2026-02-17%2F001" \
  -H "Authorization: Bearer YOUR_TOKEN"

Response

200 OKSubmission details
{
  "SubmissionNumber": "2026-03-23/0007",
  "Status": "Uploaded",
  "SubmissionErrors": [],
  "Notifications": []
}
401 UnauthorizedInvalid or missing JWT bearer token / Invalid user / Submission number not found for SLA Broker Number.
{
  "Errors": [
    "string"
  ]
}
429 Too Many RequestsRate limit exceeded.
{
  "Error": "Rate limit exceeded",
  "limit": "per-minute"
}
500 Internal Server ErrorServer error.
Submissions/Transactions
GET/api/submissions/{submissionNumber}/transactions

Returns a list of all policy transactions contained in the specified submission. Each transaction represents an individual policy line. Requires JWT Bearer token.

Path Parameters

ParameterTypeStatusDescription
submissionNumber
string
RequiredThe submission number (e.g. 2026-02-17/001)

Request

curl "{{BASE_URL}}/api/submissions/2026-02-17%2F001/transactions" \
  -H "Authorization: Bearer YOUR_TOKEN"

Response

200 OKSuccessful submission which returns list of transaction details.
{
  "Transactions": [
    {
      "TransactionID": 10000001,
      "PolicyNumber": "POL-001",
      "TransactionType": "NewBusiness",
      "Premium": 1354.95,
      "TaxableFees": 0.0,
      "InsuredName": "JOHN SMITH",
      "EndorsementNumber": null,
      "EffectiveDate": "2026-01-01T00:00:00",
      "Status": "Registered"
    },
    {
      "TransactionID": 10000002,
      "PolicyNumber": "POL-002",
      "TransactionType": "NewBusiness",
      "Premium": 2164.21,
      "TaxableFees": 0.0,
      "InsuredName": "JANE DOE",
      "EndorsementNumber": null,
      "EffectiveDate": "2026-01-02T00:00:00",
      "Status": "Registered"
    }
  ],
  "SubmissionNumber": "2026-02-17/001"
}
401 UnauthorizedInvalid or missing JWT bearer token / No transactions found for submission number and SLA Broker Number.
{
  "Errors": [
    "string"
  ]
}
429 Too Many RequestsRate limit exceeded.
{
  "Error": "Rate limit exceeded",
  "limit": "per-minute"
}
500 Internal Server ErrorServer error.
Submissions/Transaction Tags
GET/api/submissions/{submissionNumber}/transactions/tags

Returns all transactions for the specified submission, with full tag detail objects embedded in each transaction. Tags represent underwriting requirements, document requests, and other workflow items. Requires JWT Bearer token.

Path Parameters

ParameterTypeStatusDescription
submissionNumber
string
RequiredThe submission number (e.g. 2026-02-17/001)

Request

curl "{{BASE_URL}}/api/submissions/2026-02-17%2F001/transactions/tags" \
  -H "Authorization: Bearer YOUR_TOKEN"

Response

200 OKSuccessful submission which returns list of transaction with tags details.
{
  "Transactions": [
    {
      "TagDetails": [
        {
          "TagNumber": "TAG-001",
          "TagCode": "DEC4",
          "TagType": "POLICY/CERTIFICATE NUMBER MISSING",
          "Category": "Standard",
          "TagGroup": "Dec Page",
          "TagText": "The policy number was not shown or is incomplete on the declaration page/binder/certificate.",
          "PreviousReplies": "string",
          "AssignedDate": "2026-01-01T00:00:00",
          "DueDate": "2026-01-01T00:00:00",
          "StatusCode": "Open",
          "Status": "Pending"
        }
      ],
      "TransactionID": 10000001,
      "PolicyNumber": "POL-001",
      "TransactionType": "NewBusiness",
      "Premium": 1354.95,
      "TaxableFees": 0.0,
      "InsuredName": "JOHN SMITH",
      "EndorsementNumber": null,
      "EffectiveDate": "2026-01-01T00:00:00",
      "Status": "Registered"
    }
  ],
  "SubmissionNumber": "2026-02-17/001"
}
401 UnauthorizedInvalid or missing JWT bearer token / No transactions found for submission number and SLA Broker Number.
{
  "Errors": [
    "string"
  ]
}
429 Too Many RequestsRate limit exceeded.
{
  "Error": "Rate limit exceeded",
  "limit": "per-minute"
}
500 Internal Server ErrorServer error.
Resources/Postman Collection
Postman Collection

Download the complete Postman collection with all 7 endpoints, pre-configured environments (Production & Train), and example payloads.

SLIP AMS API CollectionIncludes sessions, submissions, schema, transactions, and tags endpoints.
Download Collection

Import the collection into Postman and set the BASE_URL environment variable to https://slip-api.slacal.com (production) or https://slip-api.train.slacal.com (training).

Resources/Sample Data
Sample Data

The page contains sample JSON payloads and ZIP files with all required supporting documents, serving as a reference for data fields, structure, and documents needed to successfully submit a submission.

Master Policy
A master policy submission covers multiple certificate holders under a single policy, showing how to structure a policy of type Master with multiple insured certificate entries.
Use when the policy qualifies as a Master policy per SLA Guidelines.
Policy All Tabs
A comprehensive policy submission sample with every section populated - SL1, SL2, GAP form, layering, multi-state allocation, certificates, and transaction documents.
Use this as a reference for all available fields and their accepted formats.
Policy GAP
A new business policy submission that includes a GAP Exemption Placement Conditions/Requirements.
Use when the policy qualifies as a GAP placement per SLA Guidelines.
Policy Layering
A policy submission that contains multiple insurers, demonstrating how to structure multiple insurers sharing risk across coverage layers with percentage allocations.
Policy Multistate
A policy submission contains premium across multiple states, with California risk percentage and per-state allocation breakdowns.
Policy SL1
A new business policy submission including a completed SL1 (Confidential Report of Surplus Line Placement) online form with broker information, insured address, risk location, coverage codes, and a non-admitted insurer.
Use when the filer possesses the SL2 PDF form.
Policy SL2
A new business policy submission including an SL2 (Diligent Search Report) online form with broker information, insured address, risk location, and admitted insurer declination details.
Use when the filer possesses the SL1 PDF form.
Policy SL2 With Addendum
A new business policy submission with an SL2 online form that also includes an Addendum document, demonstrating how to attach supplemental disclosure paperwork alongside the standard form.
Use when the filer possesses the SL1 PDF form, and the policy requires an Addendum.
Download All Samples Downloads all JSON payloads and ZIP files as a single archive.
Resources/FAQ
Frequently Asked Questions

This section answers common questions about SLIP AMS submission development and procedure.

Getting Started
Where can I find technical documentation to help me access the “XML Data and Submit” to SLA option in SLIP?

The SLA intends to sunset the legacy XML-based submission method. We highly recommend that you transition to the JSON-based AMS submission, which is the current and supported method.

Why can’t our development team access the SLIP AMS API?

Access to SLIP AMS API is restricted by a geo-blocking policy that only permits connections from the United States and Canada.

If your development team is located outside of these two countries:

  1. Complete the IP Whitelist Form
  2. Email the completed form to support@slacal.com
  3. The IP address(es) will be reviewed and whitelisted accordingly
Once I am satisfied with all my testing in the Train environment, what are the next steps to move to Production?

To move to Production, you must update all API configuration values:

  • Environment endpoint (SLIP Production URL)
  • SLA Broker Number (may differ between environments)
  • SLIP Username
  • AMS Token
Account & Access
Does it matter which SLIP user performs the API submission?

No. You may use any SLIP user (Master or Standard) as long as the user is associated with the brokerage location.

We recommend creating a dedicated user account (e.g. AMS_{BrokerName}) for AMS submissions. This allows:

  • Better visibility and tracking of submission successful/invalid emails
  • Easier account management if team members change
Why am I not receiving any submission emails?

Our Train environment does not send out any emails to avoid confusion with the Production environment.

To check submission status in Train, use the Submission Status API or Transaction Status calls.

Submission Rules & Requirements
Why is a ZIP file required if all data is in JSON?

A ZIP file is always required because one of the following documents must be included.

Minimum requirements:

  • New (N) or Renewal (R) transaction — Declaration Page
  • Endorsements (E, C, A, X) transaction — Endorsement document

An empty ZIP file will result in a submission error.

Do I need to submit a Coversheet?

No, submitting the Coversheet is optional. The system will automatically generate an online Coversheet using the submission data.

Do I need to submit D1 and/or D2 documents in my submission?

No, submitting D1/D2 documents is optional.

How many transactions per submission should I submit?

We recommend submitting up to 75 transactions per submission to ensure timely processing.

How often can I submit via the API?

We impose a daily limit of 200,000 requests.

Data Structure
If I include SL1 and/or SL2 data in JSON for submission, do I still need to attach the SL1 and/or SL2 document?
  • If SL1/SL2 data are included in the JSON, the SL1/SL2 document can be omitted.
  • If SL1/SL2 documents are included in the ZIP file, the SL1/SL2 data can be omitted from the payload.

Please refer to the Sample Data for correct payload structure:

  • Policy SL1
  • Policy SL2
  • Policy SL2 Addendum
When should I use the Master Policy payload?

Use the Master Policy payload only if the policy meets this definition:

  • A single contract issued to a group (e.g., employer, association)
  • Typically has no fixed expiration date
  • Individual members receive certificate of coverage

If your policy does not match this:

  • Do not use the Master Policy payload
  • Set IsMasterPolicy = false in all other payloads
Submission Errors & Troubleshooting
Error: “Could not find a part of the path …”

Cause: The system cannot locate the documents inside the ZIP file. A common issue is that documents are placed inside subfolders within the ZIP file.

Fix:

  • Do not use subfolders
  • Ensure all documents are in the root directory of the ZIP file
Error: “Object reference not set to an instance of an object”

Cause: Usually due to invalid or mismatched data, especially in the CoverageCode or NAICNumber field.

Fix:

  • Verify the coverage code matches the Coverage Code list, available on our Learning Center
  • Verify the NAIC Number of the insurer is valid
  • For Alien insurers, ensure the NAIC format contains the prefix AA- (e.g. AA-12345)
Technical Errors & Troubleshooting
How do I get a JWT Bearer token?

Send a POST /api/sessions request with your brokerNumber, username, and password. The response includes a token. Use it as Authorization: Bearer <token> on all subsequent requests.

Credentials are issued by SLACAL. If you don’t have an account yet, contact support@slacal.com.

My token expired. What do I do?

Tokens are time-limited. A 401 Unauthorized means yours has expired. Re-authenticate via POST /api/sessions and retry with the new token. In production, cache the token and refresh it before it expires rather than letting requests fail.

Why is my submission returning a 400 Bad Request?

The JSON in your ZIP doesn’t match the submission schema. Things to check:

  • Missing required fields: InsuredName, PolicyNumber, EffectiveDate.
  • Wrong date format — use YYYY-MM-DD.
  • The JSON file isn’t at the root of the ZIP, or filenames don’t match what the schema expects.
  • Content-Type isn’t set to multipart/form-data.

Pull the current schema from GET /api/schema or GET /batch-submission/{version}/schema and validate against it first.

What documents should I include in the ZIP file?

The ZIP must contain supporting policy documents. Use .pdf format for all supporting files.

  • Binder
  • Signed SL1
  • Signed SL2
  • Declarations page

See GET /batch-submission/{version}/schema for the full list of required and optional document types.

How do I check the status of my submission?

A successful POST /api/submissions returns a SubmissionNumber (e.g. 2024-10-11/1128). Pass it to any of these:

  • GET /api/submissions/{submissionNumber} — returns the overall submission status.
  • GET /api/submissions/{submissionNumber}/transactions — lists individual transactions and their state (Pending, Registered).
  • GET /api/submissions/{submissionNumber}/transactions/tags — returns tag details per transaction.
Limitations
How do I respond to transaction tags via the API?

You cannot respond to tags via the API. All tags must be handled manually within the SLIP website.

Can I submit non-premium bearing/nil endorsements or backouts through the API?

Nil endorsements and backouts are not supported by the API.

  • For instructions on how to submit a Nil endorsement, please visit our website.
  • The Change Request feature is available on SLIP for each transaction, allowing you to submit Backout requests.
ESC
Endpoints
POST/api/sessionsCreate Session
POST/api/submissionsCreate Submission
GET/api/schemaSubmission Schema
GET/batch-submission/.../schemaBatch Schema
GET/api/submissions/{id}Submission Status
GET.../{id}/transactionsTransactions
GET.../transactions/tagsTransaction Tags
Guides
Account Setup API Credentials & Account Setup
Download Postman Collection
Resources Sample Data
Help FAQ