Skip to navigation

Webhook event types

This page lists every event that Solvimon can send to a webhook. It shows the object types that you can subscribe to, their actions and sub-actions, and when each event fires.


Why this matters

A webhook only receives the events you subscribe to, and Solvimon matches event names exactly. Transition events such as INVOICE.STATUS_TO_FINAL or QUOTE_VERSION.SIGNED are separate events: subscribing to INVOICE.UPDATED does not include them. Use this page to pick the exact values for included_actions and excluded_actions.

How it works

An event name is the object type and the action, in uppercase, separated by a period: OBJECT_TYPE.ACTION. Solvimon sends the name as type in the webhook payload.

Actions come in two kinds:

KindValuesMeaning
Base actionCREATED, UPDATED, DELETEDThe resource was created, changed or deleted. Not every object type supports all three.
Sub-actionSTATUS_TO_FINAL, PAID, SIGNED and othersA specific transition on the resource. Only some object types have them.

When a change triggers a sub-action, Solvimon sends the sub-action event. For most object types, it also sends the base UPDATED event as a separate delivery. In each delivery, data contains the resource after the change. When the webhook has include_previous_data enabled, previous_data contains the resource before the change.

A webhook decides what it receives with two lists:

included_actionsexcluded_actionsYour webhook receives
Not set or emptyNot set or emptyEvery event.
SetIgnoredOnly the listed events.
Not setSetEvery event except the listed ones.

To receive every event except a few, leave included_actions out of the request and set only excluded_actions. There are no wildcards. To receive every invoice transition, list each INVOICE.* event that you need. The API rejects an unknown value when you create or update the webhook.

List the available events

GET /v1/webhooks/actions returns every object type and the actions you can use for it. It is the source of truth for your platform, so use it to validate your configuration.

Get the available webhook actions
curl https://test.api.solvimon.com/v1/webhooks/actions \
-H "X-API-KEY: <apiKey>"
Response (shortened)
{
"data": [
{ "object_type": "ALERT", "actions": ["CREATED"] },
{
"object_type": "INVOICE",
"actions": [
"CREATED",
"UPDATED",
"DELETED",
"PAID",
"STATUS_TO_FINAL",
"STATUS_UPDATED",
"STATUS_TO_VOID",
"SEND_BY_EMAIL",
"EXPORT_TO_ERP"
]
},
{ "object_type": "PAYMENT", "actions": ["CREATED", "UPDATED"] }
]
}

Subscribe to events

Pass the event names in included_actions when you create or update a webhook:

Subscribe to invoice and payment events
curl -X POST https://test.api.solvimon.com/v1/webhooks \
-H "X-API-KEY: <apiKey>" \
-H "Content-Type: application/json" \
-d '{
"name": "Billing events",
"reference": "billing-events",
"url": "https://example.com/webhooks/solvimon",
"included_actions": [
"INVOICE.STATUS_TO_FINAL",
"INVOICE.PAID",
"INVOICE.STATUS_TO_VOID",
"PAYMENT.CREATED",
"PAYMENT.UPDATED"
]
}'
Response (shortened)
{
"object_type": "WEBHOOK",
"id": "webh_NwDzWt0vKj4HpYFx6m1S",
"name": "Billing events",
"reference": "billing-events",
"url": "https://example.com/webhooks/solvimon",
"included_actions": [
"INVOICE.STATUS_TO_FINAL",
"INVOICE.PAID",
"INVOICE.STATUS_TO_VOID",
"PAYMENT.CREATED",
"PAYMENT.UPDATED"
],
"active": true
}

Sub-action events

These are the only events that are not CREATED, UPDATED or DELETED.

Invoice

EventWhen it fires
INVOICE.STATUS_TO_FINALThe invoice status changes to FINAL. Use this to send receipts or sync the invoice to your system.
INVOICE.STATUS_TO_VOIDThe invoice status changes to VOID.
INVOICE.STATUS_UPDATEDThe invoice status changes to FUTURE, OPEN, DRAFT, EMPTY or ARCHIVED. Changes to FINAL and VOID have their own events and do not fire this one.
INVOICE.PAIDThe invoice’s paid flag changes to true. This can fire together with STATUS_TO_FINAL.
INVOICE.SEND_BY_EMAILThe invoice is ready for your own system to email. Fires after finalization when all of these are true: the platform’s invoice_settings.send_by_email.trigger_type is AUTOMATIC. The customer’s notification preferences allow invoice emails. No active send-email workflow applies. Also fires every time someone sends a final invoice by email from Desk or with POST /v1/invoices/{id}/send_by_email.
INVOICE.EXPORT_TO_ERPThe invoice is ready for export to your ERP. Fires after finalization when invoice_settings.export_to_erp.trigger_type is AUTOMATIC. Also fires from an EXPORT_TO_ERP workflow action with a third-party executor. Also fires when someone exports a final invoice from Desk or with POST /v1/invoices/{id}/export_to_erp.

