Webhooks
Webhooks allow your app to receive real-time HTTP POST requests from Mojave whenever specific events happen — such as when a time entry is created, an invoice is sent, or a user is added.
They’re useful for syncing data with external tools, triggering automations, or keeping your internal systems updated without polling the API.
How Webhooks Work
When you subscribe to a webhook event, Mojave will send an HTTP POST request to the endpoint you provide, containing a signed payload with event details.
Each event includes a type
, a timestamp, and a full copy of the resource object (e.g. a time entry or invoice).
Example Payload
Supported Events
Event Type | Description |
---|---|
| A new time entry was created |
| A time entry was modified |
| A new invoice was generated |
| An invoice was marked as paid |
| A project was archived |
| A new user was invited to the workspace |
More events will be added in future updates.
Creating a Webhook
Request body:
Response:
Verifying Requests
Each request will contain a X-Mojave-Signature
header, which you can use to verify the payload’s authenticity.
Steps:
Retrieve your webhook secret from Settings → Webhooks
Recreate the signature using your secret and payload
Compare it to the
X-Mojave-Signature
header using a secure comparison
🔐 Verification is strongly recommended to prevent spoofed requests.
Retry Logic
If your webhook endpoint fails (non-2xx response), Mojave will retry:
Up to 5 times
With exponential backoff (starting at 1 min)
You can monitor failed deliveries and logs in your dashboard.
Best Practices
Respond with a
200 OK
as quickly as possibleProcess events asynchronously if needed
Use idempotency to avoid duplicate handling
Always verify payload signatures