Integrations
API Access
The Support Station API lets you integrate support functionality into your applications. Create tickets, manage customers, fetch data, and automate workflows programmatically.
Plan Requirements
API access is available on Standard plans and above.
| Plan | API Access |
|---|---|
| Free | ✗ |
| Starter | ✗ |
| Standard | ✓ |
| Pro | ✓ |
| Enterprise | ✓ |
Getting Started
Step 1: Generate an API Key
- Go to Settings > API Keys
- Click Create API Key
- Name your key (e.g., "CRM Integration")
- Select scopes (permissions)
- Copy and securely store the key
Important: The key is only shown once. Store it securely.
Step 2: Make Your First Request
curl -X GET "https://api.supportstation.io/v1/tickets" -H "Authorization: Bearer YOUR_API_KEY" -H "Content-Type: application/json"
Step 3: Explore the API
Browse available endpoints in our API documentation at docs.supportstation.io/api.
Authentication
All API requests require authentication via API key.
Header Authentication
Include your API key in the Authorization header:
Authorization: Bearer sk_live_abc123...
Key Types
| Prefix | Environment |
|---|---|
sk_live_ |
Production |
sk_test_ |
Testing (if available) |
API Endpoints
Tickets
List Tickets
GET /v1/tickets
Query parameters:
status- Filter by statusassignee- Filter by assignee IDlimit- Results per page (max 100)offset- Pagination offset
Get Ticket
GET /v1/tickets/:id
Create Ticket
POST /v1/tickets
Body:
{
"customer_email": "john@example.com",
"subject": "Need help with billing",
"description": "I was charged twice this month...",
"priority": "high",
"tags": ["billing"]
}
Update Ticket
PATCH /v1/tickets/:id
Body:
{
"status": "resolved",
"assignee_id": "usr_abc123"
}
Messages
Use GET /api/v1/tickets/:id with tickets:read to read a ticket and its messages. Use POST /api/v1/tickets/:id/messages with content and tickets:write to add a customer message. Include a staff user_id to add a staff reply.
Add an internal note
Use POST /api/v1/tickets/:id/notes with tickets:write to add a private staff
note. Replace ticket-id and staff-user-id with the ticket and author IDs.
Both must belong to the API key's organization.
curl -X POST https://api.supportstation.io/api/v1/tickets/ticket-id/notes \
-H "Authorization: Bearer $SS_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"content": "Check the logs before the next reply.",
"user_id": "staff-user-id"
}'
The API returns 201 with the note in data and type INTERNAL_NOTE.
Customers cannot see the note. It does not send customer email or public
webhook events. You can read it in the ticket's messages array through
GET /api/v1/tickets/:id with tickets:read.
See the internal note API reference for request fields, responses, and errors.
Customers
List Customers
GET /v1/customers
Get Customer
GET /v1/customers/:id
Create Customer
POST /v1/customers
Body:
{
"email": "jane@example.com",
"name": "Jane Smith",
"metadata": {
"plan": "enterprise",
"company": "Acme Inc"
}
}
Update Customer
PATCH /v1/customers/:id
API Scopes
When creating API keys, select appropriate scopes:
| Scope | Permissions |
|---|---|
TICKETS_READ |
View tickets |
TICKETS_WRITE |
Create/update tickets and messages |
Note: Scopes are defined in UPPERCASE format. Additional scopes may be available - check the API key creation interface for the full list.
Use minimum required scopes for security.
Error Handling
Error Response Format
{
"error": "invalid_request",
"message": "Customer email is required",
"details": {
"field": "customer_email"
}
}
Common Error Codes
| Code | Status | Meaning |
|---|---|---|
authentication_failed |
401 | Invalid or missing API key |
forbidden |
403 | Key lacks required scope |
not_found |
404 | Resource doesn't exist |
validation_error |
400 | Invalid request data |
internal_error |
500 | Server error (retry) |
Pagination
List endpoints support pagination:
GET /v1/tickets?limit=25&offset=50
Response includes pagination info:
{
"data": [...],
"pagination": {
"limit": 25,
"offset": 50,
"total": 150,
"has_more": true
}
}
Webhooks + API
Combine webhooks with API for powerful integrations:
- Webhook notifies your system of new ticket
- API call fetches full ticket details
- Your logic processes and responds
- API call updates ticket or adds message
Webhooks can be configured in Settings > Webhooks to notify your systems of Support Station events.
Code Examples
Node.js
const axios = require('axios');
const client = axios.create({
baseURL: 'https://api.supportstation.io/v1',
headers: {
'Authorization': `Bearer ${process.env.SS_API_KEY}`,
'Content-Type': 'application/json'
}
});
// Create a ticket
async function createTicket(email, subject, description) {
const response = await client.post('/tickets', {
customer_email: email,
subject,
description
});
return response.data;
}
// Add a message
async function addMessage(ticketId, content) {
const response = await client.post(`/tickets/${ticketId}/messages`, {
content,
internal: false
});
return response.data;
}
Python
import requests
class SupportStation:
def __init__(self, api_key):
self.base_url = 'https://api.supportstation.io/v1'
self.headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
def create_ticket(self, email, subject, description):
response = requests.post(
f'{self.base_url}/tickets',
headers=self.headers,
json={
'customer_email': email,
'subject': subject,
'description': description
}
)
return response.json()
def get_tickets(self, status=None):
params = {}
if status:
params['status'] = status
response = requests.get(
f'{self.base_url}/tickets',
headers=self.headers,
params=params
)
return response.json()
Best Practices
Secure Your Keys
- Never commit keys to version control
- Use environment variables
- Rotate keys periodically
- Use minimal scopes
Handle Errors Gracefully
- Implement retries for 5xx errors
- Log errors for debugging
- Validate requests before sending
Cache When Possible
- Cache customer data locally
- Avoid redundant API calls
- Respect rate limits
Use Idempotency
- Check for existing resources before creating
- Use unique identifiers
- Handle duplicate requests gracefully
Was this article helpful?
