Skip to content

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

Full-text search across contacts, companies, deals, and candidates.

Auth: Required
Query params:

ParamTypeDescription
qstringRequired. Search query
typesstringComma-separated: contacts,companies,deals,candidates. Default: all
limitnumberMax per type. Default: 5

Response:

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

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

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

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

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

json
{
  "contact_id": "ct_a1b2c3d4"
}

Response:

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

json
{ "ok": true, "status": "healthy", "ts": "2026-05-13T10:00:00Z" }

Sprint Mode LLC — Internal Platform Documentation