For SEND_BY_EMAIL and EXPORT_TO_ERP, data holds the invoice and previous_data is null. An EXPORT_TO_ERP event that a workflow sends also contains metadata with workflow_action_id, workflow_trigger_id and workflow_action_execution_id. Your integration can use these IDs to report the result back to that workflow execution.

INVOICE.UPDATED only fires when an invoice changes to FINAL, at the same moment as INVOICE.STATUS_TO_FINAL. Solvimon keeps it for existing integrations and will deprecate it. Subscribe to INVOICE.STATUS_TO_FINAL instead, and to the other sub-actions for the transitions you need.

Pricing plan schedule

EventWhen it fires
PRICING_PLAN_SCHEDULE.STATUS_UPDATEDA draft schedule is activated.
PRICING_PLAN_SCHEDULE.APPROVAL_STATUS_UPDATEDThe schedule’s approval status changes, for example when an approver approves or declines a price change.

Both also send PRICING_PLAN_SCHEDULE.UPDATED.

Quote version

EventWhen it fires
QUOTE_VERSION.SIGNATURE_REQUESTEDA signature request is created for the quote version.
QUOTE_VERSION.SIGNEDThe signature request is complete. Every recipient signed, or a user completed the request manually.

Both also send QUOTE_VERSION.UPDATED. SIGNED also sends SIGNATURE_REQUEST.UPDATED for the signature request itself.

File

EventWhen it fires
FILE.STATUS_UPDATEDThe status of a file changes, whether it was uploaded through the API or to a bucket. Also sends FILE.UPDATED.

Meter data

EventWhen it fires
METER_DATA.DUPLICATEAn ingested event is a duplicate of an earlier event with the same reference, so it is not billed.
METER_DATA.NOT_MATCHEDSolvimon did not match an ingested event to a subscription, schedule or price, so it does not bill the event. The reason is in data.processed_details.not_matched.variant. See Unbilled usage.

Replayed events do not send these. The API accepts METER_DATA.CREATED in included_actions, but Solvimon does not send it.

Usage limit threshold

Solvimon sends USAGE_LIMIT.THRESHOLD_REACHED when a usage-limit workflow with a SEND_WEBHOOK action crosses a threshold. Solvimon delivers it to the webhook that the action references, and ignores that webhook’s included_actions. It is not a valid included_actions value. data holds workflow_id, workflow_trigger_id, customer_id, parent_customer_id, meter_value_calculation_id, threshold, threshold_type, limit, consumed, period_start, period_end and triggered_at.

Example sub-action payload

This example shows an INVOICE.STATUS_TO_FINAL delivery with include_previous_data enabled. data and previous_data contain the full invoice in the same shape as GET /v1/invoices/{id}. The example is shortened.

INVOICE.STATUS_TO_FINAL
{
"created_at": "2026-10-01T00:15:02Z",
"type": "INVOICE.STATUS_TO_FINAL",
"original_request_id": null,
"environment": "TEST",
"previous_data": {
"object_type": "INVOICE",
"id": "invo_PwDkYv0xMn6KrAHz8p1V",
"status": "DRAFT",
"paid": false
},
"data": {
"object_type": "INVOICE",
"id": "invo_PwDkYv0xMn6KrAHz8p1V",
"status": "FINAL",
"paid": false
}
}

Object types and actions

C = CREATED, U = UPDATED, D = DELETED. Sub-actions are listed in Sub-action events.

Invoicing and payments

Object typeActionsFires when
INVOICEC, U, D + sub-actionsAn invoice is created or deleted. UPDATED only on finalization, see above.
PAYMENTC, UA payment attempt is made and when its result changes. There is no DELETED.
PAYMENT_METHODC, U, DA customer’s stored payment method changes.
PAYMENT_ACCEPTORC, U, DA payment acceptor changes.
BILLING_ENTITYC, U, DA billing entity changes.

Customers and subscriptions

Object typeActionsFires when
CUSTOMERC, U, DA customer changes.
CONTACTC, U, DA contact changes.
PRICING_PLAN_SUBSCRIPTIONC, U, DA subscription changes, including activation, cancellation, upgrade and voiding. These do not have their own events: compare status in data and previous_data.
PRICING_PLAN_SUBSCRIPTION_GROUPC, U, DA subscription group changes.
PRICING_PLAN_SCHEDULEC, U, D + sub-actionsA schedule changes.
SEAT_ASSIGNMENTC, U, DA seat is assigned, changed or removed.
USAGE_LIMITC, U, DA usage limit changes.

