Connectors
Connectors sync external services (Stripe, QuickBooks, Gmail, Slack, Jira, Deel, GitHub) into the SM CRM. SM-owned connectors sync Sprint Mode's own data. Client connectors sync a specific client company's tools.
Available Providers
| Provider | Data synced |
|---|---|
stripe | Invoices, customers |
quickbooks | P&L, balance sheet, invoices |
gmail | Emails, thread metadata |
google_calendar | Calendar events |
slack | Messages, channels |
jira | Issues, projects |
deel | Contractors, contracts |
github | Repos, PRs (client connectors) |
microsoft | Calendar, email |
Routes
GET /api/connectors
List connectors.
Auth: Required
Query params:
| Param | Type | Description |
|---|---|---|
product | string | Filter to product-specific connectors |
company_id | string | Filter to a specific client's connectors |
include_all | 1 | Include all connectors (SM + client) |
Default (no params): returns SM-owned connectors (product IS NULL).
Response:
{
"ok": true,
"data": [
{
"id": "stripe",
"provider": "stripe",
"status": "active",
"auth_type": "api_key",
"last_sync_at": "2026-05-13T10:00:00Z",
"last_sync_status": "success",
"records_synced": 234,
"sync_frequency_minutes": 1440
}
]
}GET /api/connectors/:id
Get a connector with sync history (last 10 runs).
Auth: Required
Response: Connector fields + sync_history[] with started_at, completed_at, status, records_synced, error.
PATCH /api/connectors/:id
Update connector configuration.
Auth: Required
Updatable: config (JSON settings), sync_frequency_minutes, status
GET /api/connectors/:id/logs
Get sync logs for a connector.
Auth: Required
Query params: limit (max 100, default 20)
POST /api/connectors/:id/sync
Trigger an immediate sync for a connector.
Auth: Required
Response:
{
"ok": true,
"data": {
"provider": "stripe",
"records_synced": 12,
"duration_ms": 1840,
"status": "success"
}
}POST /api/connectors/connect
Initiate a client OAuth connection via Nango (CONN-2B pattern).
Auth: Required
Body:
{
"provider": "jira",
"product": "studios",
"company_id": "co_a1b2c3d4",
"return_url": "https://admin.sprintmode.ai/settings/connectors"
}OAuth providers (quickbooks, google, google_gmail, google_calendar, slack, jira, github, microsoft) are routed through Nango.
API-key providers (Stripe, Deel) are stored directly.
Response (OAuth):
{
"ok": true,
"data": {
"redirect_url": "https://nango.sprintmode.ai/oauth/authorize?..."
}
}GET /api/connectors/nango-connected
Callback URL after Nango OAuth completes. Stores credentials and redirects to return_url.
Auth: Public (called by Nango)
POST /api/connectors/nango-callback
Webhook from Nango on credential refresh or connection events.
Auth: Public (Nango HMAC signature verified)
GET /api/connectors/status
Get health status of all SM-owned connectors.
Auth: Required
DELETE /api/connectors/disconnect
Disconnect a client connector.
Auth: Required
Body: { "provider": "jira", "company_id": "co_a1b2" }
GET /api/connectors/quickbooks/auth
Initiate QuickBooks OAuth flow for SM's own QB account.
Auth: Required
GET /api/connectors/quickbooks/callback
QuickBooks OAuth callback. Stores refresh token in DB.
Auth: Public (called by QB)
Client connectors vs SM connectors
SM-owned connectors (product IS NULL) sync Sprint Mode's own Stripe, Gmail, QB etc. Client connectors (company_id set) sync a specific client's tools (their Jira, their GitHub). Use POST /api/connectors/connect with company_id to create client connectors.
