Skip to main content
Support home

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_KEY

Choose 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.

MethodPathUse
GET/api/v1/clientsRead clients
POST/api/v1/clientsCreate a client with write:clients
GET/api/v1/projectsRead projects
POST/api/v1/projectsCreate a project with write:projects
GET/api/v1/tagsRead workspace tags
POST/api/v1/tagsCreate a tag with write:tags
GET/api/v1/tasksRead project tasks
POST/api/v1/tasksCreate a project task with write:tasks
GET/api/v1/scheduleRead scheduled work
POST/api/v1/scheduleCreate scheduled work with write:schedule
GET/api/v1/time-entriesRead time entries
POST/api/v1/time-entriesCreate a completed draft or submitted entry with write:time
GET/api/v1/analyticsRead analytics summaries
GET/api/v1/invoicesRead invoices
GET/api/v1/proof-packs?invoiceId=...Read an invoice's linked time and audit details with read:proof-packs
GET/api/v1/revenue-intelligenceRead budget, unlogged-time, and unbilled-time checks with read:revenue-intelligence
GET/api/v1/exportDownload CSV or JSON exports with export:data

Available scopes

read:clientswrite:clientsread:projectswrite:projectsread:tagswrite:tagsread:taskswrite:tasksread:schedulewrite:scheduleread:timewrite:timeread:analyticsread:invoicesread:proof-packsread:revenue-intelligenceexport:dataimpersonate:user

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.

Read about security