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.
Environment
Switch between Production and Train environments using the toggle in the top bar. All code samples update automatically.
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.
All authenticated SLIP AMS API requests require a JWT Bearer token. Obtain one by calling POST /api/sessions with your credentials.
POST /api/sessions call to obtain a JWT Bearer token for all subsequent requests.Bearer <token> for every authenticated endpoint.401 Unauthorized responses by re-authenticating and retrying the request.
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...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
| Parameter | Type | Status | Description |
|---|---|---|---|
SLABrokerNumber | string | Required | Your SLAC broker number |
Username | string | Required | Your SLIP AMS username |
APIKey | string | Required | Your 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
{
"Token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
{
"Error": "Rate limit exceeded",
"limit": "per-minute"
}
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.
Authorization: Bearer <token>. The policy JSON must conform to the submission schema available at GET /api/schema.
Request Body (multipart/form-data)
| Parameter | Type | Status | Description |
|---|---|---|---|
json | string | Required | JSON-encoded policy data (stringified) |
file | file (ZIP) | Required | ZIP archive of all supporting policy documents |
previewInSlip | boolean | Optional | Preview submission in SLIP before filing (default: false) |
comments | string | Optional | Notes 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
{
"SubmissionNumber": "2026-02-17/001"
}
{
"Errors": [
"string"
]
}
{
"Error": "Rate limit exceeded",
"limit": "per-minute"
}
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
{
"$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": { ... }
}
}
{
"Error": "Rate limit exceeded",
"limit": "per-minute"
}
Returns the JSON schema for a specific version of the SLIP AMS batch submission format. No authentication required.
Path Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
version | string | Required | Schema version number (e.g. 1.1, 2.0) |
Request
curl "{{BASE_URL}}/batch-submission/2.0/schema"
Response
{
"$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": { ... }
}
}
Invalid version requested: 3.0
{
"Error": "Rate limit exceeded",
"limit": "per-minute"
}
Retrieves the current status and summary details for a specific submission by its submission number. Requires JWT Bearer token.
Path Parameters
| Parameter | Type | Status | Description |
|---|---|---|---|
submissionNumber | string | Required | The submission number (e.g. 2026-02-17/001) |
Request
curl "{{BASE_URL}}/api/submissions/2026-02-17%2F001" \
-H "Authorization: Bearer YOUR_TOKEN"
Response
{
"SubmissionNumber": "2026-03-23/0007",
"Status": "Uploaded",
"SubmissionErrors": [],
"Notifications": []
}
{
"Errors": [
"string"
]
}
{
"Error": "Rate limit exceeded",
"limit": "per-minute"
}
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
| Parameter | Type | Status | Description |
|---|---|---|---|
submissionNumber | string | Required | The 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
{
"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"
}
{
"Errors": [
"string"
]
}
{
"Error": "Rate limit exceeded",
"limit": "per-minute"
}
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
| Parameter | Type | Status | Description |
|---|---|---|---|
submissionNumber | string | Required | The 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
{
"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"
}
{
"Errors": [
"string"
]
}
{
"Error": "Rate limit exceeded",
"limit": "per-minute"
}
Download the complete Postman collection with all 7 endpoints, pre-configured environments (Production & Train), and example payloads.
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).
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.
Use when the policy qualifies as a Master policy per SLA Guidelines.
Use this as a reference for all available fields and their accepted formats.
Use when the policy qualifies as a GAP placement per SLA Guidelines.
Use when the filer possesses the SL2 PDF form.
Use when the filer possesses the SL1 PDF form.
Use when the filer possesses the SL1 PDF form, and the policy requires an Addendum.
This section answers common questions about SLIP AMS submission development and procedure.
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.
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:
- Complete the IP Whitelist Form
- Email the completed form to support@slacal.com
- The IP address(es) will be reviewed and whitelisted accordingly
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
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
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.
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.
No, submitting the Coversheet is optional. The system will automatically generate an online Coversheet using the submission data.
No, submitting D1/D2 documents is optional.
We recommend submitting up to 75 transactions per submission to ensure timely processing.
We impose a daily limit of 200,000 requests.
- 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
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 = falsein all other payloads
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
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)
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.
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.
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-Typeisn’t set tomultipart/form-data.
Pull the current schema from GET /api/schema or GET /batch-submission/{version}/schema and validate against it first.
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.
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.
You cannot respond to tags via the API. All tags must be handled manually within the SLIP website.
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.