API documentation
Connect your work records.
Use a workspace API key to read or update work records, retrieve invoice details, and download exports. Choose only the permissions your integration needs.
Authentication
Owners and managers can create keys in Settings → Developers. Copy the key when it is shown, store it securely, and send it as a bearer token. Keep it out of browser code and source control.
Authorization: Bearer $SOWLEDGER_API_KEYChoose permissions
Each endpoint checks a read or write scope. Missing permissions return 403; missing, expired, or revoked keys return 401.
Manage access
Set an expiry, rotate a key, or revoke it in Developers. SOWLedger stores a hash of the key rather than its full secret value.
Review usage
Developers shows recent requests, including the endpoint, method, response status, and time. Use these records when troubleshooting a connection.
What you can connect
Use the API for your reporting and internal tools. Review the records and permissions before forwarding workspace data to another service.
Work records
Read or update clients, projects, tasks, scheduled work, and completed time entries.
Invoice details
Read the entries, hours, rates, and audit events behind an invoice.
Review checks
Bring budget and time-entry checks into your own reporting process. These are review prompts, not forecasts.
Exports
Download time-entry CSVs or workspace JSON data with a SHA-256 checksum.
Webhooks
Configure event notifications in Settings → Webhooks to keep another system up to date.
Google Calendar, Slack, and QuickBooks
Open Integrations in the app to check provider availability and connect an account. Provider configuration and workspace authorization are required before sync, notifications, or invoice export can run. QuickBooks connections may be in sandbox mode; check the connection before using it for live billing.
Example requests
Set the key in your local environment and replace example IDs with records from your workspace. A project filter narrows time entries, projects, tasks, and schedule data; a JSON export can still include other workspace-wide records. Use a time-entry CSV when that is all you intend to share.
export SOWLEDGER_API_KEY="sow-example_replace_me"
curl https://your-domain.com/api/v1/projects --oauth2-bearer "$SOWLEDGER_API_KEY"export SOWLEDGER_API_KEY="sow-example_replace_me"
curl "https://your-domain.com/api/v1/export?format=json&projectId=proj_123" --oauth2-bearer "$SOWLEDGER_API_KEY"Invoice details and time review
The proof-packs endpoint returns invoice details, linked time entries, and audit events. Revenue-intelligence returns budget and time-entry review checks; it does not manage recurring retainers or predict recovered revenue. CSV and JSON exports include the x-sowledger-export-sha256 checksum header.
export SOWLEDGER_API_KEY="sow-example_replace_me"
curl "https://your-domain.com/api/v1/proof-packs?invoiceId=inv_123" --oauth2-bearer "$SOWLEDGER_API_KEY"export SOWLEDGER_API_KEY="sow-example_replace_me"
curl "https://your-domain.com/api/v1/revenue-intelligence" --oauth2-bearer "$SOWLEDGER_API_KEY"Version 1 endpoints
Writable resources also support PATCH with the relevant record ID. DELETE archives clients, projects, and tags; removes tasks; or cancels scheduled blocks. Deleting time entries and writing invoices through API v1 are not supported. Time-entry creation requires a user ID and both start and stop times; it does not start or stop a live timer.
| Method | Path | Use |
|---|---|---|
| GET | /api/v1/clients | Read clients |
| POST | /api/v1/clients | Create a client with write:clients |
| GET | /api/v1/projects | Read projects |
| POST | /api/v1/projects | Create a project with write:projects |
| GET | /api/v1/tags | Read workspace tags |
| POST | /api/v1/tags | Create a tag with write:tags |
| GET | /api/v1/tasks | Read project tasks |
| POST | /api/v1/tasks | Create a project task with write:tasks |
| GET | /api/v1/schedule | Read scheduled work |
| POST | /api/v1/schedule | Create scheduled work with write:schedule |
| GET | /api/v1/time-entries | Read time entries |
| POST | /api/v1/time-entries | Create a completed draft or submitted entry with write:time |
| GET | /api/v1/analytics | Read analytics summaries |
| GET | /api/v1/invoices | Read invoices |
| GET | /api/v1/proof-packs?invoiceId=... | Read an invoice's linked time and audit details with read:proof-packs |
| GET | /api/v1/revenue-intelligence | Read budget, unlogged-time, and unbilled-time checks with read:revenue-intelligence |
| GET | /api/v1/export | Download CSV or JSON exports with export:data |
Available scopes
Creating schedule blocks or time entries for someone other than the key's creator also requires impersonate:user. Grant this only when your integration needs to act for other workspace members.
Actions that still happen in the app
Approve time, create or change invoices, invite users, and manage the subscription in SOWLedger. API v1 does not expose those actions or destructive workspace administration.