Skip to content

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

ProviderData synced
stripeInvoices, customers
quickbooksP&L, balance sheet, invoices
gmailEmails, thread metadata
google_calendarCalendar events
slackMessages, channels
jiraIssues, projects
deelContractors, contracts
githubRepos, PRs (client connectors)
microsoftCalendar, email

Routes

GET /api/connectors

List connectors.

Auth: Required
Query params:

ParamTypeDescription
productstringFilter to product-specific connectors
company_idstringFilter to a specific client's connectors
include_all1Include all connectors (SM + client)

Default (no params): returns SM-owned connectors (product IS NULL).

Response:

json
{
  "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:

json
{
  "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:

json
{
  "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):

json
{
  "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.

Sprint Mode LLC — Internal Platform Documentation