Payment Initiation (UK and Europe)
API reference for Payment Initiation endpoints and webhooks
Make payment transfers from your app. Plaid supports both domestic payments denominated in local currencies and international payments, generally denominated in Euro. Domestic payments can be made in pound sterling (typically via the Faster Payments network), Euro (via SEPA Credit Transfer or SEPA Instant) and other local currencies (Polish Zloty, Danish Krone, Swedish Krona, Norwegian Krone), typically via local payment schemes.
For payments in the US, see Transfer.
Looking for guidance on how to integrate using these endpoints? Check out the Payment Initiation documentation.
Endpoints | |
---|---|
/payment_initiation/recipient/create | Create a recipient |
/payment_initiation/recipient/get | Fetch recipient data |
/payment_initiation/recipient/list | List all recipients |
/payment_initiation/payment/create | Create a payment |
/payment_initiation/payment/get | Fetch a payment |
/payment_initiation/payment/list | List all payments |
/payment_initiation/payment/reverse | Refund a payment from a virtual account |
/payment_initiation/consent/create | Create a payment consent |
/payment_initiation/consent/get | Fetch a payment consent |
/payment_initiation/consent/revoke | Revoke a payment consent |
/payment_initiation/consent/payment/execute | Execute a payment using payment consent |
Users will be prompted to authorise the payment once you initialise Link. See /link/token/create
for more information on how to obtain a payments link_token
.
Webhooks | |
---|---|
PAYMENT_STATUS_UPDATE | The status of a payment has changed |
Endpoints
/payment_initiation/recipient/create
Create payment recipient
Create a payment recipient for payment initiation. The recipient must be in Europe, within a country that is a member of the Single Euro Payment Area (SEPA) or a non-Eurozone country supported by Plaid. For a standing order (recurring) payment, the recipient must be in the UK.
It is recommended to use bacs
in the UK and iban
in EU.
The endpoint is idempotent: if a developer has already made a request with the same payment details, Plaid will return the same recipient_id
.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.name
1
iban
15
34
bacs
address
street
1
1
city
1
35
postal_code
1
16
country
2
2
1// Using BACS, without IBAN or address2const request: PaymentInitiationRecipientCreateRequest = {3 name: 'John Doe',4 bacs: {5 account: '26207729',6 sort_code: '560029',7 },8};9try {10 const response = await plaidClient.paymentInitiationRecipientCreate(request);11 const recipientID = response.data.recipient_id;12} catch (error) {13 // handle error14}
Response fields and example
recipient_id
request_id
1{2 "recipient_id": "recipient-id-sandbox-9b6b4679-914b-445b-9450-efbdb80296f6",3 "request_id": "4zlKapIkTm8p5KM"4}
Was this helpful?
/payment_initiation/recipient/get
Get payment recipient
Get details about a payment recipient you have previously created.
payment_initiation/recipient/getclient_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.recipient_id
1const request: PaymentInitiationRecipientGetRequest = {2 recipient_id: recipientID,3};4try {5 const response = await plaidClient.paymentInitiationRecipientGet(request);6 const recipientID = response.data.recipient_id;7 const name = response.data.name;8 const iban = response.data.iban;9 const address = response.data.address;10} catch (error) {11 // handle error12}
Response fields and example
recipient_id
name
address
street
1
1
city
1
35
postal_code
1
16
country
2
2
iban
bacs
request_id
1{2 "recipient_id": "recipient-id-sandbox-9b6b4679-914b-445b-9450-efbdb80296f6",3 "name": "Wonder Wallet",4 "iban": "GB29NWBK60161331926819",5 "address": {6 "street": [7 "96 Guild Street",8 "9th Floor"9 ],10 "city": "London",11 "postal_code": "SE14 8JW",12 "country": "GB"13 },14 "request_id": "4zlKapIkTm8p5KM"15}
Was this helpful?
/payment_initiation/recipient/list
List payment recipients
The /payment_initiation/recipient/list
endpoint list the payment recipients that you have previously created.
1try {2 const response = await plaidClient.paymentInitiationRecipientList({});3 const recipients = response.data.recipients;4} catch (error) {5 // handle error6}
Response fields and example
recipients
recipient_id
name
address
street
1
1
city
1
35
postal_code
1
16
country
2
2
iban
bacs
request_id
1{2 "recipients": [3 {4 "recipient_id": "recipient-id-sandbox-9b6b4679-914b-445b-9450-efbdb80296f6",5 "name": "Wonder Wallet",6 "iban": "GB29NWBK60161331926819",7 "address": {8 "street": [9 "96 Guild Street",10 "9th Floor"11 ],12 "city": "London",13 "postal_code": "SE14 8JW",14 "country": "GB"15 }16 }17 ],18 "request_id": "4zlKapIkTm8p5KM"19}
Was this helpful?
/payment_initiation/payment/create
Create a payment
After creating a payment recipient, you can use the /payment_initiation/payment/create
endpoint to create a payment to that recipient. Payments can be one-time or standing order (recurring) and can be denominated in either EUR, GBP or other chosen currency. If making domestic GBP-denominated payments, your recipient must have been created with BACS numbers. In general, EUR-denominated payments will be sent via SEPA Credit Transfer, GBP-denominated payments will be sent via the Faster Payments network and for non-Eurozone markets typically via the local payment scheme, but the payment network used will be determined by the institution. Payments sent via Faster Payments will typically arrive immediately, while payments sent via SEPA Credit Transfer or other local payment schemes will typically arrive in one business day.
Standing orders (recurring payments) must be denominated in GBP and can only be sent to recipients in the UK. Once created, standing order payments cannot be modified or canceled via the API. An end user can cancel or modify a standing order directly on their banking application or website, or by contacting the bank. Standing orders will follow the payment rules of the underlying rails (Faster Payments in UK). Payments can be sent Monday to Friday, excluding bank holidays. If the pre-arranged date falls on a weekend or bank holiday, the payment is made on the next working day. It is not possible to guarantee the exact time the payment will reach the recipient’s account, although at least 90% of standing order payments are sent by 6am.
In Limited Production, payments must be below 5 GBP or other chosen currency, and standing orders, variable recurring payments, and Virtual Accounts are not supported.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.recipient_id
reference
reference
and adjusted_reference
fields, respectively.1
18
amount
currency
"GBP"
must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported.GBP
, EUR
, PLN
, SEK
, DKK
, NOK
3
3
value
1.23
. Minimum accepted value is 1
.double
schedule
interval
WEEKLY
, MONTHLY
1
interval_execution_day
If the payment interval is weekly,
interval_execution_day
should be an integer from 1 (Monday) to 7 (Sunday).If the payment interval is monthly,
interval_execution_day
should be an integer indicating which day of the month to make the payment on. Integers from 1 to 28 can be used to make a payment on that day of the month. Negative integers from -1 to -5 can be used to make a payment relative to the end of the month. To make a payment on the last day of the month, use -1; to make the payment on the second-to-last day, use -2, and so on.start_date
interval_execution_day
on or after the start_date
.If the first
interval_execution_day
on or after the start date is also the same day that /payment_initiation/payment/create
was called, the bank may make the first payment on that day, but it is not guaranteed to do so.date
end_date
interval_execution_day
on or before the end_date
.
If the only interval_execution_day
between the start date and the end date (inclusive) is also the same day that /payment_initiation/payment/create
was called, the bank may make a payment on that day, but it is not guaranteed to do so.date
adjusted_start_date
null
.date
options
request_refund_details
true
, Plaid will attempt to request refund details from the payee's financial institution. Support varies between financial institutions and will not always be available. If refund details could be retrieved, they will be available in the /payment_initiation/payment/get
response.iban
15
34
bacs
scheme
SEPA_CREDIT_TRANSFER
for EU). Using unsupported values will result in a failed payment.LOCAL_DEFAULT
: The default payment scheme for the selected market and currency will be used.LOCAL_INSTANT
: The instant payment scheme for the selected market and currency will be used (if applicable). Fees may be applied by the institution. If the market does not support an Instant Scheme (e.g. Denmark), the default in the region will be used.SEPA_CREDIT_TRANSFER
: The standard payment to a beneficiary within the SEPA area.SEPA_CREDIT_TRANSFER_INSTANT
: Instant payment within the SEPA area. May involve additional fees and may not be available at some banks.null
, LOCAL_DEFAULT
, LOCAL_INSTANT
, SEPA_CREDIT_TRANSFER
, SEPA_CREDIT_TRANSFER_INSTANT
1const request: PaymentInitiationPaymentCreateRequest = {2 recipient_id: recipientID,3 reference: 'TestPayment',4 amount: {5 currency: 'GBP',6 value: 100.0,7 },8};9try {10 const response = await plaidClient.paymentInitiationPaymentCreate(request);11 const paymentID = response.data.payment_id;12 const status = response.data.status;13} catch (error) {14 // handle error15}
Response fields and example
payment_id
status
PAYMENT_STATUS_INPUT_NEEDED
: The initial phase of the paymentPAYMENT_STATUS_INPUT_NEEDED
request_id
1{2 "payment_id": "payment-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3",3 "status": "PAYMENT_STATUS_INPUT_NEEDED",4 "request_id": "4ciYVmesrySiUAB"5}
Was this helpful?
/payment_initiation/payment/get
Get payment details
The /payment_initiation/payment/get
endpoint can be used to check the status of a payment, as well as to receive basic information such as recipient and payment amount. In the case of standing orders, the /payment_initiation/payment/get
endpoint will provide information about the status of the overall standing order itself; the API cannot be used to retrieve payment status for individual payments within a standing order.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.payment_id
payment_id
returned from /payment_initiation/payment/create
.1const request: PaymentInitiationPaymentGetRequest = {2 payment_id: paymentID,3};4try {5 const response = await plaidClient.paymentInitiationPaymentGet(request);6 const paymentID = response.data.payment_id;7 const paymentToken = response.data.payment_token;8 const reference = response.data.reference;9 const amount = response.data.amount;10 const status = response.data.status;11 const lastStatusUpdate = response.data.last_status_update;12 const paymentTokenExpirationTime =13 response.data.payment_token_expiration_time;14 const recipientID = response.data.recipient_id;15} catch (error) {16 // handle error17}
Response fields and example
payment_id
payment_id
is case sensitive.amount
currency
"GBP"
must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported.GBP
, EUR
, PLN
, SEK
, DKK
, NOK
3
3
value
1.23
. Minimum accepted value is 1
.double
status
PAYMENT_STATUS_INPUT_NEEDED
: This is the initial state of all payments. It indicates that the payment is waiting on user input to continue processing. A payment may re-enter this state later on if further input is needed.PAYMENT_STATUS_INITIATED
: The payment has been successfully authorised and accepted by the financial institution. For successful payments, this is a potential terminal status. Further status transitions can be to REJECTED and, when supported by the institution, to EXECUTED.PAYMENT_STATUS_INSUFFICIENT_FUNDS
: The payment has failed due to insufficient funds.PAYMENT_STATUS_FAILED
: The payment has failed to be initiated. This error may be caused by transient system outages and is retryable once the root cause is resolved.PAYMENT_STATUS_BLOCKED
: The payment has been blocked by Plaid. This can occur, for example, due to Plaid flagging the payment as potentially risky. This is a retryable error.PAYMENT_STATUS_AUTHORISING
: The payment is currently being processed. The payment will automatically exit this state when the financial institution has authorised the transaction.PAYMENT_STATUS_CANCELLED
: The payment was cancelled (typically by the end user) during authorisation.PAYMENT_STATUS_EXECUTED
: The funds have successfully left the payer account and payment is considered complete. Not all institutions support this status: support is more common in the UK, and less common in the EU. For institutions where this status is not supported, the terminal status for a successful payment will be PAYMENT_STATUS_INITIATED
.PAYMENT_STATUS_SETTLED
: The payment has settled and funds are available for use. A payment will typically settle within seconds to several days, depending on which payment rail is used. This status is only available to customers using Plaid Virtual Accounts.PAYMENT_STATUS_ESTABLISHED
: Indicates that the standing order has been successfully established. This state is only used for standing orders.PAYMENT_STATUS_REJECTED
: The payment was rejected by the financial institution.Deprecated: These statuses will be removed in a future release.
PAYMENT_STATUS_UNKNOWN
: The payment status is unknown.PAYMENT_STATUS_PROCESSING
: The payment is currently being processed. The payment will automatically exit this state when processing is complete.PAYMENT_STATUS_COMPLETED
: Indicates that the standing order has been successfully established. This state is only used for standing orders.PAYMENT_STATUS_INPUT_NEEDED
, PAYMENT_STATUS_PROCESSING
, PAYMENT_STATUS_INITIATED
, PAYMENT_STATUS_COMPLETED
, PAYMENT_STATUS_INSUFFICIENT_FUNDS
, PAYMENT_STATUS_FAILED
, PAYMENT_STATUS_BLOCKED
, PAYMENT_STATUS_UNKNOWN
, PAYMENT_STATUS_EXECUTED
, PAYMENT_STATUS_SETTLED
, PAYMENT_STATUS_AUTHORISING
, PAYMENT_STATUS_CANCELLED
, PAYMENT_STATUS_ESTABLISHED
, PAYMENT_STATUS_REJECTED
recipient_id
reference
adjusted_reference
last_status_update
status
was updated, in IS0 8601 formatdate-time
schedule
interval
WEEKLY
, MONTHLY
1
interval_execution_day
If the payment interval is weekly,
interval_execution_day
should be an integer from 1 (Monday) to 7 (Sunday).If the payment interval is monthly,
interval_execution_day
should be an integer indicating which day of the month to make the payment on. Integers from 1 to 28 can be used to make a payment on that day of the month. Negative integers from -1 to -5 can be used to make a payment relative to the end of the month. To make a payment on the last day of the month, use -1; to make the payment on the second-to-last day, use -2, and so on.start_date
interval_execution_day
on or after the start_date
.If the first
interval_execution_day
on or after the start date is also the same day that /payment_initiation/payment/create
was called, the bank may make the first payment on that day, but it is not guaranteed to do so.date
end_date
interval_execution_day
on or before the end_date
.
If the only interval_execution_day
between the start date and the end date (inclusive) is also the same day that /payment_initiation/payment/create
was called, the bank may make a payment on that day, but it is not guaranteed to do so.date
adjusted_start_date
null
.date
refund_details
name
iban
bacs
bacs
iban
/payment_initiation/payment/create
call.refund_ids
amount_refunded
currency
"GBP"
must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported.GBP
, EUR
, PLN
, SEK
, DKK
, NOK
3
3
value
1.23
.double
0.01
wallet_id
scheme
SEPA_CREDIT_TRANSFER
for EU). Using unsupported values will result in a failed payment.LOCAL_DEFAULT
: The default payment scheme for the selected market and currency will be used.LOCAL_INSTANT
: The instant payment scheme for the selected market and currency will be used (if applicable). Fees may be applied by the institution. If the market does not support an Instant Scheme (e.g. Denmark), the default in the region will be used.SEPA_CREDIT_TRANSFER
: The standard payment to a beneficiary within the SEPA area.SEPA_CREDIT_TRANSFER_INSTANT
: Instant payment within the SEPA area. May involve additional fees and may not be available at some banks.null
, LOCAL_DEFAULT
, LOCAL_INSTANT
, SEPA_CREDIT_TRANSFER
, SEPA_CREDIT_TRANSFER_INSTANT
adjusted_scheme
SEPA_CREDIT_TRANSFER
for EU). Using unsupported values will result in a failed payment.LOCAL_DEFAULT
: The default payment scheme for the selected market and currency will be used.LOCAL_INSTANT
: The instant payment scheme for the selected market and currency will be used (if applicable). Fees may be applied by the institution. If the market does not support an Instant Scheme (e.g. Denmark), the default in the region will be used.SEPA_CREDIT_TRANSFER
: The standard payment to a beneficiary within the SEPA area.SEPA_CREDIT_TRANSFER_INSTANT
: Instant payment within the SEPA area. May involve additional fees and may not be available at some banks.null
, LOCAL_DEFAULT
, LOCAL_INSTANT
, SEPA_CREDIT_TRANSFER
, SEPA_CREDIT_TRANSFER_INSTANT
consent_id
transaction_id
request_id
1{2 "payment_id": "payment-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3",3 "payment_token": "payment-token-sandbox-c6a26505-42b4-46fe-8ecf-bf9edcafbebb",4 "reference": "Account Funding 99744",5 "amount": {6 "currency": "GBP",7 "value": 1008 },9 "status": "PAYMENT_STATUS_INPUT_NEEDED",10 "last_status_update": "2019-11-06T21:10:52Z",11 "recipient_id": "recipient-id-sandbox-9b6b4679-914b-445b-9450-efbdb80296f6",12 "bacs": {13 "account": "31926819",14 "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D",15 "sort_code": "601613"16 },17 "iban": null,18 "request_id": "aEAQmewMzlVa1k6"19}
Was this helpful?
/payment_initiation/payment/list
List payments
The /payment_initiation/payment/list
endpoint can be used to retrieve all created payments. By default, the 10 most recent payments are returned. You can request more payments and paginate through the results using the optional count
and cursor
parameters.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.count
count
is not specified, a maximum of 10 payments will be returned, beginning with the most recent payment before the cursor (if specified).1
200
10
cursor
date-time
consent_id
1const request: PaymentInitiationPaymentListRequest = {2 count: 10,3 cursor: '2019-12-06T22:35:49Z',4};5try {6 const response = await plaidClient.paymentInitiationPaymentList(request);7 const payments = response.data.payments;8 const nextCursor = response.data.next_cursor;9} catch (error) {10 // handle error11}
Response fields and example
payments
client_id
.payment_id
payment_id
is case sensitive.amount
currency
"GBP"
must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported.GBP
, EUR
, PLN
, SEK
, DKK
, NOK
3
3
value
1.23
. Minimum accepted value is 1
.double
status
PAYMENT_STATUS_INPUT_NEEDED
: This is the initial state of all payments. It indicates that the payment is waiting on user input to continue processing. A payment may re-enter this state later on if further input is needed.PAYMENT_STATUS_INITIATED
: The payment has been successfully authorised and accepted by the financial institution. For successful payments, this is a potential terminal status. Further status transitions can be to REJECTED and, when supported by the institution, to EXECUTED.PAYMENT_STATUS_INSUFFICIENT_FUNDS
: The payment has failed due to insufficient funds.PAYMENT_STATUS_FAILED
: The payment has failed to be initiated. This error may be caused by transient system outages and is retryable once the root cause is resolved.PAYMENT_STATUS_BLOCKED
: The payment has been blocked by Plaid. This can occur, for example, due to Plaid flagging the payment as potentially risky. This is a retryable error.PAYMENT_STATUS_AUTHORISING
: The payment is currently being processed. The payment will automatically exit this state when the financial institution has authorised the transaction.PAYMENT_STATUS_CANCELLED
: The payment was cancelled (typically by the end user) during authorisation.PAYMENT_STATUS_EXECUTED
: The funds have successfully left the payer account and payment is considered complete. Not all institutions support this status: support is more common in the UK, and less common in the EU. For institutions where this status is not supported, the terminal status for a successful payment will be PAYMENT_STATUS_INITIATED
.PAYMENT_STATUS_SETTLED
: The payment has settled and funds are available for use. A payment will typically settle within seconds to several days, depending on which payment rail is used. This status is only available to customers using Plaid Virtual Accounts.PAYMENT_STATUS_ESTABLISHED
: Indicates that the standing order has been successfully established. This state is only used for standing orders.PAYMENT_STATUS_REJECTED
: The payment was rejected by the financial institution.Deprecated: These statuses will be removed in a future release.
PAYMENT_STATUS_UNKNOWN
: The payment status is unknown.PAYMENT_STATUS_PROCESSING
: The payment is currently being processed. The payment will automatically exit this state when processing is complete.PAYMENT_STATUS_COMPLETED
: Indicates that the standing order has been successfully established. This state is only used for standing orders.PAYMENT_STATUS_INPUT_NEEDED
, PAYMENT_STATUS_PROCESSING
, PAYMENT_STATUS_INITIATED
, PAYMENT_STATUS_COMPLETED
, PAYMENT_STATUS_INSUFFICIENT_FUNDS
, PAYMENT_STATUS_FAILED
, PAYMENT_STATUS_BLOCKED
, PAYMENT_STATUS_UNKNOWN
, PAYMENT_STATUS_EXECUTED
, PAYMENT_STATUS_SETTLED
, PAYMENT_STATUS_AUTHORISING
, PAYMENT_STATUS_CANCELLED
, PAYMENT_STATUS_ESTABLISHED
, PAYMENT_STATUS_REJECTED
recipient_id
reference
adjusted_reference
last_status_update
status
was updated, in IS0 8601 formatdate-time
schedule
interval
WEEKLY
, MONTHLY
1
interval_execution_day
If the payment interval is weekly,
interval_execution_day
should be an integer from 1 (Monday) to 7 (Sunday).If the payment interval is monthly,
interval_execution_day
should be an integer indicating which day of the month to make the payment on. Integers from 1 to 28 can be used to make a payment on that day of the month. Negative integers from -1 to -5 can be used to make a payment relative to the end of the month. To make a payment on the last day of the month, use -1; to make the payment on the second-to-last day, use -2, and so on.start_date
interval_execution_day
on or after the start_date
.If the first
interval_execution_day
on or after the start date is also the same day that /payment_initiation/payment/create
was called, the bank may make the first payment on that day, but it is not guaranteed to do so.date
end_date
interval_execution_day
on or before the end_date
.
If the only interval_execution_day
between the start date and the end date (inclusive) is also the same day that /payment_initiation/payment/create
was called, the bank may make a payment on that day, but it is not guaranteed to do so.date
adjusted_start_date
null
.date
refund_details
name
iban
bacs
bacs
iban
/payment_initiation/payment/create
call.refund_ids
amount_refunded
currency
"GBP"
must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported.GBP
, EUR
, PLN
, SEK
, DKK
, NOK
3
3
value
1.23
.double
0.01
wallet_id
scheme
SEPA_CREDIT_TRANSFER
for EU). Using unsupported values will result in a failed payment.LOCAL_DEFAULT
: The default payment scheme for the selected market and currency will be used.LOCAL_INSTANT
: The instant payment scheme for the selected market and currency will be used (if applicable). Fees may be applied by the institution. If the market does not support an Instant Scheme (e.g. Denmark), the default in the region will be used.SEPA_CREDIT_TRANSFER
: The standard payment to a beneficiary within the SEPA area.SEPA_CREDIT_TRANSFER_INSTANT
: Instant payment within the SEPA area. May involve additional fees and may not be available at some banks.null
, LOCAL_DEFAULT
, LOCAL_INSTANT
, SEPA_CREDIT_TRANSFER
, SEPA_CREDIT_TRANSFER_INSTANT
adjusted_scheme
SEPA_CREDIT_TRANSFER
for EU). Using unsupported values will result in a failed payment.LOCAL_DEFAULT
: The default payment scheme for the selected market and currency will be used.LOCAL_INSTANT
: The instant payment scheme for the selected market and currency will be used (if applicable). Fees may be applied by the institution. If the market does not support an Instant Scheme (e.g. Denmark), the default in the region will be used.SEPA_CREDIT_TRANSFER
: The standard payment to a beneficiary within the SEPA area.SEPA_CREDIT_TRANSFER_INSTANT
: Instant payment within the SEPA area. May involve additional fees and may not be available at some banks.null
, LOCAL_DEFAULT
, LOCAL_INSTANT
, SEPA_CREDIT_TRANSFER
, SEPA_CREDIT_TRANSFER_INSTANT
consent_id
transaction_id
next_cursor
cursor
parameter to /payment_initiation/payment/list
, will return the next unreturned payment as its first payment.date-time
request_id
1{2 "payments": [3 {4 "payment_id": "payment-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3",5 "reference": "Account Funding 99744",6 "amount": {7 "currency": "GBP",8 "value": 1009 },10 "status": "PAYMENT_STATUS_INPUT_NEEDED",11 "last_status_update": "2019-11-06T21:10:52Z",12 "recipient_id": "recipient-id-sandbox-9b6b4679-914b-445b-9450-efbdb80296f6",13 "bacs": {14 "account": "31926819",15 "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D",16 "sort_code": "601613"17 },18 "iban": null19 }20 ],21 "next_cursor": "2020-01-01T00:00:00Z",22 "request_id": "aEAQmewMzlVa1k6"23}
Was this helpful?
/payment_initiation/payment/reverse
Reverse an existing payment
Reverse a settled payment from a Plaid virtual account.
The original payment must be in a settled state to be refunded.
To refund partially, specify the amount as part of the request.
If the amount is not specified, the refund amount will be equal to all
of the remaining payment amount that has not been refunded yet.
The refund will go back to the source account that initiated the payment.
The original payment must have been initiated to a Plaid virtual account
so that this account can be used to initiate the refund.
Providing counterparty information such as date of birth and address increases
the likelihood of refund being successful without human intervention.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.payment_id
idempotency_key
The API supports idempotency for safely retrying requests without accidentally performing the same operation twice. If a request to execute a wallet transaction fails due to a network connection error, then after a minimum delay of one minute, you can retry the request with the same idempotency key to guarantee that only a single wallet transaction is created. If the request was successfully processed, it will prevent any transaction that uses the same idempotency key, and was received within 24 hours of the first request, from being processed.
128
1
reference
18
6
amount
currency
"GBP"
must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported.GBP
, EUR
, PLN
, SEK
, DKK
, NOK
3
3
value
1.23
.double
0.01
counterparty_address
street
1
1
city
1
35
postal_code
1
16
country
2
2
1const request: PaymentInitiationPaymentReverseRequest = {2 payment_id: paymentID,3 reference: 'Refund for purchase ABC123',4 idempotency_key: 'ae009325-df8d-4f52-b1e0-53ff26c23912',5};6try {7 const response = await plaidClient.paymentInitiationPaymentReverse(request);8 const refundID = response.data.refund_id;9 const status = response.data.status;10} catch (error) {11 // handle error12}
Response fields and example
refund_id
status
AUTHORISING
: The transaction is being processed for validation and compliance.INITIATED
: The transaction has been initiated and is currently being processed.EXECUTED
: The transaction has been successfully executed and is considered complete. This is only applicable for debit transactions.SETTLED
: The transaction has settled and funds are available for use. This is only applicable for credit transactions. A transaction will typically settle within seconds to several days, depending on which payment rail is used.FAILED
: The transaction failed to process successfully. This is a terminal status.BLOCKED
: The transaction has been blocked for violating compliance rules. This is a terminal status.AUTHORISING
, INITIATED
, EXECUTED
, SETTLED
, BLOCKED
, FAILED
request_id
1{2 "refund_id": "wallet-transaction-id-production-c5f8cd31-6cae-4cad-9b0d-f7c10be9cc4b",3 "request_id": "HtlKzBX0fMeF7mU",4 "status": "INITIATED"5}
Was this helpful?
/payment_initiation/consent/create
Create payment consent
The /payment_initiation/consent/create
endpoint is used to create a payment consent, which can be used to initiate payments on behalf of the user. Payment consents are created with UNAUTHORISED
status by default and must be authorised by the user before payments can be initiated.
Consents can be limited in time and scope, and have constraints that describe limitations for payments.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.recipient_id
reference
1
18
scopes
1
ME_TO_ME
, EXTERNAL
type
SWEEPING
: Allows moving money between accounts owned by the same user.COMMERCIAL
: Allows initiating payments from the user's account to third parties.SWEEPING
, COMMERCIAL
constraints
valid_date_time
to
date the payment consent expires and can no longer be used for payment initiation.max_payment_amount
currency
"GBP"
must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported.GBP
, EUR
, PLN
, SEK
, DKK
, NOK
3
3
value
1.23
. Minimum accepted value is 1
.double
periodic_amounts
1
amount
currency
"GBP"
must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported.GBP
, EUR
, PLN
, SEK
, DKK
, NOK
3
3
value
1.23
. Minimum accepted value is 1
.double
interval
DAY
, WEEK
, MONTH
, YEAR
alignment
If the institution is Monzo, only
CONSENT
alignments are supported.CALENDAR
: line up with a calendar.CONSENT
: on the date of consent creation.CALENDAR
, CONSENT
options
payer_details
to specify the account.request_refund_details
true
, Plaid will attempt to request refund details from the payee's financial institution. Support varies between financial institutions and will not always be available. If refund details could be retrieved, they will be available in the /payment_initiation/payment/get
response.iban
15
34
bacs
payer_details
name
and account numbers
are required to lock the account to which the consent can be created.name
1
numbers
address
street
1
1
city
1
35
postal_code
1
16
country
2
2
date_of_birth
phone_numbers
emails
1const request: PaymentInitiationConsentCreateRequest = {2 recipient_id: recipientID,3 reference: 'TestPaymentConsent',4 type: PaymentInitiationConsentType.Commercial,5 constraints: {6 valid_date_time: {7 to: '2024-12-31T23:59:59Z',8 },9 max_payment_amount: {10 currency: PaymentAmountCurrency.Gbp,11 value: 15,12 },13 periodic_amounts: [14 {15 amount: {16 currency: PaymentAmountCurrency.Gbp,17 value: 40,18 },19 alignment: PaymentConsentPeriodicAlignment.Calendar,20 interval: PaymentConsentPeriodicInterval.Month,21 },22 ],23 },24};25
26try {27 const response = await plaidClient.paymentInitiationConsentCreate(request);28 const consentID = response.data.consent_id;29 const status = response.data.status;30} catch (error) {31 // handle error32}
Response fields and example
consent_id
status
UNAUTHORISED
: Consent created, but requires user authorisation.REJECTED
: Consent authorisation was rejected by the user and/or the bank.AUTHORISED
: Consent is active and ready to be used.REVOKED
: Consent has been revoked and can no longer be used.EXPIRED
: Consent is no longer valid.UNAUTHORISED
, AUTHORISED
, REVOKED
, REJECTED
, EXPIRED
request_id
1{2 "consent_id": "consent-id-production-feca8a7a-5491-4444-9999-f3062bb735d3",3 "status": "UNAUTHORISED",4 "request_id": "4ciYmmesdqSiUAB"5}
Was this helpful?
/payment_initiation/consent/get
Get payment consent
The /payment_initiation/consent/get
endpoint can be used to check the status of a payment consent, as well as to receive basic information such as recipient and constraints.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.consent_id
consent_id
returned from /payment_initiation/consent/create
.1const request: PaymentInitiationConsentGetRequest = {2 consent_id: consentID,3};4
5try {6 const response = await plaidClient.paymentInitiationConsentGet(request);7 const consentID = response.data.consent_id;8 const status = response.data.status;9} catch (error) {10 // handle error11}
Response fields and example
consent_id
1
status
UNAUTHORISED
: Consent created, but requires user authorisation.REJECTED
: Consent authorisation was rejected by the user and/or the bank.AUTHORISED
: Consent is active and ready to be used.REVOKED
: Consent has been revoked and can no longer be used.EXPIRED
: Consent is no longer valid.UNAUTHORISED
, AUTHORISED
, REVOKED
, REJECTED
, EXPIRED
created_at
recipient_id
1
reference
constraints
valid_date_time
to
date the payment consent expires and can no longer be used for payment initiation.max_payment_amount
currency
"GBP"
must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported.GBP
, EUR
, PLN
, SEK
, DKK
, NOK
3
3
value
1.23
. Minimum accepted value is 1
.double
periodic_amounts
1
amount
currency
"GBP"
must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported.GBP
, EUR
, PLN
, SEK
, DKK
, NOK
3
3
value
1.23
. Minimum accepted value is 1
.double
interval
DAY
, WEEK
, MONTH
, YEAR
alignment
If the institution is Monzo, only
CONSENT
alignments are supported.CALENDAR
: line up with a calendar.CONSENT
: on the date of consent creation.CALENDAR
, CONSENT
scopes
ME_TO_ME
, EXTERNAL
type
SWEEPING
: Allows moving money between accounts owned by the same user.COMMERCIAL
: Allows initiating payments from the user's account to third parties.SWEEPING
, COMMERCIAL
payer_details
name
iban
bacs
request_id
1{2 "request_id": "4ciYuuesdqSiUAB",3 "consent_id": "consent-id-production-feca8a7a-5491-4aef-9298-f3062bb735d3",4 "status": "AUTHORISED",5 "created_at": "2021-10-30T15:26:48Z",6 "recipient_id": "recipient-id-production-9b6b4679-914b-445b-9450-efbdb80296f6",7 "reference": "ref-00001",8 "constraints": {9 "valid_date_time": {10 "from": "2021-12-25T11:12:13Z",11 "to": "2022-12-31T15:26:48Z"12 },13 "max_payment_amount": {14 "currency": "GBP",15 "value": 10016 },17 "periodic_amounts": [18 {19 "amount": {20 "currency": "GBP",21 "value": 30022 },23 "interval": "WEEK",24 "alignment": "CALENDAR"25 }26 ]27 },28 "type": "SWEEPING"29}
Was this helpful?
/payment_initiation/consent/revoke
Revoke payment consent
The /payment_initiation/consent/revoke
endpoint can be used to revoke the payment consent. Once the consent is revoked, it is not possible to initiate payments using it.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.consent_id
1const request: PaymentInitiationConsentRevokeRequest = {2 consent_id: consentID,3};4try {5 const response = await plaidClient.paymentInitiationConsentRevoke(request);6} catch (error) {7 // handle error8}
Response fields and example
request_id
1{2 "request_id": "4ciYaaesdqSiUAB"3}
Was this helpful?
/payment_initiation/consent/payment/execute
Execute a single payment using consent
The /payment_initiation/consent/payment/execute
endpoint can be used to execute payments using payment consent.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.consent_id
amount
currency
"GBP"
must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported.GBP
, EUR
, PLN
, SEK
, DKK
, NOK
3
3
value
1.23
. Minimum accepted value is 1
.double
idempotency_key
The API supports idempotency for safely retrying requests without accidentally performing the same operation twice. If a request to execute a consent payment fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single payment is created. If the request was successfully processed, it will prevent any payment that uses the same idempotency key, and was received within 48 hours of the first request, from being processed.
128
1
reference
reference
and adjusted_reference
fields, respectively.1
18
scope
A scope of the payment. Must be one of the scopes mentioned in the consent. Optional if the appropriate consent has only one scope defined, required otherwise.
ME_TO_ME
, EXTERNAL
processing_mode
IMMEDIATE
as default.IMMEDIATE
: Will immediately execute the payment, waiting for a response from the ASPSP before returning the result of the payment initiation. This is ideal for user-present flows.ASYNC
: Will accept a payment execution request and schedule it for processing, immediately returning the new payment_id
. Listen for webhooks or use the /payment_initiation/payment/get
endpoint to obtain updates on the payment status. This is ideal for non user-present flows.ASYNC
, IMMEDIATE
1const request: PaymentInitiationConsentPaymentExecuteRequest = {2 consent_id: consentID,3 amount: {4 currency: PaymentAmountCurrency.Gbp,5 value: 7.99,6 },7 reference: 'Payment1',8 idempotency_key: idempotencyKey,9};10try {11 const response = await plaidClient.paymentInitiationConsentPaymentExecute(12 request,13 );14 const paymentID = response.data.payment_id;15 const status = response.data.status;16} catch (error) {17 // handle error18}
Response fields and example
payment_id
status
PAYMENT_STATUS_INPUT_NEEDED
: This is the initial state of all payments. It indicates that the payment is waiting on user input to continue processing. A payment may re-enter this state later on if further input is needed.PAYMENT_STATUS_INITIATED
: The payment has been successfully authorised and accepted by the financial institution. For successful payments, this is a potential terminal status. Further status transitions can be to REJECTED and, when supported by the institution, to EXECUTED.PAYMENT_STATUS_INSUFFICIENT_FUNDS
: The payment has failed due to insufficient funds.PAYMENT_STATUS_FAILED
: The payment has failed to be initiated. This error may be caused by transient system outages and is retryable once the root cause is resolved.PAYMENT_STATUS_BLOCKED
: The payment has been blocked by Plaid. This can occur, for example, due to Plaid flagging the payment as potentially risky. This is a retryable error.PAYMENT_STATUS_AUTHORISING
: The payment is currently being processed. The payment will automatically exit this state when the financial institution has authorised the transaction.PAYMENT_STATUS_CANCELLED
: The payment was cancelled (typically by the end user) during authorisation.PAYMENT_STATUS_EXECUTED
: The funds have successfully left the payer account and payment is considered complete. Not all institutions support this status: support is more common in the UK, and less common in the EU. For institutions where this status is not supported, the terminal status for a successful payment will be PAYMENT_STATUS_INITIATED
.PAYMENT_STATUS_SETTLED
: The payment has settled and funds are available for use. A payment will typically settle within seconds to several days, depending on which payment rail is used. This status is only available to customers using Plaid Virtual Accounts.PAYMENT_STATUS_ESTABLISHED
: Indicates that the standing order has been successfully established. This state is only used for standing orders.PAYMENT_STATUS_REJECTED
: The payment was rejected by the financial institution.Deprecated: These statuses will be removed in a future release.
PAYMENT_STATUS_UNKNOWN
: The payment status is unknown.PAYMENT_STATUS_PROCESSING
: The payment is currently being processed. The payment will automatically exit this state when processing is complete.PAYMENT_STATUS_COMPLETED
: Indicates that the standing order has been successfully established. This state is only used for standing orders.PAYMENT_STATUS_INPUT_NEEDED
, PAYMENT_STATUS_PROCESSING
, PAYMENT_STATUS_INITIATED
, PAYMENT_STATUS_COMPLETED
, PAYMENT_STATUS_INSUFFICIENT_FUNDS
, PAYMENT_STATUS_FAILED
, PAYMENT_STATUS_BLOCKED
, PAYMENT_STATUS_UNKNOWN
, PAYMENT_STATUS_EXECUTED
, PAYMENT_STATUS_SETTLED
, PAYMENT_STATUS_AUTHORISING
, PAYMENT_STATUS_CANCELLED
, PAYMENT_STATUS_ESTABLISHED
, PAYMENT_STATUS_REJECTED
request_id
1{2 "payment_id": "payment-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3",3 "request_id": "4ciYccesdqSiUAB",4 "status": "PAYMENT_STATUS_INITIATED"5}
Was this helpful?
Webhooks
Updates are sent to indicate that the status of an initiated payment has changed. All Payment Initiation webhooks have a webhook_type
of PAYMENT_INITIATION
.
PAYMENT_STATUS_UPDATE
Fired when the status of a payment has changed.
webhook_type
PAYMENT_INITIATION
webhook_code
PAYMENT_STATUS_UPDATE
payment_id
payment_id
for the payment being updatedtransaction_id
new_payment_status
PAYMENT_STATUS_INPUT_NEEDED
: This is the initial state of all payments. It indicates that the payment is waiting on user input to continue processing. A payment may re-enter this state later on if further input is needed.PAYMENT_STATUS_INITIATED
: The payment has been successfully authorised and accepted by the financial institution. For successful payments, this is a potential terminal status. Further status transitions can be to REJECTED and, when supported by the institution, to EXECUTED.PAYMENT_STATUS_INSUFFICIENT_FUNDS
: The payment has failed due to insufficient funds.PAYMENT_STATUS_FAILED
: The payment has failed to be initiated. This error may be caused by transient system outages and is retryable once the root cause is resolved.PAYMENT_STATUS_BLOCKED
: The payment has been blocked by Plaid. This can occur, for example, due to Plaid flagging the payment as potentially risky. This is a retryable error.PAYMENT_STATUS_AUTHORISING
: The payment is currently being processed. The payment will automatically exit this state when the financial institution has authorised the transaction.PAYMENT_STATUS_CANCELLED
: The payment was cancelled (typically by the end user) during authorisation.PAYMENT_STATUS_EXECUTED
: The funds have successfully left the payer account and payment is considered complete. Not all institutions support this status: support is more common in the UK, and less common in the EU. For institutions where this status is not supported, the terminal status for a successful payment will be PAYMENT_STATUS_INITIATED
.PAYMENT_STATUS_SETTLED
: The payment has settled and funds are available for use. A payment will typically settle within seconds to several days, depending on which payment rail is used. This status is only available to customers using Plaid Virtual Accounts.PAYMENT_STATUS_ESTABLISHED
: Indicates that the standing order has been successfully established. This state is only used for standing orders.PAYMENT_STATUS_REJECTED
: The payment was rejected by the financial institution.Deprecated: These statuses will be removed in a future release.
PAYMENT_STATUS_UNKNOWN
: The payment status is unknown.PAYMENT_STATUS_PROCESSING
: The payment is currently being processed. The payment will automatically exit this state when processing is complete.PAYMENT_STATUS_COMPLETED
: Indicates that the standing order has been successfully established. This state is only used for standing orders.PAYMENT_STATUS_INPUT_NEEDED
, PAYMENT_STATUS_PROCESSING
, PAYMENT_STATUS_INITIATED
, PAYMENT_STATUS_COMPLETED
, PAYMENT_STATUS_INSUFFICIENT_FUNDS
, PAYMENT_STATUS_FAILED
, PAYMENT_STATUS_BLOCKED
, PAYMENT_STATUS_UNKNOWN
, PAYMENT_STATUS_EXECUTED
, PAYMENT_STATUS_SETTLED
, PAYMENT_STATUS_AUTHORISING
, PAYMENT_STATUS_CANCELLED
, PAYMENT_STATUS_ESTABLISHED
, PAYMENT_STATUS_REJECTED
old_payment_status
PAYMENT_STATUS_INPUT_NEEDED
: This is the initial state of all payments. It indicates that the payment is waiting on user input to continue processing. A payment may re-enter this state later on if further input is needed.PAYMENT_STATUS_INITIATED
: The payment has been successfully authorised and accepted by the financial institution. For successful payments, this is a potential terminal status. Further status transitions can be to REJECTED and, when supported by the institution, to EXECUTED.PAYMENT_STATUS_INSUFFICIENT_FUNDS
: The payment has failed due to insufficient funds.PAYMENT_STATUS_FAILED
: The payment has failed to be initiated. This error may be caused by transient system outages and is retryable once the root cause is resolved.PAYMENT_STATUS_BLOCKED
: The payment has been blocked by Plaid. This can occur, for example, due to Plaid flagging the payment as potentially risky. This is a retryable error.PAYMENT_STATUS_AUTHORISING
: The payment is currently being processed. The payment will automatically exit this state when the financial institution has authorised the transaction.PAYMENT_STATUS_CANCELLED
: The payment was cancelled (typically by the end user) during authorisation.PAYMENT_STATUS_EXECUTED
: The funds have successfully left the payer account and payment is considered complete. Not all institutions support this status: support is more common in the UK, and less common in the EU. For institutions where this status is not supported, the terminal status for a successful payment will be PAYMENT_STATUS_INITIATED
.PAYMENT_STATUS_SETTLED
: The payment has settled and funds are available for use. A payment will typically settle within seconds to several days, depending on which payment rail is used. This status is only available to customers using Plaid Virtual Accounts.PAYMENT_STATUS_ESTABLISHED
: Indicates that the standing order has been successfully established. This state is only used for standing orders.PAYMENT_STATUS_REJECTED
: The payment was rejected by the financial institution.Deprecated: These statuses will be removed in a future release.
PAYMENT_STATUS_UNKNOWN
: The payment status is unknown.PAYMENT_STATUS_PROCESSING
: The payment is currently being processed. The payment will automatically exit this state when processing is complete.PAYMENT_STATUS_COMPLETED
: Indicates that the standing order has been successfully established. This state is only used for standing orders.PAYMENT_STATUS_INPUT_NEEDED
, PAYMENT_STATUS_PROCESSING
, PAYMENT_STATUS_INITIATED
, PAYMENT_STATUS_COMPLETED
, PAYMENT_STATUS_INSUFFICIENT_FUNDS
, PAYMENT_STATUS_FAILED
, PAYMENT_STATUS_BLOCKED
, PAYMENT_STATUS_UNKNOWN
, PAYMENT_STATUS_EXECUTED
, PAYMENT_STATUS_SETTLED
, PAYMENT_STATUS_AUTHORISING
, PAYMENT_STATUS_CANCELLED
, PAYMENT_STATUS_ESTABLISHED
, PAYMENT_STATUS_REJECTED
original_reference
adjusted_reference
original_start_date
start_date
provided during the creation of a standing order. If the payment is not a standing order, this field will be null
.date
adjusted_start_date
null
.date
error
error_code
and categorized by error_type
. Use these in preference to HTTP status codes to identify and handle specific errors. HTTP status codes are set and provide the broadest categorization of errors: 4xx codes are for developer- or user-related errors, and 5xx codes are for Plaid-related errors, and the status will be 2xx in non-error cases. An Item with a non-null
error object will only be part of an API response when calling /item/get
to view Item status. Otherwise, error fields will be null
if no error has occurred; if an error has occurred, an error code will be returned instead.error_type
INVALID_REQUEST
, INVALID_RESULT
, INVALID_INPUT
, INSTITUTION_ERROR
, RATE_LIMIT_EXCEEDED
, API_ERROR
, ITEM_ERROR
, ASSET_REPORT_ERROR
, RECAPTCHA_ERROR
, OAUTH_ERROR
, PAYMENT_ERROR
, BANK_TRANSFER_ERROR
, INCOME_VERIFICATION_ERROR
, MICRODEPOSITS_ERROR
, SANDBOX_ERROR
, PARTNER_ERROR
, TRANSACTIONS_ERROR
, TRANSACTION_ERROR
, TRANSFER_ERROR
error_code
error_code_reason
null
will be returned otherwise. Safe for programmatic use.Possible values:
OAUTH_INVALID_TOKEN
: The user’s OAuth connection to this institution has been invalidated.OAUTH_CONSENT_EXPIRED
: The user's access consent for this OAuth connection to this institution has expired.OAUTH_USER_REVOKED
: The user’s OAuth connection to this institution is invalid because the user revoked their connection.error_message
display_message
null
if the error is not related to user action.This may change over time and is not safe for programmatic use.
request_id
causes
causes
will return an array of errors containing a breakdown of these errors on the individual Item level, if any can be identified.causes
will only be provided for the error_type
ASSET_REPORT_ERROR
. causes
will also not be populated inside an error nested within a warning
object.status
documentation_url
suggested_action
environment
sandbox
, production
1{2 "webhook_type": "PAYMENT_INITIATION",3 "webhook_code": "PAYMENT_STATUS_UPDATE",4 "payment_id": "payment-id-production-2ba30780-d549-4335-b1fe-c2a938aa39d2",5 "new_payment_status": "PAYMENT_STATUS_INITIATED",6 "old_payment_status": "PAYMENT_STATUS_PROCESSING",7 "original_reference": "Account Funding 99744",8 "adjusted_reference": "Account Funding 99",9 "original_start_date": "2017-09-14",10 "adjusted_start_date": "2017-09-15",11 "timestamp": "2017-09-14T14:42:19.350Z",12 "environment": "production"13}