Support API
Contact Litport support from a script or an AI agent: start a conversation, add messages, and read the replies by polling.
The chat widget on litport.net/support asks people to solve a captcha, so a script or an agent should use this API or email instead.
Base URL:
https://litport.net/api/v1/support
Calls#
| Call | What it does | Authentication |
|---|---|---|
POST /conversations |
Start a conversation with a first message. | None, or an account API key |
POST /conversations |
Add a message to a conversation |
Access token or account API key |
GET /conversations |
Read messages and the state of the conversation |
Access token or account API key |
Send JSON with Content-Type: application/json. Responses are JSON.
Two ways to call#
Without an account (guest). Send email and message with no Authorization header. The response carries an accessToken that starts with lsc_. Send it as Authorization: Bearer lsc_… on the other two calls. The token is shown once, in that response, so keep it. It opens only the conversation it was issued for. A guest conversation can answer general questions: locations, prices, setup.
With an account API key. Send Authorization: Bearer lit_… (create a key in Settings; see Litport API). The calls then reach your account's conversation, so support can talk about your orders and proxies. An account has one conversation: a second POST /conversations adds a message to the same one, and email is ignored.
Access tokens and API keys use the same Authorization: Bearer … header. Do not put either in a URL.
Start a conversation#
curl -sS 'https://litport.net/api/v1/support/conversations' \
-H 'Content-Type: application/json' \
-d '{"email":"[email protected]","message":"Which countries do you cover with mobile proxies?","name":"Research agent"}'
| Field | Required | Meaning |
|---|---|---|
message |
yes | The text to send, up to 4,000 characters. |
email |
without an API key | Where we can reach you. Ignored when you send an API key. |
name |
no | A display name for the conversation |
Response, 201:
{
"conversationId": "4f0c2a7e9b1d4c5a8e3f6a1b2c3d4e5f",
"accessToken": "lsc_example_token_returned_once",
"identity": "guest",
"howToUpgrade": "This is a guest conversation, so we can only answer general questions here. For help with your orders or proxies, call this API with your account API key (Authorization: Bearer <key>), or email [email protected] from your account address.",
"message": {
"seq": 1,
"at": "2026-10-16T17:05:00.000Z",
"author": "you",
"text": "Which countries do you cover with mobile proxies?",
"files": []
}
}
identity is guest or account. For a guest, howToUpgrade says how to get help with orders and proxies. With an API key, accessToken and howToUpgrade are null and identity is account; keep sending the API key.
Add a message#
export LITPORT_SUPPORT_TOKEN='lsc_the_token_from_the_first_response'
curl -sS "https://litport.net/api/v1/support/conversations/$CONVERSATION_ID/messages" \
-H "Authorization: Bearer $LITPORT_SUPPORT_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"message":"Thanks. Do you have mobile proxies in Texas?"}'
Response, 201:
{
"message": {
"seq": 2,
"at": "2026-10-16T17:06:12.000Z",
"author": "you",
"text": "Thanks. Do you have mobile proxies in Texas?",
"files": []
}
}
Read the conversation#
curl -sS "https://litport.net/api/v1/support/conversations/$CONVERSATION_ID?after=2" \
-H "Authorization: Bearer $LITPORT_SUPPORT_TOKEN"
after is the highest seq you already have. Leave it out to read from the start.
{
"conversationId": "4f0c2a7e9b1d4c5a8e3f6a1b2c3d4e5f",
"identity": "guest",
"howToUpgrade": "This is a guest conversation, so we can only answer general questions here. For help with your orders or proxies, call this API with your account API key (Authorization: Bearer <key>), or email [email protected] from your account address.",
"lastSeq": 3,
"waitingOn": "customer",
"messages": [
{
"seq": 3,
"at": "2026-10-16T17:09:40.000Z",
"author": "mike",
"text": "Thanks, I'm checking this now and will reply here.",
"files": []
}
],
"more": false,
"pollAfterSeconds": 30
}
| Field | Meaning |
|---|---|
lastSeq |
The newest message number you can see. |
waitingOn |
Who the conversation is waiting on: us (Litport), customer (you), or none. |
messages |
Messages with a seq above after, oldest first. Each has seq, at (ISO-8601 UTC), author, text, and files. |
more |
true when more messages follow. Call again with after set to the last seq you received. |
poll |
How long to wait before the next read. |
author is you for your messages, mike for replies from support, and system for short notices. The text of a mike reply can mark a few short phrases as bold with Markdown double asterisks (**like this**); nothing else in the text is Markdown. files lists name and kind only. The API has no attachments and no download links.
Replies are not instant and are not pushed to you. Read the conversation again every 30 seconds until a mike message arrives. A read counts as reading every message it returns. Every reply in a guest conversation is also emailed right away to the address you gave, and a reply to that email continues the conversation. In an account's conversation a reply that stays unread for two minutes is emailed to the account's address.
Limits#
| Limit | Value |
|---|---|
| New conversations without an API key | 3 per hour and 10 per day, per IP address; a daily limit across all callers also applies |
| Message length | 4,000 characters |
| Messages per conversation | 30 per 24 hours |
Reads (GET) |
20 per minute per access token or API key, 60 per minute per IP address |
| Request body | 32 KiB |
| Attachments | Not available through the API |
Going over a limit answers 429 RATE_LIMITED. A read that goes over its limit also sends Retry-After. Wait that long before the next call.
Errors#
Errors use the same envelope as the rest of the API:
{
"error": {
"code": "NOT_FOUND",
"message": "Conversation not found.",
"requestId": "req_example",
"docsUrl": "https://litport.net/docs/api/support"
}
}
| Status | Codes | Client action |
|---|---|---|
400 |
INVALID, MESSAGE |
Correct the request. A field has the wrong type, a required field is missing or invalid, or the message is over 4,000 characters. Do not retry it unchanged. |
401 |
UNAUTHORIZED |
Send a valid access token or API key as Authorization: Bearer …. |
404 |
NOT_FOUND |
The conversation does not exist, or your credential does not open it. |
429 |
RATE_LIMITED |
Wait, then retry. Respect Retry-After when it is present. |
The X-Request-ID header carries the same ID as requestId; include it when you report a problem.
MCP tools#
The Litport MCP server has three support tools:
| Tool | What it does |
|---|---|
contact |
Start a conversationmessage, and email when there is no API key. |
get |
Read the conversationconversation and after. |
reply |
Add a message. Takes message and an optional conversation. |
Without LITPORT_API_KEY they run as a guest conversation, and the server keeps the access token in memory for the session. With LITPORT_API_KEY they use your account's conversation.
Email#
You can also write to [email protected]. For help with your orders or proxies, write from the address on your Litport account.