> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.thepennyinc.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.thepennyinc.com/_mcp/server.

# transaction.created

POST 

Sent when a `transaction.created` event occurs.

Reference: https://docs.thepennyinc.com/banking/api-reference/webhook-payloads/transaction/transaction-created-webhook

## Request

### Payload

- `event_id` (string, required) — Penny's unique identifier for this notification event.
- `business_id` (string, required) — The business the event belongs to. When the event originated from a different business, this contains the originating business.
- `type` ("transaction.created", required) — The notification event type. This identifies the specific occurrence represented by the event and determines how its data should be interpreted.
- `category` ("object", required) — The category of the event payload. This groups related notification event types and describes the general kind of data contained in ``data``.
- `schema_version` ("1.0", required) — The version of the JSON notification event schema used to encode this webhook payload.
- `event_time` (datetime, required) — The date and time Penny generated the notification event.
- `occurrence_time` (datetime, required) — The date and time the underlying occurrence represented by this notification event took place.
- `data` (WebhooksTransactionCreatedWebhookPayloadContentApplicationJsonSchemaData, required) — A notification about a domain object being created, updated, or deleted.

## Types

### WebhooksTransactionCreatedWebhookPayloadContentApplicationJsonSchemaData

A notification about a domain object being created, updated, or deleted.

- `operation` (enum, required) — The change that produced this event: 'created', 'updated', or 'deleted'.
  - Allowed values: `created`, `updated`, `deleted`
- `subject` (ObjectReferenceResponse, required) — The object this event concerns.
- `category` ("object", optional, default: object) — Identifies this payload as an object change.
- `object` (WebhooksTransactionCreatedWebhookPayloadContentApplicationJsonSchemaDataObject, optional)
- `previous_attributes` (map from string to any, optional, nullable) — The object's attributes before this change, if included.

### ObjectReferenceResponse

A pointer to the object this event concerns.

- `object_type` (string, required) — The kind of object this event concerns.
- `object_id` (string, required) — The unique identifier of the object this event concerns.
- `version` (integer, optional, nullable) — The object's version at the time of this event, if known.
- `stage` (integer, optional, nullable) — The object's lifecycle stage at the time of this event, if applicable.

### WebhooksTransactionCreatedWebhookPayloadContentApplicationJsonSchemaDataObject

- TransactionWebhookPayload: TransactionWebhookPayload
- TransactionWebhookPayload: TransactionWebhookPayload

### TransactionWebhookPayload

The event Penny sends to your webhook endpoint when a transaction changes. Bundles the current state of the transaction together with the event that triggered this notification, so you can update your records and react to the change in a single call.

- `transaction` (TransactionClientAPIResponse, required) — The current state of the transaction associated with this webhook event.
- `event` (TransactionEventClientAPIResponse, required) — The event that triggered this webhook notification.

### TransactionClientAPIResponse

The client-facing representation of a transaction.

- `transaction_id` (string, required) — The unique identifier Penny assigns to this transaction.
- `account_id` (string, required) — The unique identifier of the account affected by this transaction.
- `business_id` (string, required) — The unique identifier of the business this transaction belongs to.
- `business_entity_id` (string, required) — The unique identifier of the business entity this transaction belongs to.
- `program_id` (string, required) — The unique identifier of the program this transaction belongs to.
- `version` (integer, required) — The revision number within the current processing stage. It starts at 1 when the transaction enters a stage and increases when the record is updated without advancing to the next stage.
- `version_time` (datetime, required) — The date and time this revision was recorded.
- `stage` (integer, required) — The transaction's processing step number. It increases when a new event advances the transaction through its lifecycle.
- `stage_time` (datetime, required) — The date and time the transaction entered its current stage.
- `status` (enum, required) — The current lifecycle status of the transaction.
  - Allowed values: `created`, `declined`, `approved`, `cancelled`, `expired`, `partially_settled`, `settled`, `reversed`, `failed`, `deprecated`
- `direction` (enum, required) — Whether funds move into (`inbound`) or out of (`outbound`) the account.
  - Allowed values: `inbound`, `outbound`
- `type` (enum, required) — The client-visible category of the transaction.
  - Allowed values: `payment`, `transfer`
- `base_amount` (string, required) — The transaction amount in the account's settlement currency.
- `base_amount_currency` (enum, required) — The three-letter ISO 4217 currency code of the settlement amount.
  - Allowed values: `USD`
