Webhooks & Events
Moxie can notify your integration when things happen in a workspace. When a subscribed event fires, Moxie sends an HTTP POST to the endpoint you registered, with the event object as the JSON body.
Delivery headers
| Header | Value | Description |
|---|---|---|
X-Event-Origin | withmoxie.com | Identifies the sender. |
X-Event-Type | e.g. InvoiceVoided | The event name (see catalog below). Use it to route the payload. |
Invoice events
Invoice events carry an InvoiceMini payload (the same shape returned by Search Payable Invoices, including invoice totals, tax, taxPercentage, taxRule, taxBreakdown, payments, and lineItems).
X-Event-Type | Fires when |
|---|---|
InvoiceSent | An invoice is sent to a client. |
InvoiceVoided | A sent invoice with no payments is voided. The invoice moves to VOIDED. |
InvoiceWriteOff | A sent or partially paid invoice is written off. The invoice moves to WRITE-OFF. |
PaymentReceived | A payment is recorded against an invoice. |
InvoiceVoided and InvoiceWriteOff let an accounting integration react to a cancellation or write-off — for example, issuing a matching storno on the accounting platform. Note the constraints: an invoice can only be voided from SENT with no payments; it can be written off from SENT or PARTIAL.
Example payload (InvoiceVoided)
{
"id": "66b0f2a1c3a9e40012ab34cd",
"accountId": 10016,
"invoiceNumber": 1042,
"invoiceNumberFormatted": "E-2026-042",
"clientId": "66b0f2a1c3a9e40012ab34cd",
"status": "VOIDED",
"invoiceType": "STANDARD",
"currency": "HUF",
"subTotal": 100.00,
"tax": 15.47,
"taxPercentage": 15.47375,
"taxRule": {
"id": "gst-pst",
"name": "GST + PST",
"source": "MOXIE",
"providerId": null,
"effectiveRate": 15.47375,
"components": [
{
"name": "GST",
"rate": 5.0,
"order": 0,
"compound": false,
"compoundOnOrder": null
},
{
"name": "PST",
"rate": 9.975,
"order": 1,
"compound": true,
"compoundOnOrder": null
}
]
},
"taxBreakdown": [
{
"name": "GST",
"rate": 5.0,
"order": 0,
"compound": false,
"taxableAmount": 100.00,
"amount": 5.00
},
{
"name": "PST",
"rate": 9.975,
"order": 1,
"compound": true,
"taxableAmount": 105.00,
"amount": 10.47
}
],
"total": 115.47,
"amountDue": 0.00,
"viewOnlineUrl": "https://pay.withmoxie.com/i/...",
"payments": []
}
Time events and expense automation
X-Event-Type | Fires when |
|---|---|
TimerCreate | A completed time entry is created, including when a running timer stops. |
TimerUpdate | A completed time entry is updated. |
TimerDelete | A completed time entry is deleted. |
Subscribe separately to each event through Subscribe hook,
using its name as type and your Make webhook URL as hookUrl. Each payload
contains the time entry's stable id. Update events include the current entry;
delete events include the entry being removed. duration is in seconds and
excludes paused time.
To keep staff-cost expenses in sync in Make:
- On
TimerCreate, calculateduration / 3600 × hourly rate, create the expense, and store its returnedidagainst the time entryidin a Make data store. Reuse this mapping if an event is delivered again to avoid duplicate expenses. - On
TimerUpdate, find the mapped expense, recalculate the cost, and update the expense withPATCH:{"id":"expense-id","amount":75.0}. Omitted fields retain their saved values. - On
TimerDelete, find the mapped expense and call Delete expense. It returnstrueon success. Remove the mapping after successful deletion; a404means the expense is already absent from the API key's workspace.
Moxie does not link expenses to time entries automatically. If a mapping is missing, reconcile it with the original expense before changing records. Time entries already added to an invoice cannot be edited or deleted.
Full event catalog
The X-Event-Type values Moxie can send:
ClientCreate, ClientUpdate, ClientDelete,
InvoiceSent, InvoiceVoided, InvoiceWriteOff, PaymentReceived,
AgreementSent, AgreementViewed, AgreementSigned,
ProposalSent, ProposalViewed, ProposalSigned,
ProjectCreate, ProjectUpdate, ProjectComplete,
TimerCreate, TimerUpdate, TimerDelete,
FormCompleted, MeetingScheduled, MeetingUpdated, MeetingCancelled,
DeliverableApproval, DeliverableCreate, DeliverableUpdate, DeliverableDelete,
OpportunityCreate, OpportunityUpdate, OpportunityDelete,
TicketCreate, TicketUpdate, TicketDelete, TicketClose, TicketComment