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
List Messages
GET /v1/tickets/:id/messages
Add Message
POST /v1/tickets/:id/messages
Body:
{
"content": "Thanks for reaching out. Let me look into this.",
"internal": false
}
Set internal: true for internal notes.
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?