- `channel` (TransactionClientApiResponseChannel, required) — How the transaction was conducted.
- `counterparty` (TransactionClientApiResponseCounterparty, required) — The party on the opposite side of the transaction.
- `message` (string, optional, nullable) — Additional context about the current status, when available.
- `client_reference` (string, optional, nullable) — Your own reference for this transaction, as supplied when the underlying movement was initiated. Penny stores it and never interprets it, and it can be used to look this transaction up. Present only where a reference was supplied.
- `original_amount` (string, optional, nullable) — The amount in the currency in which the transaction was presented. Present when that currency differs from the settlement currency.
- `original_amount_currency` (enum, optional, nullable) — The three-letter ISO 4217 currency code of the presented amount. Present together with `original_amount`.
  - Allowed values: `AFN`, `EUR`, `ALL`, `DZD`, `USD`, `AOA`, `XCD`, `XAD`, `ARS`, `AMD`, `AWG`, `AUD`, `AZN`, `BSD`, `BHD`, `BDT`, `BBD`, `BYN`, `BZD`, `XOF`, `BMD`, `INR`, `BTN`, `BOB`, `BOV`, `BAM`, `BWP`, `NOK`, `BRL`, `BND`, `BIF`, `CVE`, `KHR`, `XAF`, `CAD`, `KYD`, `CLP`, `CLF`, `CNY`, `COP`, `COU`, `KMF`, `CDF`, `NZD`, `CRC`, `CUP`, `XCG`, `CZK`, `DKK`, `DJF`, `DOP`, `EGP`, `SVC`, `ERN`, `SZL`, `ETB`, `FKP`, `FJD`, `XPF`, `GMD`, `GEL`, `GHS`, `GIP`, `GTQ`, `GBP`, `GNF`, `GYD`, `HTG`, `HNL`, `HKD`, `HUF`, `ISK`, `IDR`, `XDR`, `IRR`, `IQD`, `ILS`, `JMD`, `JPY`, `JOD`, `KZT`, `KES`, `KPW`, `KRW`, `KWD`, `KGS`, `LAK`, `LBP`, `LSL`, `ZAR`, `LRD`, `LYD`, `CHF`, `MOP`, `MKD`, `MGA`, `MWK`, `MYR`, `MVR`, `MRU`, `MUR`, `XUA`, `MXN`, `MXV`, `MDL`, `MNT`, `MAD`, `MZN`, `MMK`, `NAD`, `NPR`, `NIO`, `NGN`, `OMR`, `PKR`, `PAB`, `PGK`, `PYG`, `PEN`, `PHP`, `PLN`, `QAR`, `RON`, `RUB`, `RWF`, `SHP`, `WST`, `STN`, `SAR`, `RSD`, `SCR`, `SLE`, `SGD`, `XSU`, `SBD`, `SOS`, `SSP`, `LKR`, `SDG`, `SRD`, `SEK`, `CHE`, `CHW`, `SYP`, `TWD`, `TJS`, `TZS`, `THB`, `TOP`, `TTD`, `TND`, `TRY`, `TMT`, `UGX`, `UAH`, `AED`, `USN`, `UYU`, `UYI`, `UYW`, `UZS`, `VUV`, `VES`, `VED`, `VND`, `YER`, `ZMW`, `ZWG`, `XBA`, `XBB`, `XBC`, `XBD`, `XTS`, `XXX`, `XAU`, `XPD`, `XPT`, `XAG`, `CNH`, `SLL`

### TransactionEventClientAPIResponse

A client-facing transaction lifecycle event and its balance effect.

- `transaction_event_id` (string, required) — The unique identifier Penny assigns to this transaction event.
- `transaction_id` (string, required) — The unique identifier of the transaction this event belongs to.
- `business_id` (string, required) — The unique identifier of the business this event belongs to.
- `timestamp` (datetime, required) — The date and time this event occurred.
- `identifier` (enum, required) — The lifecycle change recorded by this event.
  - Allowed values: `transaction.created`, `transaction.request.approved`, `transaction.request.declined`, `transaction.approved`, `transaction.declined`, `transaction.adjustment`, `transaction.cancelled`, `transaction.expired`, `transaction.settled`, `transaction.failed`, `transaction.deprecated`
- `direction` (enum, required) — Whether this event belongs to an inbound or outbound transaction. Use the signed balance-change fields for its precise balance effect.
  - Allowed values: `inbound`, `outbound`
- `base_amount` (string, required) — The event amount in the account's settlement currency.
- `base_amount_currency` (enum, required) — The three-letter ISO 4217 currency code of the settlement amount.
  - Allowed values: `USD`