Quotes and approvals

Object typeActionsFires when
QUOTEC, U, DA quote changes.
QUOTE_VERSIONC, U, D + sub-actionsA quote version changes.
QUOTE_TEMPLATEC, U, DA quote template changes.
SIGNATURE_REQUESTC, UA signature request is created, and when a recipient acts on it or it is completed or voided.
APPROVAL_POLICYC, U, DAn approval policy changes.
APPROVAL_REQUESTC, U, DAn approval request is created or decided.
ATTACHMENTC, DAn attachment is added or removed.
DOCUMENTC, DA document is stored or removed.

Products and pricing

Object typeActionsFires when
PRODUCTC, U, DA product changes.
PRODUCT_ITEMC, U, DA product item changes.
PRODUCT_CATEGORYC, U, DA product category changes.
FEATUREC, U, DA feature changes.
PRICING_PLANC, U, DA pricing plan changes.
PRICING_PLAN_VERSIONC, U, DA pricing plan version changes.
PRICING_PLAN_GROUPC, U, DA pricing plan group changes.
COUPONC, U, DA coupon changes.
PROMOTION_CODEC, U, DA promotion code changes.
CUSTOM_FIELDC, U, DA custom field definition changes.

Usage metering

Object typeActionsFires when
METERC, U, DA meter changes.
METER_PROPERTYC, U, DA meter property changes.
METER_PROPERTY_VARIABLEC, U, DA meter property variable changes.
METER_VALUEC, U, DA meter value changes.
METER_VALUE_CALCULATIONC, U, DA meter value calculation changes.
METER_DATAsub-actions onlyAn ingested event is a duplicate or is not matched.
FILEC, U, D + sub-actionAn event file is created, changes or is deleted.
FILE_PROCESSING_SETTINGSC, U, DFile processing settings change.
REPROCESSC, UAn event reprocess is created and as it progresses.
ALERT_RULEC, U, DAn alert rule changes.
ALERTCAn alert rule raises an alert.

Wallets and credits

Object typeActionsFires when
WALLETC, U, DA wallet changes.
WALLET_TYPEC, U, DA wallet type changes.
CREDIT_TYPEC, U, DA credit type changes.
AUTO_TOPUP_CONFIGC, U, DAn automatic top-up configuration changes.

Workflows

Object typeActionsFires when
WORKFLOWC, U, DA workflow changes.
WORKFLOW_ACTIONC, U, DA workflow action changes.
WORKFLOW_TRIGGERCA workflow fires.
WORKFLOW_ACTION_EXECUTIONC, UA workflow action runs and when its status changes.

Reports and bulk actions

Object typeActionsFires when
REPORTCA report is generated.
REPORT_GENERATE_REQUESTC, UA report generation is requested and as it progresses.
REPORT_SUBSCRIPTIONC, UA report subscription changes.
REPORT_CONFIGURATIONC, UA report configuration changes.
REPORT_DEFINITIONC, UA report definition changes.
BULK_ACTIONC, UA bulk action is created and as it progresses.

Platform and integrations

Object typeActionsFires when
PLATFORMC, U, DYour platform settings change.
INTEGRATIONC, U, DAn integration changes.
WEBHOOKC, U, DA webhook configuration changes, including when Solvimon disables it after repeated failures.

GET /v1/webhooks/actions returns WALLET_GRANT, PAYMENT_SCHEDULE, PAYMENT_REQUEST and PORTAL_URL, and the API accepts them in included_actions. Solvimon does not send events for them yet.

Via Desk

In the Desk sidebar, go to Developers → Webhooks. When you create or edit a webhook, use Add included action and Add excluded action. Select an object type, and then select one or more of its actions. The lists come from GET /v1/webhooks/actions, so they always include every sub-action on this page.

Edge cases

  • Ordering across event names is not guaranteed. One change can produce several deliveries, for example INVOICE.STATUS_TO_FINAL, INVOICE.PAID and INVOICE.UPDATED. Process each one on its own and use data as the current state.
  • Duplicates are possible. Solvimon can retry or resend a delivery, so make your handler idempotent. For example, check the resource’s current state before you act.
  • Sub-actions are not implied. If you list only base actions, you will not receive transition events, and vice versa.
  • Old event names. INVOICE.FINALIZED, invoice.finalized and other lowercase names do not exist. Event names are always uppercase.