Receive credit webhook events

React to allowance and credit-capacity changes in an approved preview environment. You need a registered webhook endpoint and confirmation that credit events are enabled for your workspace.

Events

EventMeaning
isv.credits.allowance.changedA current or scheduled allowance changed
isv.credits.allowance.pausedThe current allowance was paused
isv.credits.allowance.resumedThe current allowance was resumed
isv.credits.allowance.expiredThe allowance period ended
isv.credits.company.thresholdCommitted company usage crossed 80% of its allowance
isv.credits.company.exhaustedCompany allowance availability reached zero
isv.credits.pool.lowPool availability crossed 20% or 10% remaining
isv.credits.pool.exhaustedPool availability reached zero
isv.credits.consumption.reversedFinalized consumption was reversed
isv.credits.bulk.completedA bulk allowance job finished, possibly with row errors

Committed usage includes finalized usage and active reservations. The 20% and 10% pool notifications are distinct events; do not combine their identifiers.

Read the payload

Example pool threshold eventjson
{
  "eventId": "isv-credit:example-pool-threshold-20",
  "data": {
    "id": "isv-credit:example-pool-threshold-20",
    "type": "isv.credits.pool.low",
    "timestamp": "2026-09-22T10:00:00.000Z",
    "data": {
      "schemaVersion": "1.0",
      "triggeringCompanyId": "66b9f0a1c2d3e4f567890123",
      "reservationId": "example-reservation-142",
      "totalCredits": 10000,
      "availableCredits": 1900,
      "percentageAvailable": 19,
      "thresholdPercent": 20,
      "amount": 25
    }
  }
}

The event-specific payload is inside data.data. schemaVersion identifies its version; ignore unknown optional fields.

The fields inside data.data depend on the event. Every payload has schemaVersion. Optional fields are marked; they can be missing.

Allowance events

isv.credits.allowance.changed, .paused, .resumed and .expired.

FieldMeaning
companyIdThe company whose allowance changed
actionWhat happened. See the list below.
allowanceThe allowance after the change. See the next table.
reasonThe reason recorded with the change
bulkJobIdOptional. The bulk job that made the change, if one did.
allowance fieldMeaning
targetcurrent or scheduled
limitThe allowance limit in credits
periodTypemonthly, annual or custom
allowancePeriodIdOptional. The allowance period
startAt, endAtWhen the period starts, and the moment just after it ends
statusactive, paused, scheduled, cancelled or expired
versionIncreases with every change. Use it to ignore an older event that arrives late.
finalizedUsage, reservedOptional. Credits used so far and credits held for submissions in progress

action is one of:

Eventaction values
isv.credits.allowance.changedcurrent.created, current.replaced, current.paused, current.resumed, scheduled.created, scheduled.replaced, scheduled.cancelled, scheduled.activated
isv.credits.allowance.pausedcurrent.paused
isv.credits.allowance.resumedcurrent.resumed
isv.credits.allowance.expiredcurrent.expired, scheduled.expired

Pausing or resuming sends two events: the specific one and isv.credits.allowance.changed. Handle them so that the second one changes nothing.

Example allowance replaced event (data.data)json
{
  "schemaVersion": "1.0",
  "companyId": "66b9f0a1c2d3e4f567890123",
  "action": "current.replaced",
  "allowance": {
    "target": "current",
    "limit": 5000,
    "periodType": "monthly",
    "allowancePeriodId": "example-period-2026-10",
    "startAt": "2026-10-01T00:00:00.000Z",
    "endAt": "2026-11-01T00:00:00.000Z",
    "status": "active",
    "version": 4
  },
  "reason": "Raised for October volume"
}

Company capacity events

isv.credits.company.threshold and isv.credits.company.exhausted.

FieldMeaning
companyIdThe company
allowancePeriodIdThe allowance period
reservationIdThe reservation that crossed the threshold
limitThe allowance limit
finalizedUsageCredits used
reservedCredits held for submissions in progress
committedUsagefinalizedUsage plus reserved
availableCredits left in the allowance
percentageUsedcommittedUsage as a percentage of limit
thresholdPercent80. Threshold event only.
amountThe credits the triggering reservation held

Pool events

isv.credits.pool.low and isv.credits.pool.exhausted. The example above is a pool event.

FieldMeaning
triggeringCompanyIdOptional. The company whose usage crossed the level
reservationIdOptional. The reservation that crossed it
totalCreditsCredits in the pool
availableCreditsCredits not used or held
percentageAvailableavailableCredits as a percentage of totalCredits
thresholdPercent20 or 10. Low event only.
amountThe credits the triggering reservation held

Consumption reversed

isv.credits.consumption.reversed.

FieldMeaning
companyIdThe company
reservationId, transactionIdThe reversal
originalTransactionIdThe consumption that was reversed
allowancePeriodIdThe allowance period the credits return to
amountCredits returned
reasonWhy the consumption was reversed
restorePooltrue when the credits also return to the pool
countryCode, documentTypeThe document the consumption was for
balanceBefore, balanceAftercompanyAvailable and poolAvailable before and after the reversal
Example consumption reversed event (data.data)json
{
  "schemaVersion": "1.0",
  "companyId": "66b9f0a1c2d3e4f567890123",
  "reservationId": "example-reservation-143",
  "transactionId": "example-transaction-981",
  "originalTransactionId": "example-transaction-977",
  "allowancePeriodId": "example-period-2026-10",
  "amount": 12,
  "reason": "Submission did not complete",
  "restorePool": true,
  "countryCode": "AE",
  "documentType": "tax_invoice",
  "balanceBefore": { "companyAvailable": 488, "poolAvailable": 1888 },
  "balanceAfter": { "companyAvailable": 500, "poolAvailable": 1900 }
}

Bulk completed

isv.credits.bulk.completed.

FieldMeaning
jobIdThe bulk allowance job
statuscompleted, or completed_with_errors when some rows failed
totalstotal, processed, succeeded and failed row counts
completedAtWhen the job finished

Retrieve the job to see which rows failed and why.

Who can subscribe

Owners, Admins and Partners can create, change and delete webhook subscriptions, including those for credit events. Other roles get You do not have permission to perform this action. In the event picker, credit events are under ISV Credit Management. See Set up a webhook.

Handle delivery safely

Follow the shared signature verification and delivery guide. Verify the signature using the raw request body, store the event durably, and acknowledge with 2xx before doing slow work.

Deduplicate using eventId, also sent in X-Webhook-ID. Repeated delivery must not repeat a customer notification or change your recorded balance twice. Events can arrive out of order; compare timestamps and allowance versions before replacing newer state.

Reconcile missed events

Use transaction reads or a credit export to reconcile activity in the confirmed environment. There is no partner-facing event replay API. A webhook delivery issue does not justify applying a new allowance change to recreate an event.

Next, use the credit API preview to read the relevant company or bulk job.