QuickBooks
Read-only financial data from QuickBooks Online. Requires QB connector configured with OAuth refresh token.
Routes
GET /api/quickbooks/pl
Profit & Loss statement.
Auth: Required
Query params: date_from, date_to, summarize_column_by (Month, Quarter, Year)
Response: QB P&L report in SM's normalized format.
GET /api/quickbooks/balance-sheet
Balance Sheet report.
Auth: Required
Query params: as_of_date
GET /api/quickbooks/invoices
QuickBooks invoices (raw, before sync to CRM).
Auth: Required
Query params: date_from, date_to, customer_id
Search
GET /api/search
Full-text search across contacts, companies, deals, and candidates.
Auth: Required
Query params:
| Param | Type | Description |
|---|---|---|
q | string | Required. Search query |
types | string | Comma-separated: contacts,companies,deals,candidates. Default: all |
limit | number | Max per type. Default: 5 |
Response:
{
"ok": true,
"data": {
"contacts": [{ "id": "ct_...", "full_name": "...", "email": "..." }],
"companies": [{ "id": "co_...", "name": "..." }],
"deals": [{ "id": "deal_...", "title": "..." }],
"candidates": [{ "id": "cand_...", "name": "..." }]
}
}Stats
GET /api/stats
Dashboard KPIs: revenue, leads, deals, active engagements, billing.
Auth: Required
Query params: product (filter to product-tagged data)
Response:
{
"ok": true,
"data": {
"mrr": 45000,
"arr": 540000,
"active_engagements": 8,
"total_clients": 12,
"open_leads": 23,
"open_deals": 14,
"pipeline_value": 280000,
"outstanding_invoices": 32000
}
}Tasks
GET /api/tasks
List tasks.
Auth: Required
Query params: status (open, done), assigned_to, contact_id, company_id, limit
POST /api/tasks
Create a task.
Auth: Required
Body:
{
"title": "Follow up with Jane re proposal",
"due_date": "2026-05-20",
"assigned_to": "dani@sprintmode.co",
"contact_id": "ct_a1b2",
"company_id": "co_c3d4",
"priority": "high"
}PATCH /api/tasks/:id
Update: title, status, due_date, assigned_to, priority, completed_at.
Auth: Required
Meetily
Meetily is the meeting recording and transcript system. It watches a local folder for ZIP files from the Meetily app and uploads them.
GET /api/meetily/config
Get the current Meetily device/mic configuration.
Auth: Required
Response:
{
"ok": true,
"data": {
"devices": [
{
"device_label": "MacBook Pro Microphone",
"display_name": "Aaron",
"user_email": "aaron@sprintmode.co"
}
]
}
}POST /api/meetily/config
Register or update a mic/device for a user.
Auth: Required
Body:
{
"device_label": "MacBook Pro Microphone",
"display_name": "Aaron",
"user_email": "aaron@sprintmode.co"
}Portal Test Session
POST /api/portal/test-session
Generate a temporary portal session token for admin "View as Client" feature. Used by the admin portal's client detail page.
Auth: Required (admin only)
Body:
{
"contact_id": "ct_a1b2c3d4"
}Response:
{
"ok": true,
"data": {
"token": "tmp_session_abc123",
"url": "https://studios.sprintmode.ai/client/?session=tmp_session_abc123",
"expires_in": 3600
}
}Health
GET /api/health
Health check endpoint.
Auth: Public
Response:
{ "ok": true, "status": "healthy", "ts": "2026-05-13T10:00:00Z" }