- `available_balance_change` (string, required) — The signed change this event applied to the account's available balance. Positive values add funds; negative values deduct funds.
- `total_balance_change` (string, required) — The signed change this event applied to the account's total balance. Positive values add funds; negative values deduct funds.
- `original_amount` (string, optional, nullable) — The event amount in the currency in which it was presented. Present when that currency differs from the settlement currency.
- `original_amount_currency` (enum, optional, nullable) — The three-letter ISO 4217 currency code of the presented amount. Present together with `original_amount`.
  - Allowed values: `AFN`, `EUR`, `ALL`, `DZD`, `USD`, `AOA`, `XCD`, `XAD`, `ARS`, `AMD`, `AWG`, `AUD`, `AZN`, `BSD`, `BHD`, `BDT`, `BBD`, `BYN`, `BZD`, `XOF`, `BMD`, `INR`, `BTN`, `BOB`, `BOV`, `BAM`, `BWP`, `NOK`, `BRL`, `BND`, `BIF`, `CVE`, `KHR`, `XAF`, `CAD`, `KYD`, `CLP`, `CLF`, `CNY`, `COP`, `COU`, `KMF`, `CDF`, `NZD`, `CRC`, `CUP`, `XCG`, `CZK`, `DKK`, `DJF`, `DOP`, `EGP`, `SVC`, `ERN`, `SZL`, `ETB`, `FKP`, `FJD`, `XPF`, `GMD`, `GEL`, `GHS`, `GIP`, `GTQ`, `GBP`, `GNF`, `GYD`, `HTG`, `HNL`, `HKD`, `HUF`, `ISK`, `IDR`, `XDR`, `IRR`, `IQD`, `ILS`, `JMD`, `JPY`, `JOD`, `KZT`, `KES`, `KPW`, `KRW`, `KWD`, `KGS`, `LAK`, `LBP`, `LSL`, `ZAR`, `LRD`, `LYD`, `CHF`, `MOP`, `MKD`, `MGA`, `MWK`, `MYR`, `MVR`, `MRU`, `MUR`, `XUA`, `MXN`, `MXV`, `MDL`, `MNT`, `MAD`, `MZN`, `MMK`, `NAD`, `NPR`, `NIO`, `NGN`, `OMR`, `PKR`, `PAB`, `PGK`, `PYG`, `PEN`, `PHP`, `PLN`, `QAR`, `RON`, `RUB`, `RWF`, `SHP`, `WST`, `STN`, `SAR`, `RSD`, `SCR`, `SLE`, `SGD`, `XSU`, `SBD`, `SOS`, `SSP`, `LKR`, `SDG`, `SRD`, `SEK`, `CHE`, `CHW`, `SYP`, `TWD`, `TJS`, `TZS`, `THB`, `TOP`, `TTD`, `TND`, `TRY`, `TMT`, `UGX`, `UAH`, `AED`, `USN`, `UYU`, `UYI`, `UYW`, `UZS`, `VUV`, `VES`, `VED`, `VND`, `YER`, `ZMW`, `ZWG`, `XBA`, `XBB`, `XBC`, `XBD`, `XTS`, `XXX`, `XAU`, `XPD`, `XPT`, `XAG`, `CNH`, `SLL`
- `reason` (string, optional, nullable) — Additional context about why this event occurred, when available.

### TransactionClientApiResponseChannel

How the transaction was conducted.

- ClientCardChannel: ClientCardChannel
- ClientInternalChannel: ClientInternalChannel
- ClientBankChannel: ClientBankChannel

### TransactionClientApiResponseCounterparty

The party on the opposite side of the transaction.

- ClientCardCounterParty: ClientCardCounterParty
- ClientTransferCounterParty: ClientTransferCounterParty
- ClientBusinessCounterParty: ClientBusinessCounterParty

### ClientCardChannel

A transaction made with a Penny-issued card.

- `card_id` (string, required) — The unique identifier of the card used for this transaction.
- `cardholder_id` (string, required) — The unique identifier of the cardholder who used the card.
- `processing_details` (ClientCardProcessingDetails, required) — Details about how the card payment was initiated and processed.
- `scheme_details` (ClientCardSchemeDetails, required) — Client-relevant attributes supplied by the card network.
- `type` ("card", optional, default: card) — Identifies this channel as a card transaction.

### ClientInternalChannel

A transaction conducted between two Penny-managed accounts.

- `type` ("internal", optional, default: internal) — Identifies this channel as an internal transfer.

### ClientBankChannel

A transaction conducted through a linked external bank account, such as an incoming ACH credit.

- `linked_account_id` (string, required) — The unique identifier of the linked account involved in the transaction.
- `type` ("bank", optional, default: bank) — Identifies this channel as a bank transaction.

### ClientCardCounterParty

The merchant and acquirer involved in a card transaction.

- `merchant` (Merchant, required) — The merchant associated with the card transaction.
- `acquirer` (ClientAcquirerDetails, required) — The acquiring bank that processed the payment for the merchant.
- `type` ("card", optional, default: card) — Identifies this counterparty as a card merchant.

### ClientTransferCounterParty

The other Penny-managed account involved in an internal transfer.

- `account_id` (string, required) — The unique identifier of the account on the other side of the transfer.
- `type` ("transfer", optional, default: transfer) — Identifies this counterparty as an internal transfer account.

### ClientBusinessCounterParty

The receiving or sending business involved in a transaction.

