---
title: "Event delivery"
method: POST
path: "event"
tags: ["Webhooks"]
---

# Event delivery

`POST event` (webhook)

Sent to your webhook URL for each event, in order. Verify the `webhook-signature` header against
the raw body before trusting it, and ignore a `webhook-id` you have already processed.

## Payload

- EventDelivery: The body of each POST to your webhook URL.
  - `data` union, required: The event, exactly as GET /event returns it.
    - SubscribedEvent: A new holding subscription was placed.
      - `cost` string, decimal, required: Principal amount invested in the holding's currency.
      - `currency` string, required: Three-letter currency code for the holding.
      - `cursor` string, required: Opaque pagination token for this event. Pass as start_cursor on the next request to retrieve events that occurred after this one.
      - `entityCode` string, required: Code identifying the organisation (client) this event belongs to.
      - `eventType` 'SUBSCRIBED', required
      - `ftfType` string, nullable: `Fixed` or `Extendable`, as `type` on GET /holding. Null on events recorded before this field was added.
      - `holdingUid` string, required: Unique identifier of the holding.
      - `maturityDate` string, required: Date (YYYY-MM-DD) the holding is scheduled to mature.
      - `maturityValue` string, decimal, required: Expected or actual maturity value (principal plus interest) in the holding's currency.
      - `obligorExposureCode` string, required: Code identifying the obligor exposure (counterparty) for this holding.
      - `productCode` string, required: Identifier of the product this holding is in.
      - `subscriptionDate` string, required: Date (YYYY-MM-DD) the holding starts, when it is due to be funded and issued. For a rolled holding, the previous holding's maturity date. TreasurySpring can change this and maturityDate without a new event (for example when cash arrives late); the ISSUED event carries the issue date and final maturity date, and GET /holding always has the current dates.
      - `subscriptionUid` string, required: Unique identifier of the subscription. For a rolled or switched holding, this matches the subscriptionUid on the previous holding's ROLL or SWITCH maturity action.
      - `uid` string, required: Unique identifier for this event record.
      - `yield` string, decimal, required: Current yield for the holding at the time of the event (annualised APY).
    - IssuedEvent: A holding was issued (moved from subscription to active).
      - `cost` string, decimal, required: Principal amount invested in the holding's currency.
      - `currency` string, required: Three-letter currency code for the holding.
      - `cursor` string, required: Opaque pagination token for this event. Pass as start_cursor on the next request to retrieve events that occurred after this one.
      - `entityCode` string, required: Code identifying the organisation (client) this event belongs to.
      - `eventType` 'ISSUED', required
      - `ftfType` string, nullable: `Fixed` or `Extendable`, as `type` on GET /holding. Null on events recorded before this field was added.
      - `holdingUid` string, required: Unique identifier of the holding.
      - `issueDate` string, required: Date (YYYY-MM-DD) the holding was issued.
      - `maturityDate` string, required: Date (YYYY-MM-DD) the holding is scheduled to mature.
      - `maturityValue` string, decimal, required: Expected or actual maturity value (principal plus interest) in the holding's currency.
      - `obligorExposureCode` string, required: Code identifying the obligor exposure (counterparty) for this holding.
      - `pricePerShare` string, decimal, nullable: Price per share at issue, always 1. Null on events recorded before this field was added.
      - `productCode` string, required: Identifier of the product this holding is in.
      - `subscriptionUid` string, required: Unique identifier of the subscription.
      - `uid` string, required: Unique identifier for this event record.
      - `yield` string, decimal, required: Current yield for the holding at the time of the event (annualised APY).
    - SplitEvent: A holding was split into two separate holdings.
      - `cost` string, decimal, required: Remaining principal amount on the original holding after the split.
      - `currency` string, required: Three-letter currency code for the holding.
      - `cursor` string, required: Opaque pagination token for this event. Pass as start_cursor on the next request to retrieve events that occurred after this one.
      - `entityCode` string, required: Code identifying the organisation (client) this event belongs to.
      - `eventType` 'SPLIT', required
      - `holdingUid` string, required: Unique identifier of the original holding.
      - `maturityValue` string, decimal, required: Expected or actual maturity value (principal plus interest) in the holding's currency.
      - `obligorExposureCode` string, required: Code identifying the obligor exposure (counterparty) for this holding.
      - `splitCost` string, decimal, required: Principal amount assigned to the new holding created by the split.
      - `splitHoldingUid` string, required: Unique identifier of the new holding created by the split. The new holding has no SUBSCRIBED or ISSUED event of its own and carries the original holding's subscriptionUid; fetch it with GET /holding/{entity_code}/{splitHoldingUid}.
      - `uid` string, required: Unique identifier for this event record.
      - `yield` string, decimal, required: Current yield for the holding at the time of the event (annualised APY).
    - ExtendedEvent: A holding's maturity date was extended.
      - `currency` string, required: Three-letter currency code for the holding.
      - `cursor` string, required: Opaque pagination token for this event. Pass as start_cursor on the next request to retrieve events that occurred after this one.
      - `entityCode` string, required: Code identifying the organisation (client) this event belongs to.
      - `eventType` 'EXTENDED', required
      - `extensionOptionDate` string, nullable: The holding's next extension option date (YYYY-MM-DD) after the extension, as GET /holding returns it. Null if none applies. Events recorded before 7 October 2026, including backfilled history, carry previousExtensionOptionDate here instead; read the next option date from GET /holding for those.
      - `holdingUid` string, required: Unique identifier of the holding.
      - `maturityDate` string, required: Updated maturity date (YYYY-MM-DD) after the extension.
      - `maturityValue` string, decimal, required: Expected or actual maturity value (principal plus interest) in the holding's currency.
      - `obligorExposureCode` string, required: Code identifying the obligor exposure (counterparty) for this holding.
      - `previousExtensionOptionDate` string, nullable: Extension option date (YYYY-MM-DD) before the change. Null if none was previously set.
      - `previousMaturityDate` string, required: Maturity date (YYYY-MM-DD) before the extension.
      - `pricePerShare` string, decimal, nullable: Price per share at the start of the new extension period, accrued from the earlier periods' yields. GET /holding/{entity_code}/{holding_uid}/extension returns the same value for this extension. Null on events recorded before this field was added.
      - `uid` string, required: Unique identifier for this event record.
      - `yield` string, decimal, required: Current yield for the holding at the time of the event (annualised APY).
    - FinalizedEvent: An extendable holding entered its final period: it will not extend again, and REDEEMED follows at maturity.
      - `currency` string, required: Three-letter currency code for the holding.
      - `cursor` string, required: Opaque pagination token for this event. Pass as start_cursor on the next request to retrieve events that occurred after this one.
      - `entityCode` string, required: Code identifying the organisation (client) this event belongs to.
      - `eventType` 'FINALIZED', required
      - `finalized` boolean, required: Always true — the holding is in its final period.
      - `holdingUid` string, required: Unique identifier of the holding.
      - `maturityDate` string, required: Date (YYYY-MM-DD) the holding will mature at the end of its final period.
      - `maturityValue` string, decimal, required: Expected or actual maturity value (principal plus interest) in the holding's currency.
      - `obligorExposureCode` string, required: Code identifying the obligor exposure (counterparty) for this holding.
      - `pricePerShare` string, decimal, nullable: Price per share at the start of the final period. Null on events recorded before this field was added.
      - `uid` string, required: Unique identifier for this event record.
      - `yield` string, decimal, required: Current yield for the holding at the time of the event (annualised APY).
    - AdjustedEvent: One or more holding attributes were amended.
      - `cost` string, decimal, required: Updated principal amount in the holding's currency.
      - `currency` string, required: Three-letter currency code for the holding.
      - `cursor` string, required: Opaque pagination token for this event. Pass as start_cursor on the next request to retrieve events that occurred after this one.
      - `entityCode` string, required: Code identifying the organisation (client) this event belongs to.
      - `eventType` 'ADJUSTED', required
      - `holdingUid` string, required: Unique identifier of the holding.
      - `maturityDate` string, required: Updated maturity date (YYYY-MM-DD).
      - `maturityValue` string, decimal, required: Expected or actual maturity value (principal plus interest) in the holding's currency.
      - `obligorExposureCode` string, required: Code identifying the obligor exposure (counterparty) for this holding.
      - `previousMaturityDate` string, required: Maturity date (YYYY-MM-DD) before the amendment.
      - `previousMaturityValue` string, decimal, required: Expected maturity value before the amendment.
      - `previousSubscriptionDate` string, required: Subscription date (YYYY-MM-DD) before the amendment.
      - `subscriptionDate` string, required: Updated subscription date (YYYY-MM-DD).
      - `uid` string, required: Unique identifier for this event record.
      - `yield` string, decimal, required: Current yield for the holding at the time of the event (annualised APY).
    - CurrencyConvertedEvent: Cash was converted from one currency to another.
      - `cursor` string, required: Opaque pagination token for this event. Pass as start_cursor on the next request to retrieve events that occurred after this one.
      - `entityCode` string, required: Code identifying the organisation (client) this event belongs to.
      - `eventType` 'CURRENCY_CONVERTED', required
      - `fromAmount` string, decimal, required: Amount in the source currency before conversion.
      - `fromCurrency` string, required: Source currency code.
      - `fxRate` string, decimal, required: Exchange rate applied in the conversion.
      - `toAmount` string, decimal, required: Amount in the target currency after conversion.
      - `toCurrency` string, required: Target currency code.
      - `uid` string, required: Unique identifier for this event record.
    - CashMovedEvent: The entity's available cash in a cell changed: a deposit, a withdrawal request, or a withdrawal returned.
      - `amount` string, decimal, required: Signed change to available cash. Positive: a deposit recorded by TreasurySpring, or the cash of a declined or cancelled withdrawal being returned. Negative: a withdrawal request setting the cash aside; no further event is emitted when it is paid out. Maturity proceeds (see REDEEMED) and cash used to fund a subscription (see ISSUED) do not produce this event.
      - `currency` string, required: Three-letter currency code for the cash movement.
      - `cursor` string, required: Opaque pagination token for this event. Pass as start_cursor on the next request to retrieve events that occurred after this one.
      - `entityCode` string, required: Code identifying the organisation (client) this event belongs to.
      - `eventType` 'CASH_MOVED', required
      - `holdingUid` string, nullable: Unique identifier of the Cash holding whose balance changed. An entity has one Cash holding per cell and currency, so GET /holding/{entity_code}/{holdingUid} gives the cellCode. Always present.
      - `uid` string, required: Unique identifier for this event record.
    - RedeemedEvent: A holding was redeemed at maturity. Emitted for every maturing holding, whatever its maturity action: the proceeds may be paid out, held as cash in the cell, or reinvested by a roll.
      - `cost` string, decimal, required: Principal amount that was invested.
      - `currency` string, required: Three-letter currency code for the holding.
      - `cursor` string, required: Opaque pagination token for this event. Pass as start_cursor on the next request to retrieve events that occurred after this one.
      - `entityCode` string, required: Code identifying the organisation (client) this event belongs to.
      - `eventType` 'REDEEMED', required
      - `fxCurrency` string, nullable: Currency in which the redemption proceeds were paid out, when this differs from the holding's currency (FX redemption). Null for standard same-currency redemptions.
      - `fxValue` string, decimal, nullable: Amount being redeemed into fxCurrency, in the holding's currency. The converted amount is reported by the CURRENCY_CONVERTED event. Null for standard same-currency redemptions.
      - `holdingUid` string, required: Unique identifier of the holding.
      - `maturityValue` string, decimal, required: Expected or actual maturity value (principal plus interest) in the holding's currency.
      - `obligorExposureCode` string, required: Code identifying the obligor exposure (counterparty) for this holding.
      - `uid` string, required: Unique identifier for this event record.
      - `yield` string, decimal, required: Current yield for the holding at the time of the event (annualised APY).
    - CancelledEvent: A previously issued holding was cancelled. A pending holding that is cancelled, for example because its funding never arrived, emits no event.
      - `cost` string, decimal, required: Principal amount that was invested in the cancelled holding.
      - `currency` string, required: Three-letter currency code for the holding.
      - `cursor` string, required: Opaque pagination token for this event. Pass as start_cursor on the next request to retrieve events that occurred after this one.
      - `entityCode` string, required: Code identifying the organisation (client) this event belongs to.
      - `eventType` 'CANCELLED', required
      - `holdingUid` string, required: Unique identifier of the cancelled holding.
      - `uid` string, required: Unique identifier for this event record.
  - `type` string, required: `event.` followed by the lower-cased eventType.

## Acknowledgement `200`

Any 2xx within 10 seconds counts as delivered

- unknown

## Other responses

- `410`: Stops delivery to this webhook

---

[API](https://skmtc.dev/treasuryspring/apis/treasuryspring-public-api.md) - [All operations](https://skmtc.dev/treasuryspring/apis/treasuryspring-public-api/llms.txt) - [OpenAPI document](https://skmtc.dev/treasuryspring/apis/treasuryspring-public-api/revisions/ca7be51b723d?raw)
