{"openapi":"3.0.3","info":{"title":"AutonAI — REST API","version":"0.5.0","description":"REST API over a user's ShiftCare data, for dashboards/apps and integrations. GET endpoints are read-only. POST /api/v1/tools/{name} invokes the same guard-railed tool handlers the MCP surface uses — read tools with any key; write tools only with a read_write-scoped key (created in the AutonAI portal or via MCP with an explicit risk acknowledgment). Authenticate with an API key (AutonAI portal → Settings → API keys, or the create_dashboard_api_key MCP tool). Call this from a server/BFF — never expose the API key in browser code. All data is scoped to the workspace the key is bound to."},"servers":[{"url":"https://autonai.app"}],"components":{"securitySchemes":{"ApiKeyAuth":{"type":"http","scheme":"bearer","description":"API key as 'Authorization: Bearer <key>'"}}},"security":[{"ApiKeyAuth":[]}],"paths":{"/api/v1/accounts":{"get":{"summary":"List the workspace + its connected ShiftCare accounts (id, name, country) — no query params","security":[{"ApiKeyAuth":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients":{"get":{"summary":"List clients (participants)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"items","in":"query","schema":{"type":"integer","default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}":{"get":{"summary":"Get one client's full profile","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}/documents":{"get":{"summary":"List a client's documents","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}/care-plans":{"get":{"summary":"List a client's care plans","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/care-plans/{id}":{"get":{"summary":"Get one care plan","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"integer"},"description":"ShiftCare client (participant) id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/care-plans/{id}/goals":{"get":{"summary":"List a care plan's goals","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"integer"},"description":"ShiftCare client (participant) id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/care-plans/{id}/tasks":{"get":{"summary":"List a care plan's tasks (with schedules)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"integer"},"description":"ShiftCare client (participant) id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/care-plans/{id}/focus-areas":{"get":{"summary":"List a care plan's focus areas","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"integer"},"description":"ShiftCare client (participant) id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/care-plans/{id}/reviews":{"get":{"summary":"List a care plan's reviews","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"client_id","in":"query","required":true,"schema":{"type":"integer"},"description":"ShiftCare client (participant) id"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/incidents":{"get":{"summary":"List incidents","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"items","in":"query","schema":{"type":"integer","default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/staff":{"get":{"summary":"List staff (each carries review_date = performance-review due date)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"search","in":"query","schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer"}},{"name":"items","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/shifts":{"get":{"summary":"List shifts overlapping a date window (fans out across accounts)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string"},"description":"YYYY-MM-DD"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/shifts/{id}":{"get":{"summary":"Get one shift (includes assigned workers)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","schema":{"type":"integer"},"description":"Required for multi-account workspaces"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/forms":{"get":{"summary":"List digital forms (fans out across accounts)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"status_eq","in":"query","schema":{"type":"string"},"description":"e.g. published"},{"name":"name_cont","in":"query","schema":{"type":"string"},"description":"name contains"},{"name":"page","in":"query","schema":{"type":"integer"}},{"name":"items","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/forms/{id}/responses":{"get":{"summary":"List responses submitted for a form","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","schema":{"type":"integer"},"description":"Required for multi-account workspaces"},{"name":"page","in":"query","schema":{"type":"integer"}},{"name":"items","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}/medical-history":{"get":{"summary":"List a client's medical history records by type","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}},{"name":"type","in":"query","required":true,"schema":{"type":"string","enum":["conditions","procedures","allergies"]}},{"name":"account_id","in":"query","schema":{"type":"integer"},"description":"Required for multi-account workspaces"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/staff/compliance":{"get":{"summary":"Staff compliance report","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"summary","in":"query","schema":{"type":"boolean"},"description":"true = account bucket counts; false = per-staff matrix"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/complaints":{"get":{"summary":"List complaints","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"statuses","in":"query","schema":{"type":"string"},"description":"CSV of statuses"},{"name":"date_from","in":"query","schema":{"type":"string"}},{"name":"date_to","in":"query","schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/invoices":{"get":{"summary":"List invoices — V3 shape: amounts (total_amount, balance) are NUMBERS, dates are ISO YYYY-MM-DD, each row embeds its invoice_items. SINCE 2026-07-11: this endpoint serves the V3 shape by default — amounts numeric, dates ISO; the previous V2 shape (currency strings like '$220.00', DD/MM/YYYY dates, 'period' filter) is RETIRED as the default. Pass ?legacy=v2 to opt back into the retired V2 shape (documented escape hatch for dashboards that have not migrated). There is no single-invoice GET — filter by client. Fans out across accounts (each row tagged _account_id).","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"client_ids","in":"query","schema":{"type":"string"},"description":"V3: client ids to filter to — repeat or comma-separate; forwarded as client_id[]"},{"name":"client_id","in":"query","schema":{"type":"integer"},"description":"V3: single-client shorthand (folded into client_id[]). In ?legacy=v2 mode, filters to one client (forwarded as 'client')."},{"name":"client_types","in":"query","schema":{"type":"string"},"description":"V3: client type ids — repeat or comma-separate; forwarded as client_types[]"},{"name":"payment_status","in":"query","schema":{"type":"string","enum":["paid","unpaid","overdue"]},"description":"V3: filter by payment status"},{"name":"payment_type","in":"query","schema":{"type":"string"},"description":"V3: funding/payment type — region-dependent value (e.g. 'Plan Managed (NDIS)')"},{"name":"start_date","in":"query","schema":{"type":"string"},"description":"V3: YYYY-MM-DD (with period_filter_type: issue or due date)"},{"name":"end_date","in":"query","schema":{"type":"string"},"description":"V3: YYYY-MM-DD"},{"name":"period_filter_type","in":"query","schema":{"type":"string","enum":["issued_at","due_at","issued_at_and_due_at"]},"description":"V3: which date start_date/end_date filter. In ?legacy=v2 mode, applies to 'period'."},{"name":"include_client","in":"query","schema":{"type":"boolean"},"description":"V3: embed minimal client info per invoice"},{"name":"include_external_references","in":"query","schema":{"type":"boolean"},"description":"V3: embed integration external references"},{"name":"per_page","in":"query","schema":{"type":"integer","maximum":100},"description":"V3: page size (max 100, default 20)"},{"name":"page","in":"query","schema":{"type":"integer"}},{"name":"legacy","in":"query","schema":{"type":"string","enum":["v2"]},"description":"DEPRECATED escape hatch: ?legacy=v2 serves the retired V2 shape (currency strings, DD/MM/YYYY)"},{"name":"period","in":"query","schema":{"type":"string"},"description":"?legacy=v2 only: date range 'DD/MM/YYYY - DD/MM/YYYY'"},{"name":"paid","in":"query","schema":{"type":"boolean"},"description":"?legacy=v2 only (use payment_status=paid on the V3 default)"},{"name":"unpaid","in":"query","schema":{"type":"boolean"},"description":"?legacy=v2 only (use payment_status=unpaid on the V3 default)"},{"name":"overdue","in":"query","schema":{"type":"boolean"},"description":"?legacy=v2 only (use payment_status=overdue on the V3 default)"},{"name":"include_void","in":"query","schema":{"type":"boolean"},"description":"?legacy=v2 only: include void invoices (forwarded upstream as 'void')"},{"name":"length","in":"query","schema":{"type":"integer"},"description":"?legacy=v2 only: page size"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/invoiceable-items":{"get":{"summary":"Invoiceable (not-yet-invoiced) line items + totals per client for a billing period (cursor-paginated: pass back pagination.next_cursor until has_more=false)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"start_date","in":"query","required":true,"schema":{"type":"string"},"description":"YYYY-MM-DD, account time zone, inclusive"},{"name":"end_date","in":"query","required":true,"schema":{"type":"string"},"description":"YYYY-MM-DD, account time zone, inclusive"},{"name":"client_id","in":"query","schema":{"type":"integer"},"description":"one client; omit to sweep the account"},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"opaque next_cursor from the previous page"},{"name":"per_page","in":"query","schema":{"type":"integer","maximum":100}},{"name":"account_location_id","in":"query","schema":{"type":"integer"}},{"name":"facility_ids","in":"query","schema":{"type":"string"},"description":"facility ids (0 = no facility) — repeat the param or pass comma-separated; forwarded upstream as facility_ids[]"},{"name":"area_id","in":"query","schema":{"type":"integer"}},{"name":"fund_type","in":"query","schema":{"type":"string","enum":["private_pay","medicaid","hcp","sah","user_task"]}},{"name":"payment_type","in":"query","schema":{"type":"string"}},{"name":"fund_names","in":"query","schema":{"type":"string"},"description":"case-insensitive fund-category names — repeat or comma-separate; forwarded as fund_names[]"},{"name":"line_types","in":"query","schema":{"type":"string"},"description":"hours,mileage,expenses,tasks,fixed — repeat or comma-separate; forwarded as line_types[]"},{"name":"group_by","in":"query","schema":{"type":"string","enum":["client","fund","payment_type","fund_and_payment_type"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/invoices/{id}/payments":{"get":{"summary":"List payments recorded on an invoice (amounts numeric)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}},{"name":"include_reversed","in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/quotes":{"get":{"summary":"List quotes","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"status","in":"query","schema":{"type":"string"}},{"name":"client_id","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/price-books":{"get":{"summary":"List price books / areas with their rates","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"q","in":"query","schema":{"type":"string"},"description":"search by name"},{"name":"client_id","in":"query","schema":{"type":"integer"},"description":"scope to a client's pricebooks"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/medications":{"get":{"summary":"List the medication catalog","security":[{"ApiKeyAuth":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}/funds":{"get":{"summary":"List a client's funds with remaining budget (balances)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"with_balance","in":"query","schema":{"type":"boolean","default":true},"description":"populate balance_amount/balance_hours (defaults true). Canonical name — matches the MCP surface."},{"name":"calculate_balance","in":"query","schema":{"type":"boolean"},"description":"DEPRECATED alias for with_balance (still honored; with_balance wins if both are sent)"},{"name":"fund_type","in":"query","schema":{"type":"string"},"description":"filter to active funds of this type"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/clients/{clientId}/fund-transactions":{"get":{"summary":"List a client's fund spend ledger","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"clientId","in":"path","required":true,"schema":{"type":"integer"}},{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"start_date","in":"query","schema":{"type":"string"},"description":"YYYY-MM-DD (required unless claim_id)"},{"name":"end_date","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/segments":{"get":{"summary":"List teams / segments","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/leaves":{"get":{"summary":"Leave pipeline table (HR-leave-dashboard flag gated)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"start_date","in":"query","schema":{"type":"string"}},{"name":"end_date","in":"query","schema":{"type":"string"}},{"name":"status","in":"query","schema":{"type":"string"}},{"name":"facility_id","in":"query","schema":{"type":"integer"}},{"name":"location_id","in":"query","schema":{"type":"integer"}},{"name":"leave_type","in":"query","schema":{"type":"string"}},{"name":"staff_ids","in":"query","schema":{"type":"string"},"description":"staff ids — repeat or comma-separate; forwarded as staff_ids[]"},{"name":"team_ids","in":"query","schema":{"type":"string"},"description":"team ids — repeat or comma-separate; forwarded as team_ids[]"},{"name":"sort","in":"query","schema":{"type":"string"}},{"name":"direction","in":"query","schema":{"type":"string","enum":["asc","desc"]}},{"name":"search","in":"query","schema":{"type":"string"}},{"name":"page","in":"query","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/leaves/metrics":{"get":{"summary":"Leave KPI metrics row","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"start_date","in":"query","schema":{"type":"string"}},{"name":"end_date","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/dashboard/operations/{metric}":{"get":{"summary":"Read a management-scorecard operations metric (fixed rolling window)","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"metric","in":"path","required":true,"schema":{"type":"string"},"description":"e.g. vacant_shifts_staff_availability, shift_cancellations, utilisation, late_clockins, staff_shift_time_variances, incidents, form_responses"},{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"page","in":"query","schema":{"type":"integer"},"description":"utilisation / staff_shift_time_variances only"},{"name":"per_page","in":"query","schema":{"type":"integer"},"description":"utilisation / staff_shift_time_variances only"},{"name":"sort_by","in":"query","schema":{"type":"string"},"description":"staff_shift_time_variances only"},{"name":"sort_type","in":"query","schema":{"type":"string","enum":["asc","desc"]},"description":"staff_shift_time_variances only"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/tools":{"get":{"summary":"List the invokable tool catalogue (name, first-sentence description, effects) plus this key's scope","security":[{"ApiKeyAuth":[]}],"parameters":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}},"/api/v1/tools/{name}":{"post":{"summary":"Invoke a tool by name — the same guard-railed handlers the MCP surface uses. Body = the tool's input object (see the MCP tool schemas / docs). Read effects work with any key; write/destructive/external effects require a read_write-scoped key (403 POLICY_DENIED otherwise). Handlers keep their own guardrails: write tools accept dry_run=true previews, and destructive/outward actions require their explicit confirm flags exactly as they do for Claude.","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string"},"description":"tool name from GET /api/v1/tools"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"responses":{"200":{"description":"Tool result","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"400":{"description":"Unknown action / input failed the tool's schema"},"401":{"description":"Missing/invalid API key"},"403":{"description":"POLICY_DENIED — write effect attempted with a read-scoped key, or account outside this workspace"},"404":{"description":"Unknown tool"},"413":{"description":"Request/result exceeds size limits"},"502":{"description":"Upstream request failed"}}}},"/api/v1/dashboard/user-tasks/{metric}":{"get":{"summary":"Read a dashboard user-tasks metric","security":[{"ApiKeyAuth":[]}],"parameters":[{"name":"metric","in":"path","required":true,"schema":{"type":"string"},"description":"billable_breakdown, fund_breakdown, hours_breakdown, type_breakdown, upcoming_tasks"},{"name":"account_id","in":"query","required":true,"schema":{"type":"integer"}},{"name":"due_on_start","in":"query","schema":{"type":"string"},"description":"billable/hours/type only (ignored by fund_breakdown & upcoming_tasks)"},{"name":"due_on_end","in":"query","schema":{"type":"string"},"description":"billable/hours/type/fund (ignored by upcoming_tasks)"},{"name":"client_id","in":"query","schema":{"type":"integer"},"description":"fund_breakdown drill-in"},{"name":"page","in":"query","schema":{"type":"integer"},"description":"fund_breakdown / upcoming_tasks"},{"name":"items","in":"query","schema":{"type":"integer"},"description":"fund_breakdown / upcoming_tasks"},{"name":"group_by","in":"query","schema":{"type":"string"},"description":"billable_breakdown only"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"401":{"description":"Missing/invalid API key"}}}}}}