- `business_id` (string, required) — The unique identifier of the counterparty business.
- `business_entity_id` (string, required) — The unique identifier of the counterparty business entity.
- `business_name` (string, required) — The display name of the counterparty business.
- `type` ("business", optional, default: business) — Identifies this counterparty as a business.

### ClientCardProcessingDetails

Client-relevant details about how a card payment was processed.

- `card_product_id` (string, required) — The unique identifier of the product under which the card was issued.
- `pan_entry_mode` (string, optional, nullable) — How the card details were provided, such as by contactless tap, chip, or manual entry.
- `type` (string, optional, nullable) — The payment environment, such as e-commerce or point of service.
- `card_class` (string, optional, nullable) — The card classification, such as consumer or commercial.

### ClientCardSchemeDetails

Client-relevant card-network attributes for a payment.

- `network` (string, required) — The card network that processed the payment.
- `funding_type` (string, optional, nullable) — How the card is funded, such as prepaid, debit, or credit.
- `product_type` (string, optional, nullable) — The network's product category, such as consumer or corporate.

### Merchant

External representation of a merchant associated with a transaction.

- `merchant_id` (string, required) — The card network's own merchant identifier, reported on the transaction at authorization time.
- `code` (string, required) — Four-digit merchant category code (MCC).
- `name` (string, required) — Display name of the merchant.
- `category` (string, optional, nullable) — Merchant category description.
- `city` (string, optional, nullable) — City where the merchant is located.
- `country` (enum, optional, nullable) — ISO 3166-1 alpha-2 country code of the merchant location.
  - Allowed values: `AW`, `AF`, `AO`, `AI`, `AX`, `AL`, `AD`, `AE`, `AR`, `AM`, `AS`, `AQ`, `TF`, `AG`, `AU`, `AT`, `AZ`, `BI`, `BE`, `BJ`, `BQ`, `BF`, `BD`, `BG`, `BH`, `BS`, `BA`, `BL`, `BY`, `BZ`, `BM`, `BO`, `BR`, `BB`, `BN`, `BT`, `BV`, `BW`, `CF`, `CA`, `CC`, `CH`, `CL`, `CN`, `CI`, `CM`, `CD`, `CG`, `CK`, `CO`, `KM`, `CV`, `CR`, `CU`, `CW`, `CX`, `KY`, `CY`, `CZ`, `DE`, `DJ`, `DM`, `DK`, `DO`, `DZ`, `EC`, `EG`, `ER`, `EH`, `ES`, `EE`, `ET`, `FI`, `FJ`, `FK`, `FR`, `FO`, `FM`, `GA`, `GB`, `GE`, `GG`, `GH`, `GI`, `GN`, `GP`, `GM`, `GW`, `GQ`, `GR`, `GD`, `GL`, `GT`, `GF`, `GU`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IM`, `IN`, `IO`, `IE`, `IR`, `IQ`, `IS`, `IL`, `IT`, `JM`, `JE`, `JO`, `JP`, `KZ`, `KE`, `KG`, `KH`, `KI`, `KN`, `KR`, `KW`, `LA`, `LB`, `LR`, `LY`, `LC`, `LI`, `LK`, `LS`, `LT`, `LU`, `LV`, `MO`, `MF`, `MA`, `MC`, `MD`, `MG`, `MV`, `MX`, `MH`, `MK`, `ML`, `MT`, `MM`, `ME`, `MN`, `MP`, `MZ`, `MR`, `MS`, `MQ`, `MU`, `MW`, `MY`, `YT`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NU`, `NL`, `NO`, `NP`, `NR`, `NZ`, `OM`, `PK`, `PA`, `PN`, `PE`, `PH`, `PW`, `PG`, `PL`, `PR`, `KP`, `PT`, `PY`, `PS`, `PF`, `QA`, `RE`, `RO`, `RU`, `RW`, `SA`, `SD`, `SN`, `SG`, `GS`, `SH`, `SJ`, `SB`, `SL`, `SV`, `SM`, `SO`, `PM`, `RS`, `SS`, `ST`, `SR`, `SK`, `SI`, `SE`, `SZ`, `SX`, `SC`, `SY`, `TC`, `TD`, `TG`, `TH`, `TJ`, `TK`, `TM`, `TL`, `TO`, `TT`, `TN`, `TR`, `TV`, `TW`, `TZ`, `UG`, `UA`, `UM`, `UY`, `US`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `YE`, `ZA`, `ZM`, `ZW`
- `subdivision` (string, optional, nullable) — ISO 3166-2 subdivision code of the merchant location (e.g. 'US-CA').
- `zip_code` (string, optional, nullable) — Postal or ZIP code of the merchant location.

### ClientAcquirerDetails

The acquiring bank that processed a card payment for the merchant.

- `id` (string, required) — The unique identifier of the acquiring bank.
- `name` (string, optional, nullable) — The name of the acquiring bank, when available.