A product changed
A product was created, changed, switched off or deleted, in Tabba or on the accounting platform, where a change is seen at the next import. data is the product as GET /products/{ref} answers it, with archived_at and deleted_at.
Header Parameters
t=<unix seconds>,v1=<hex>: v1 is the HMAC-SHA256, in hex, of <t>.<body> under the endpoint's signing secret, where <body> is the request body byte for byte. Verify it before you trust the body, and refuse a t more than 300 seconds from your own clock. A retry and a replay carry the same body under a new signature.
The event's id, as in the body.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
Example Requests
/product.updatedAn issued invoice was not sent Webhook
The invoice was booked, and its delivery to the customer is not known to have succeeded. Sent beside `invoice.issued`, never instead of it. `data.send_error` says why. The invoice is in the books: follow up on the delivery, and do not issue it again.
Set a person’s hours and completion on a line PUT
Both figures are stated as they now stand: `hours` is the person’s total on the line, and `completion_rate` the completion they stand at. The total is registered as the signed difference against what is registered, in the entry month of the request (Europe/Copenhagen): the one bucket per line, person and month the workspace reads. **Sending the same figures again registers nothing.** Name the line on an invoice (`invoice` and the invoice line’s id) or on an occurrence of a recurring series (`series`, `occurrence` and the series line’s id): an occurrence that is no invoice yet is made one first. Set one person’s hours on one line one request at a time: two requests at the same moment both measure against the same total. Refused with `NOT_ASSIGNED` (409) when the person holds no place on the line, and with `HOURS_BILLED_LOCKED` (409) for the hours of an hourly line its invoice has billed.