ERP via the API
Your ERP or invoicing software fetches the time entries through the REST API and reports back which entries are billed. The delta sync only returns what changed since the last call; a billing run marks entries with your invoice number and locks them. Both are part of Premium.
- As owner or admin, add a token with the abilities
readandbillingunder Settings, API and devices. It is shown only once. - On the first call, fetch all entries without a cursor and keep
meta.next_cursorfrom the answer. - From then on always ask with the stored cursor. You only get changed entries, deleted ones with
deleted_atset. If the API answers 410, the cursor is older than 90 days: start again without a cursor and replace your copy. - After invoicing, create a billing run, first with
"dry_run": trueto try it. The entries are then billed and locked.
Fetch time entries, first without, then with a cursor:
curl "https://api.horaka.com/v1/time-entries/changes?cursor=0" -H "Authorization: Bearer YOUR_TOKEN"
curl "https://api.horaka.com/v1/time-entries/changes?cursor=CURSOR" -H "Authorization: Bearer YOUR_TOKEN"
Clients with their IDs, then bill everything open of one client up to the end of the month:
curl https://api.horaka.com/v1/clients -H "Authorization: Bearer YOUR_TOKEN"
curl -X POST https://api.horaka.com/v1/billing-runs \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"filter": {"client_id": 4, "until": "2026-10-31"}, "invoice_ref": "RE-2026-0042", "dry_run": true}'
Instead of asking regularly, Horaka can also notify your ERP on every change: add a webhook under Settings, Webhooks. Every field, filter and error code is described in the API documentation.