openapi: 3.0.3
info:
title: 'Wonderful Payments Public API'
description: 'Public API to create and retrieve payment requests using the Wonderful Payments Public API interface.'
version: 1.0.0
servers:
-
url: 'https://wonderful.co.uk'
paths:
/api/public/v1/account-links:
get:
summary: 'List Account Links'
operationId: listAccountLinks
description: 'Returns a list of all Account Links created for this Merchant.'
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
post:
summary: 'Create Account Link Request'
operationId: createAccountLinkRequest
description: "Before you can request data from an ASPSP you will need to create an Account Link.\nThe Account Link uses AIS permissions that define what data the User will agree to\nshare from their linked account. If you do not provide a list of permissions we will\nrequest `ReadAccountsDetail` which will allow you to read account names and numbers.\n\nTo create an Account Link you **must** provide the ASPSP name (from the Supported\nBanks endpoint) and a unique reference to identify the Account Link\nwithin your system. You **may** also supply explicit AIS permissions, an expiry date,\nand a return URL that will redirect you user back to after the authorisation process.\n\nIf you are requesting any Transaction based permissions (`ReadTransactionsBasic`,\n`ReadTransactionsDetail`, `ReadTransactionsCredit`, `ReadTransactionsDebit`)\nwe also recommend you set the transaction start and end dates.\n\nThe API response will contain a `link_url` within the `aspsp` object. You should redirect\nyour customer to this URL to complete the authorisation process. After your customer\nhas been redirected back to your application you should use the \"Show Account Link Details\"\nendpoint to check the state of the Account Link has been set to \"consented\"."
parameters: []
responses:
201:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 176491d6
status: created
merchant_reference: TEST-1706026366
expires_at: '2024-07-21T16:12:47+00:00'
created_at: '2024-01-23T16:12:47+00:00'
return_url: 'https://your-website.example.com/redirect'
permissions:
- ReadAccountsDetail
- ReadTransactionsDetail
- ReadTransactionsCredits
- ReadTransactionsDebits
- ReadBalances
- ReadBeneficiariesDetail
- ReadDirectDebits
- ReadStandingOrdersDetail
- ReadAccountsBasic
aspsp:
name: natwest_ais
display_name: 'NatWest (Staging)'
consent_status: null
link_url: 'https://wonderful.co.uk/link-account/176491d6?signature=fa4554d9b0e0bf0ac1ac9c48578994a008e05c146eb5f37d226f5fff99b45373'
properties:
data:
type: object
properties:
id:
type: string
example: 176491d6
status:
type: string
example: created
merchant_reference:
type: string
example: TEST-1706026366
expires_at:
type: string
example: '2024-07-21T16:12:47+00:00'
created_at:
type: string
example: '2024-01-23T16:12:47+00:00'
return_url:
type: string
example: 'https://your-website.example.com/redirect'
permissions:
type: array
example:
- ReadAccountsDetail
- ReadTransactionsDetail
- ReadTransactionsCredits
- ReadTransactionsDebits
- ReadBalances
- ReadBeneficiariesDetail
- ReadDirectDebits
- ReadStandingOrdersDetail
- ReadAccountsBasic
items:
type: string
aspsp:
type: object
properties:
name:
type: string
example: natwest_ais
display_name:
type: string
example: 'NatWest (Staging)'
consent_status:
type: string
example: null
link_url:
type: string
example: 'https://wonderful.co.uk/link-account/176491d6?signature=fa4554d9b0e0bf0ac1ac9c48578994a008e05c146eb5f37d226f5fff99b45373'
401:
description: 'invalid token'
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
description: 'The state of the AIS Account Link. Example: created'
enum: []
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
selected_aspsp:
type: string
description: 'The ASPSP that the customer banks with (this determines which banking app to open). Values should match those provided from the Supported Banks endpoint. The name of an existing record in the App\Models\Aspsp table.'
example: natwest_ais
nullable: false
merchant_reference:
type: string
description: 'Your account link reference. This must be unique and should uniquely identify the account link on your system.'
example: MYREF-690B42D4B12BC
nullable: false
expires_at:
type: string
description: 'The date and time you want the account link to expire. Must be a valid date.'
example: '2026-02-05T12:28:04+00:00'
nullable: false
permissions:
type: array
description: 'Array of required AIS permissions as defined by Open Banking.'
example:
-
- ReadAccountsDetail
- ReadBalances
- ReadTransactionsDetail
- ReadTransactionsDebits
- ReadTransactionsCredits
items:
type: string
enum:
- ReadAccountsBasic
- ReadAccountsDetail
- ReadBalances
- ReadBeneficiariesBasic
- ReadBeneficiariesDetail
- ReadDirectDebits
- ReadOffers
- ReadPAN
- ReadParty
- ReadPartyPSU
- ReadProducts
- ReadStandingOrdersBasic
- ReadStandingOrdersDetail
- ReadStatementsBasic
- ReadStatementsDetail
- ReadTransactionsBasic
- ReadTransactionsCredits
- ReadTransactionsDebits
- ReadTransactionsDetail
- ReadScheduledPaymentsBasic
- ReadScheduledPaymentsDetail
transactions_start_at:
type: string
description: 'The date and time you want read transactions from. Must be a valid date.'
example: '2025-10-05T12:28:04+01:00'
nullable: false
transactions_end_at:
type: string
description: 'The date and time you want read transactions until. Must be a valid date.'
example: '2025-11-05T12:28:04+00:00'
nullable: false
return_url:
type: string
description: 'The URL we will redirect your user back to after they have accepted/declined consent at their bank. Must be a valid URL.'
example: 'https://your-website.example.com/redirect'
nullable: false
required:
- selected_aspsp
- merchant_reference
- return_url
'/api/public/v1/account-links/{ais_account_link_id}':
get:
summary: 'Show Account Link Details'
operationId: showAccountLinkDetails
description: ''
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
id: 176491d6
status: consented
merchant_reference: TEST-1706026366
expires_at: '2024-07-21T16:12:58+00:00'
created_at: '2024-01-23T16:12:47+00:00'
return_url: 'https://eoz5oi25gqxj9rb.m.pipedream.net/'
permissions:
- ReadAccountsDetail
- ReadAccountsDetail
- ReadAccountsDetail
- ReadTransactionsDetail
- ReadTransactionsCredits
- ReadTransactionsDebits
- ReadBalances
- ReadBeneficiariesDetail
- ReadDirectDebits
- ReadStandingOrdersDetail
- ReadAccountsBasic
aspsp:
name: natwest_ais
display_name: 'NatWest (Staging)'
consent_status: Authorised
properties:
data:
type: object
properties:
id:
type: string
example: 176491d6
status:
type: string
example: consented
merchant_reference:
type: string
example: TEST-1706026366
expires_at:
type: string
example: '2024-07-21T16:12:58+00:00'
created_at:
type: string
example: '2024-01-23T16:12:47+00:00'
return_url:
type: string
example: 'https://eoz5oi25gqxj9rb.m.pipedream.net/'
permissions:
type: array
example:
- ReadAccountsDetail
- ReadAccountsDetail
- ReadAccountsDetail
- ReadTransactionsDetail
- ReadTransactionsCredits
- ReadTransactionsDebits
- ReadBalances
- ReadBeneficiariesDetail
- ReadDirectDebits
- ReadStandingOrdersDetail
- ReadAccountsBasic
items:
type: string
aspsp:
type: object
properties:
name:
type: string
example: natwest_ais
display_name:
type: string
example: 'NatWest (Staging)'
consent_status:
type: string
example: Authorised
401:
description: 'invalid token'
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
description: 'The state of the AIS Account Link. Example: consented'
enum: []
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
404:
description: 'not found'
content:
application/json:
schema:
type: object
example:
status: error
error_code: not_found
error_message: 'Account link not found.'
properties:
status:
type: string
example: error
description: 'The state of the AIS Account Link. Example: consented'
enum: []
error_code:
type: string
example: not_found
error_message:
type: string
example: 'Account link not found.'
tags:
- 'Account Information Services'
delete:
summary: 'Revoke Account Link'
operationId: revokeAccountLink
description: ''
parameters: []
responses: { }
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: omnis
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/accounts':
get:
summary: 'List Accounts'
operationId: listAccounts
description: "Show account details for all linked Accounts.\n\n- Requires permissions: `ReadAccountsBasic` or `ReadAccountsDetail`\n- OB Endpoint: GET /accounts\n- ASPSP Implementation : Mandatory"
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
account:
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
currency: GBP
account_type: Personal
account_sub_type: Savings
description: Personal
nickname: 'Sydney Beard'
account:
-
scheme_name: UK.OBIE.SortCodeAccountNumber
identification: '50000012345602'
name: 'Sydney Beard'
-
account_id: 3910a968-c46a-44d0-b648-015af1e92cfe
currency: GBP
account_type: Personal
account_sub_type: CurrentAccount
description: Personal
nickname: 'Sydney Beard'
account:
-
scheme_name: UK.OBIE.SortCodeAccountNumber
identification: '50000012345601'
name: 'Sydney Beard'
links:
self: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts'
properties:
data:
type: object
properties:
account:
type: array
example:
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
currency: GBP
account_type: Personal
account_sub_type: Savings
description: Personal
nickname: 'Sydney Beard'
account:
-
scheme_name: UK.OBIE.SortCodeAccountNumber
identification: '50000012345602'
name: 'Sydney Beard'
-
account_id: 3910a968-c46a-44d0-b648-015af1e92cfe
currency: GBP
account_type: Personal
account_sub_type: CurrentAccount
description: Personal
nickname: 'Sydney Beard'
account:
-
scheme_name: UK.OBIE.SortCodeAccountNumber
identification: '50000012345601'
name: 'Sydney Beard'
items:
type: object
properties:
account_id:
type: string
example: 184bfebc-1314-41aa-9d76-af7e84f90696
currency:
type: string
example: GBP
account_type:
type: string
example: Personal
account_sub_type:
type: string
example: Savings
description:
type: string
example: Personal
nickname:
type: string
example: 'Sydney Beard'
account:
type: array
example:
-
scheme_name: UK.OBIE.SortCodeAccountNumber
identification: '50000012345602'
name: 'Sydney Beard'
items:
type: object
properties:
scheme_name:
type: string
example: UK.OBIE.SortCodeAccountNumber
identification:
type: string
example: '50000012345602'
name:
type: string
example: 'Sydney Beard'
links:
type: object
properties:
self:
type: string
example: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts'
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: ipsam
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/accounts/{account_id}':
get:
summary: 'Show Account Details'
operationId: showAccountDetails
description: "Account details for a specific linked Account\n\n- Requires permissions: `ReadAccountsBasic` or `ReadAccountsDetail`\n- OB Endpoint: GET /accounts/{accountId}\n- ASPSP Implementation : Mandatory"
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
account:
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
currency: GBP
account_type: Personal
account_sub_type: Savings
description: Personal
nickname: 'Sydney Beard'
account:
-
scheme_name: UK.OBIE.SortCodeAccountNumber
identification: '50000012345602'
name: 'Sydney Beard'
links:
self: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696'
properties:
data:
type: object
properties:
account:
type: array
example:
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
currency: GBP
account_type: Personal
account_sub_type: Savings
description: Personal
nickname: 'Sydney Beard'
account:
-
scheme_name: UK.OBIE.SortCodeAccountNumber
identification: '50000012345602'
name: 'Sydney Beard'
items:
type: object
properties:
account_id:
type: string
example: 184bfebc-1314-41aa-9d76-af7e84f90696
currency:
type: string
example: GBP
account_type:
type: string
example: Personal
account_sub_type:
type: string
example: Savings
description:
type: string
example: Personal
nickname:
type: string
example: 'Sydney Beard'
account:
type: array
example:
-
scheme_name: UK.OBIE.SortCodeAccountNumber
identification: '50000012345602'
name: 'Sydney Beard'
items:
type: object
properties:
scheme_name:
type: string
example: UK.OBIE.SortCodeAccountNumber
identification:
type: string
example: '50000012345602'
name:
type: string
example: 'Sydney Beard'
links:
type: object
properties:
self:
type: string
example: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696'
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: et
required: true
schema:
type: string
-
in: path
name: account_id
description: 'The ID of the account.'
example: natus
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/balances':
get:
summary: 'List Balances'
operationId: listBalances
description: "Returns the balances for all linked Accounts.\n\n- Requires permissions: `ReadBalances`\n- OB Endpoint: GET /balances\n- ASPSP Implementation : Optional"
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
-
description: ''
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
404:
description: 'endpoint not supported: {'
content:
text/plain:
schema:
type: string
example: 'status":"error","error_code":"not_supported","error_message":"This ASPSP does not support the Balances bulk endpoint","account_link":"176491d6"}'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: culpa
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/accounts/{account_id}/balances':
get:
summary: 'Account Balances'
operationId: accountBalances
description: "List the Balances for a specific linked Account\n\n- Requires permissions: `ReadBalances`\n- OB Endpoint: GET /accounts/{accountId}/balances\n- ASPSP Implementation : Mandatory"
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
balance:
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
credit_debit_indicator: Credit
type: Expected
date_time: '2024-01-16T16:44:36.813Z'
amount:
amount: '94213.07'
currency: GBP
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
credit_debit_indicator: Credit
type: ForwardAvailable
date_time: '2024-01-16T16:44:36.813Z'
amount:
amount: '94213.07'
currency: GBP
links:
self: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696/balances'
properties:
data:
type: object
properties:
balance:
type: array
example:
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
credit_debit_indicator: Credit
type: Expected
date_time: '2024-01-16T16:44:36.813Z'
amount:
amount: '94213.07'
currency: GBP
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
credit_debit_indicator: Credit
type: ForwardAvailable
date_time: '2024-01-16T16:44:36.813Z'
amount:
amount: '94213.07'
currency: GBP
items:
type: object
properties:
account_id:
type: string
example: 184bfebc-1314-41aa-9d76-af7e84f90696
credit_debit_indicator:
type: string
example: Credit
type:
type: string
example: Expected
date_time:
type: string
example: '2024-01-16T16:44:36.813Z'
amount:
type: object
properties:
amount:
type: string
example: '94213.07'
currency:
type: string
example: GBP
links:
type: object
properties:
self:
type: string
example: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696/balances'
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: est
required: true
schema:
type: string
-
in: path
name: account_id
description: 'The ID of the account.'
example: quisquam
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/beneficiaries':
get:
summary: 'List Beneficiaries'
operationId: listBeneficiaries
description: "Beneficiaries of all linked accounts\n\n- Requires permissions: `ReadBeneficiariesBasic` or `ReadBeneficiariesDetail`\n- OB Endpoint: GET /beneficiaries\n- ASPSP Implementation : Optional"
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
-
description: ''
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
404:
description: 'endpoint not supported'
content:
application/json:
schema:
type: object
example:
status: error
error_code: not_supported
error_message: 'This ASPSP does not support the Beneficiaries bulk endpoint'
account_link: 176491d6
properties:
status:
type: string
example: error
error_code:
type: string
example: not_supported
error_message:
type: string
example: 'This ASPSP does not support the Beneficiaries bulk endpoint'
account_link:
type: string
example: 176491d6
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: nobis
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/accounts/{account_id}/beneficiaries':
get:
summary: 'Account Beneficiaries'
operationId: accountBeneficiaries
description: "Beneficiaries for a specific linked Account\n\n- Requires permissions: `ReadBeneficiariesBasic` or `ReadBeneficiariesDetail`\n- OB Endpoint: GET /accounts/{accountId}/beneficiaries\n- ASPSP Implementation : Conditional"
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
beneficiary: []
links:
self: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696/beneficiaries'
properties:
data:
type: object
properties:
beneficiary:
type: array
example: []
links:
type: object
properties:
self:
type: string
example: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696/beneficiaries'
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: voluptatum
required: true
schema:
type: string
-
in: path
name: account_id
description: 'The ID of the account.'
example: ut
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/direct-debits':
get:
summary: 'List Direct Debits'
operationId: listDirectDebits
description: "Direct Debits for all linked Accounts\n\n- Requires permissions: `ReadDirectDebits`\n- OB Endpoint: GET /direct-debits\n- ASPSP Implementation : Optional"
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
-
description: ''
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
404:
description: 'endpoint not supported'
content:
application/json:
schema:
type: object
example:
status: error
error_code: not_supported
error_message: 'This ASPSP does not support the Direct Debit bulk endpoint'
account_link: 176491d6
properties:
status:
type: string
example: error
error_code:
type: string
example: not_supported
error_message:
type: string
example: 'This ASPSP does not support the Direct Debit bulk endpoint'
account_link:
type: string
example: 176491d6
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: laborum
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/accounts/{account_id}/direct-debits':
get:
summary: 'Account Direct Debits'
operationId: accountDirectDebits
description: "Direct Debits for a specific linked Account\n\n- Requires permissions: `ReadDirectDebits`\n- OB Endpoint: GET /accounts/{accountId}/direct-debits\n- ASPSP Implementation : Conditional"
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
direct_debit: []
links:
self: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696/direct-debits'
properties:
data:
type: object
properties:
direct_debit:
type: array
example: []
links:
type: object
properties:
self:
type: string
example: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696/direct-debits'
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: quis
required: true
schema:
type: string
-
in: path
name: account_id
description: 'The ID of the account.'
example: quibusdam
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/party':
get:
summary: 'PSU Party'
operationId: pSUParty
description: "Returns the details of the user that authorised the Account Link.\n\n- Requires permissions: `ReadPartyPSU`\n- OB Endpoint: GET /party\n- ASPSP Implementation : Conditional"
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: tempora
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/accounts/{account_id}/parties':
get:
summary: 'Account Parties'
operationId: accountParties
description: "Return details on the account owner(s)/holder(s) and operator(s).\n\n- Requires permissions: `ReadParty`\n- OB Endpoint: GET /accounts/{accountId}/parties\n- ASPSP Implementation : Conditional"
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: vero
required: true
schema:
type: string
-
in: path
name: account_id
description: 'The ID of the account.'
example: ut
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/accounts/{account_id}/party':
get:
summary: 'Account Party'
operationId: accountParty
description: "Return details on the account owner/holder:\n- In the case of a business, this will be the details of the business\n- In the case of a joint account, this will be the party that has given authorisation to the AISP to view the account\n\n- Requires permissions: `ReadParty`\n- OB Endpoint: GET /accounts/{accountId}/party\n- ASPSP Implementation : Conditional"
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: pariatur
required: true
schema:
type: string
-
in: path
name: account_id
description: 'The ID of the account.'
example: quia
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/scheduled-payments':
get:
summary: 'List Scheduled Payments'
operationId: listScheduledPayments
description: "Scheduled Payments for all linked Accounts\n\n- Requires permissions: `ReadScheduledPaymentsBasic` or `ReadScheduledPaymentsDetail`\n- OB Endpoint: GET /scheduled-payments\n- ASPSP Implementation : Optional"
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: alias
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/accounts/{account_id}/scheduled-payments':
get:
summary: 'Account Scheduled Payments'
operationId: accountScheduledPayments
description: "Scheduled Payments for a specific linked Account\n\n- Requires permissions: `ReadScheduledPaymentsBasic` or `ReadScheduledPaymentsDetail`\n- OB Endpoint: GET /accounts/{accountId}/scheduled-payments\n- ASPSP Implementation : Conditional"
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: qui
required: true
schema:
type: string
-
in: path
name: account_id
description: 'The ID of the account.'
example: vel
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/standing-orders':
get:
summary: 'List Standing Orders'
operationId: listStandingOrders
description: "Standing Orders for all linked Accounts\n\n- Requires permissions: `ReadStandingOrdersBasic` or `ReadStandingOrdersDetail`\n- OB Endpoint: GET /standing-orders\n- ASPSP Implementation : Optional"
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
-
description: ''
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
404:
description: 'endpoint not supported'
content:
application/json:
schema:
type: object
example:
status: error
error_code: not_supported
error_message: 'This ASPSP does not support the Standing Orders bulk endpoint'
account_link: 176491d6
properties:
status:
type: string
example: error
error_code:
type: string
example: not_supported
error_message:
type: string
example: 'This ASPSP does not support the Standing Orders bulk endpoint'
account_link:
type: string
example: 176491d6
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: ullam
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/accounts/{account_id}/standing-orders':
get:
summary: 'Account Standing Orders'
operationId: accountStandingOrders
description: "Standing Orders for a specific linked Account\n\n\n- Requires permissions: `ReadStandingOrdersBasic` or `ReadStandingOrdersDetail`\n- OB Endpoint: GET /accounts/{accountId}/standing-orders\n- ASPSP Implementation : Conditional"
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
standing_order: []
links:
self: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696/standing-orders'
properties:
data:
type: object
properties:
standing_order:
type: array
example: []
links:
type: object
properties:
self:
type: string
example: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696/standing-orders'
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: dolores
required: true
schema:
type: string
-
in: path
name: account_id
description: 'The ID of the account.'
example: ipsa
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/transactions':
get:
summary: 'List Transactions'
operationId: listTransactions
description: "Transactions for all linked Accounts\n\n- Requires permissions: `ReadTransactionsCredits` and/or `ReadTransactionsDebits`, plus `ReadTransactionsBasic` or `ReadTransactionsDetail`\n- OB Endpoint: GET /transactions\n- ASPSP Implementation : Optional"
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
-
description: ''
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
404:
description: 'endpoint not supported'
content:
application/json:
schema:
type: object
example:
status: error
error_code: not_supported
error_message: 'This ASPSP does not support the Transactions bulk endpoint'
account_link: 176491d6
properties:
status:
type: string
example: error
error_code:
type: string
example: not_supported
error_message:
type: string
example: 'This ASPSP does not support the Transactions bulk endpoint'
account_link:
type: string
example: 176491d6
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: dolores
required: true
schema:
type: string
'/api/public/v1/{ais_account_link_id}/accounts/{account_id}/transactions':
get:
summary: 'Account Transactions'
operationId: accountTransactions
description: "Transactions for a specific linked Account\n\n- Requires permissions: `ReadTransactionsCredits` and/or `ReadTransactionsDebits`, plus `ReadTransactionsBasic` or `ReadTransactionsDetail`\n- OB Endpoint: GET /accounts/{accountId}/transactions\n- ASPSP Implementation : Mandatory"
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
transaction:
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
transaction_id: 8cda05f1-39bb-4824-84a1-78a41b60260c
credit_debit_indicator: Debit
status: Booked
booking_date_time: '2024-01-16T16:44:36.813Z'
amount:
amount: '25.00'
currency: GBP
proprietary_bank_transaction_code:
code: TFR
transaction_information: WNDRFL000043963
balance:
credit_debit_indicator: Credit
type: Information
amount:
amount: '94213.07'
currency: GBP
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
transaction_id: 667de332-ef37-4758-be57-cc063318d75b
credit_debit_indicator: Debit
status: Booked
booking_date_time: '2024-01-15T10:16:51.046Z'
amount:
amount: '0.20'
currency: GBP
proprietary_bank_transaction_code:
code: TFR
transaction_information: WOO-87EB1D-59
balance:
credit_debit_indicator: Credit
type: Information
amount:
amount: '94238.07'
currency: GBP
links:
self: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696/transactions'
properties:
data:
type: object
properties:
transaction:
type: array
example:
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
transaction_id: 8cda05f1-39bb-4824-84a1-78a41b60260c
credit_debit_indicator: Debit
status: Booked
booking_date_time: '2024-01-16T16:44:36.813Z'
amount:
amount: '25.00'
currency: GBP
proprietary_bank_transaction_code:
code: TFR
transaction_information: WNDRFL000043963
balance:
credit_debit_indicator: Credit
type: Information
amount:
amount: '94213.07'
currency: GBP
-
account_id: 184bfebc-1314-41aa-9d76-af7e84f90696
transaction_id: 667de332-ef37-4758-be57-cc063318d75b
credit_debit_indicator: Debit
status: Booked
booking_date_time: '2024-01-15T10:16:51.046Z'
amount:
amount: '0.20'
currency: GBP
proprietary_bank_transaction_code:
code: TFR
transaction_information: WOO-87EB1D-59
balance:
credit_debit_indicator: Credit
type: Information
amount:
amount: '94238.07'
currency: GBP
items:
type: object
properties:
account_id:
type: string
example: 184bfebc-1314-41aa-9d76-af7e84f90696
transaction_id:
type: string
example: 8cda05f1-39bb-4824-84a1-78a41b60260c
credit_debit_indicator:
type: string
example: Debit
status:
type: string
example: Booked
booking_date_time:
type: string
example: '2024-01-16T16:44:36.813Z'
amount:
type: object
properties:
amount:
type: string
example: '25.00'
currency:
type: string
example: GBP
proprietary_bank_transaction_code:
type: object
properties:
code:
type: string
example: TFR
transaction_information:
type: string
example: WNDRFL000043963
balance:
type: object
properties:
credit_debit_indicator:
type: string
example: Credit
type:
type: string
example: Information
amount:
type: object
properties:
amount:
type: string
example: '94213.07'
currency:
type: string
example: GBP
links:
type: object
properties:
self:
type: string
example: 'https://wonderful.co.uk/api/public/v1/176491d6/accounts/184bfebc-1314-41aa-9d76-af7e84f90696/transactions'
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Account Information Services'
parameters:
-
in: path
name: ais_account_link_id
description: 'The ID of the ais account link.'
example: mollitia
required: true
schema:
type: string
-
in: path
name: account_id
description: 'The ID of the account.'
example: aut
required: true
schema:
type: string
'/api/public/v1/payments/{payment}':
get:
summary: 'Show Payment Request.'
operationId: showPaymentRequest
description: "This endpoint will return the current state of your Payment Request. You will need to provide the Wonderful\nPayment ID we sent you in the HTTP response when you created the Payment Request, so make sure you keep track of\nthat as that is the only value we currently support to look up an existing payment."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
status: ''
amount: null
formatted_amount: ''
currency: ''
customer_email_hash: 832a8c7bcdd314b13178fdef5f94c3f9017250e67d9cc65bd607a02d587321be
payment_reference: ''
wonderful_payments_id: ''
created_at: ''
selected_bank: null
redirect_url: ''
webhook_url: ''
is_refundable: false
properties:
data:
type: object
properties:
status:
type: string
example: ''
amount:
type: string
example: null
formatted_amount:
type: string
example: ''
currency:
type: string
example: ''
customer_email_hash:
type: string
example: 832a8c7bcdd314b13178fdef5f94c3f9017250e67d9cc65bd607a02d587321be
payment_reference:
type: string
example: ''
wonderful_payments_id:
type: string
example: ''
created_at:
type: string
example: ''
selected_bank:
type: string
example: null
redirect_url:
type: string
example: ''
webhook_url:
type: string
example: ''
is_refundable:
type: boolean
example: false
401:
description: 'Invalid auth token'
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
description: 'Current status. Enum: created, selected, consented, redirected, authed, pending, accepted, completed, rejected, cancelled, errored, expired. Example: completed'
enum: []
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
404:
description: 'Payment Request not found'
content:
application/json:
schema:
type: object
example:
status: error
error_code: not_found
error_message: 'no payment found'
properties:
status:
type: string
example: error
description: 'Current status. Enum: created, selected, consented, redirected, authed, pending, accepted, completed, rejected, cancelled, errored, expired. Example: completed'
enum: []
error_code:
type: string
example: not_found
error_message:
type: string
example: 'no payment found'
tags:
- 'Payment Requests'
parameters:
-
in: path
name: payment
description: 'Wonderful Payment ID.'
example: 44a3a820-2d9b-43c6-a4e5-666486ec8cfa
required: true
schema:
type: string
/api/public/v1/payments:
post:
summary: 'Create a new Payment Request.'
operationId: createANewPaymentRequest
description: "To create a new payment, we need to know who is making the payment, how much the payment should be for, and where\nto send the person making the payment after they have completed the payment or cancelled. You can also optionally\nsend us an extra URL where we will send you webhook updates as the payment is progressing through the checkout.\n\nIf the customer bank name and account details are known they can be set on the request in the `payer` attribute.\nNote: If the account details and ASPSP (bank) do not match, the ASPSP will reject the payment request."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
status: created
payment_reference: WNDRFL000015550
wonderful_payments_id: 48ee6f08-d6d6-4894-8866-2fdca56bcd2e
payment_type: domestic-payments
redirect_to: 'http://wonderful.co.uk/payments/48ee6f08-d6d6-4894-8866-2fdca56bcd2e'
properties:
data:
type: object
properties:
status:
type: string
example: created
payment_reference:
type: string
example: WNDRFL000015550
wonderful_payments_id:
type: string
example: 48ee6f08-d6d6-4894-8866-2fdca56bcd2e
payment_type:
type: string
example: domestic-payments
redirect_to:
type: string
example: 'http://wonderful.co.uk/payments/48ee6f08-d6d6-4894-8866-2fdca56bcd2e'
400:
description: 'Validation error'
content:
application/json:
schema:
type: object
example:
status: error
error_code: failed_validation
error_message: ''
properties:
status:
type: string
example: error
description: 'Current status. Example: created'
enum: []
error_code:
type: string
example: failed_validation
error_message:
type: string
example: ''
401:
description: 'Invalid auth token'
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
description: 'Current status. Example: created'
enum: []
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Payment Requests'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
customer_email_address:
type: string
description: 'The email address of the person making the payment i.e. the customer. Must be a valid email address.'
example: customer@example.com
nullable: false
merchant_payment_reference:
type: string
description: 'Your payment reference. This must be unique and should uniquely identify the transaction on your system. Must not be greater than 18 characters.'
example: MY_ORDER_12345
nullable: false
amount:
type: integer
description: 'The payment request amount in pence sterling e.g. £12.45 would be sent as 1245. Must be at least 5.'
example: 12345
nullable: false
redirect_url:
type: string
description: 'The URL to redirect the customer to after the payment has been completed (or cancelled). Must be a valid URL.'
example: 'https://your-website.example.com/return-url'
nullable: false
webhook_url:
type: string
description: 'The URL that you want us to send webhook updates to for this specific transaction. Must be a valid URL.'
example: 'https://your-website.example.com/webhook-url'
nullable: true
selected_aspsp:
type: string
description: 'The ASPSP that the customer banks with (this determines which banking app to open). Values should match those provided from the banks list endpoint. This field is required when payer is present. The name of an existing record in the App\Models\Aspsp table.'
example: natwest
nullable: false
consented_at:
type: string
description: 'ISO 8601 date time string that represents when the customer consented to Wonderful processing a payment initiation on their behalf. This field is required when selected_aspsp or payer is present. Must be a valid date.'
example: '2025-11-05T12:28:04+00:00'
nullable: false
payer:
type: object
description: ''
example: []
nullable: false
properties:
account_name:
type: string
description: 'The name of the customer as it appears on their bank account. This field is required when payer is present.'
example: 'Sydney Beard'
nullable: false
account_number:
type: string
description: "The customer's bank account number. Must be 8 digits, zero-padded. This field is required when payer is present. Must be 8 characters."
example: '12345602'
nullable: false
sort_code:
type: string
description: "The customer's bank sort code. Must be 6 digits, zero-padded. This field is required when payer is present. Must be 6 characters."
example: '500000'
nullable: false
required:
- customer_email_address
- merchant_payment_reference
- amount
- redirect_url
'/api/public/v1/recurring-payments/{payment}':
get:
summary: 'Show Recurring Payment Request.'
operationId: showRecurringPaymentRequest
description: "This endpoint will return the current state of your Recurring Payment Request. You will need to provide the Wonderful\nPayment ID we sent you in the HTTP response when you created the Recurring Payment Request, so make sure you keep track of\nthat as that is the only value we currently support to look up an existing recurring payment."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
status: expired
amount: 15
formatted_amount: '0.15'
currency: GBP
customer_email_hash: 832a8c7bcdd314b13178fdef5f94c3f9017250e67d9cc65bd607a02d587321be
payment_reference: WNDRFL000015550
wonderful_payments_id: 48ee6f08-d6d6-4894-8866-2fdca56bcd2e
created_at: '2022-08-10T12:47:55.000000Z'
selected_bank: null
redirect_url: 'https://wonderful-org.test/payment-redirect'
webhook_url: 'https://wonderful-org.test/webhooks/v1/wonderful-payments'
properties:
data:
type: object
properties:
status:
type: string
example: expired
amount:
type: integer
example: 15
formatted_amount:
type: string
example: '0.15'
currency:
type: string
example: GBP
customer_email_hash:
type: string
example: 832a8c7bcdd314b13178fdef5f94c3f9017250e67d9cc65bd607a02d587321be
payment_reference:
type: string
example: WNDRFL000015550
wonderful_payments_id:
type: string
example: 48ee6f08-d6d6-4894-8866-2fdca56bcd2e
created_at:
type: string
example: '2022-08-10T12:47:55.000000Z'
selected_bank:
type: string
example: null
redirect_url:
type: string
example: 'https://wonderful-org.test/payment-redirect'
webhook_url:
type: string
example: 'https://wonderful-org.test/webhooks/v1/wonderful-payments'
401:
description: 'Invalid auth token'
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
description: 'Current status. Enum: created, selected, consented, redirected, authed, pending, accepted, completed, rejected, cancelled, errored, expired. Example: completed'
enum: []
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
404:
description: 'Payment Request not found'
content:
application/json:
schema:
type: object
example:
status: error
error_code: not_found
error_message: 'no recurring payment found'
properties:
status:
type: string
example: error
description: 'Current status. Enum: created, selected, consented, redirected, authed, pending, accepted, completed, rejected, cancelled, errored, expired. Example: completed'
enum: []
error_code:
type: string
example: not_found
error_message:
type: string
example: 'no recurring payment found'
tags:
- 'Payment Requests'
parameters:
-
in: path
name: payment
description: 'Wonderful Payment ID.'
example: 44a3a820-2d9b-43c6-a4e5-666486ec8cfa
required: true
schema:
type: string
/api/public/v1/recurring-payments:
post:
summary: 'Create a new Recurring Payment Request.'
operationId: createANewRecurringPaymentRequest
description: "To create a new recurring payment, we need to know who is making the payment, how much the payment should be for,\nhow often it should be repeated, and where\nto send the person making the payment after they have completed the payment or cancelled. You can also optionally\nsend us an extra URL where we will send you webhook updates as the payment is progressing through the checkout."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
status: expired
amount: 15
formatted_amount: '0.15'
currency: GBP
customer_email_hash: 832a8c7bcdd314b13178fdef5f94c3f9017250e67d9cc65bd607a02d587321be
payment_reference: WNDRFL000015550
wonderful_payments_id: 48ee6f08-d6d6-4894-8866-2fdca56bcd2e
created_at: '2022-08-10T12:47:55.000000Z'
selected_bank: null
redirect_url: 'https://wonderful-org.test/payment-redirect'
webhook_url: 'https://wonderful-org.test/webhooks/v1/wonderful-payments'
properties:
data:
type: object
properties:
status:
type: string
example: expired
amount:
type: integer
example: 15
formatted_amount:
type: string
example: '0.15'
currency:
type: string
example: GBP
customer_email_hash:
type: string
example: 832a8c7bcdd314b13178fdef5f94c3f9017250e67d9cc65bd607a02d587321be
payment_reference:
type: string
example: WNDRFL000015550
wonderful_payments_id:
type: string
example: 48ee6f08-d6d6-4894-8866-2fdca56bcd2e
created_at:
type: string
example: '2022-08-10T12:47:55.000000Z'
selected_bank:
type: string
example: null
redirect_url:
type: string
example: 'https://wonderful-org.test/payment-redirect'
webhook_url:
type: string
example: 'https://wonderful-org.test/webhooks/v1/wonderful-payments'
400:
description: 'Validation error'
content:
application/json:
schema:
type: object
example:
status: error
error_code: failed_validation
error_message: ''
properties:
status:
type: string
example: error
description: 'Current status. Enum: created, selected, consented, redirected, authed, pending, accepted, completed, rejected, cancelled, errored, expired. Example: completed'
enum: []
error_code:
type: string
example: failed_validation
error_message:
type: string
example: ''
401:
description: 'Invalid auth token'
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
description: 'Current status. Enum: created, selected, consented, redirected, authed, pending, accepted, completed, rejected, cancelled, errored, expired. Example: completed'
enum: []
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Payment Requests'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
customer_email_address:
type: string
description: 'The email address of the person making the payment i.e. the customer. Must be a valid email address.'
example: customer@example.com
nullable: false
merchant_payment_reference:
type: string
description: 'Your payment reference. This must be unique and should uniquely identify the transaction on your system. Must not be greater than 18 characters.'
example: MY_ORDER_12345
nullable: false
amount:
type: integer
description: 'The payment request amount in pence sterling e.g. £12.45 would be sent as 1245. Must be at least 5.'
example: 12345
nullable: false
interval:
type: string
description: 'How often you want the payment to be repeated. Only monthly is currently supported.'
example: monthly
nullable: false
enum:
- daily
- weekly
- monthly
redirect_url:
type: string
description: 'The URL to redirect the customer to after the payment has been completed (or cancelled). Must be a valid URL.'
example: 'https://your-website.example.com/return-url'
nullable: false
webhook_url:
type: string
description: 'The URL that you want us to send webhook updates to for this specific transaction. Must be a valid URL.'
example: 'https://your-website.example.com/webhook-url'
nullable: true
first_payment_date:
type: string
description: 'The date that the first payment will be taken. Must be at least 5 working days in the future. The time section should be provided but will be ignored. Must be a valid date. Must be a date after +5 weekdays.'
example: '2024-12-05 00:00:00'
nullable: true
selected_aspsp:
type: string
description: 'The ASPSP that the customer banks with (this determines which banking app to open). Values should match those provided from the banks list endpoint. This field is required when payer is present. The name of an existing record in the App\Models\Aspsp table.'
example: natwest
nullable: false
consented_at:
type: string
description: 'ISO 8601 date time string that represents when the customer consented to Wonderful processing a payment initiation on their behalf. This field is required when selected_aspsp or payer is present. Must be a valid date.'
example: '2025-11-05T12:28:04+00:00'
nullable: false
payer:
type: object
description: ''
example: []
nullable: false
properties:
account_name:
type: string
description: 'The name of the customer as it appears on their bank account. This field is required when payer is present.'
example: 'Sydney Beard'
nullable: false
account_number:
type: string
description: "The customer's bank account number. Must be 8 digits, zero-padded. This field is required when payer is present. Must be 8 characters."
example: '12345602'
nullable: false
sort_code:
type: string
description: "The customer's bank sort code. Must be 6 digits, zero-padded. This field is required when payer is present. Must be 6 characters."
example: '500000'
nullable: false
required:
- customer_email_address
- merchant_payment_reference
- amount
- interval
- redirect_url
'/api/public/v1/payments/{payment}/refunds':
get:
summary: ''
operationId: getApiPublicV1PaymentsPaymentRefunds
description: ''
parameters: []
responses:
401:
description: ''
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Refund Requests'
post:
summary: 'Create a new Refund Request.'
operationId: createANewRefundRequest
description: "To create a new refund, we need to how much the refund should be for, and where\nto send the person making the payment after they have completed the payment or cancelled. You can also optionally\nsend us an extra URL where we will send you webhook updates as the payment is progressing through the checkout."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
type: object
example:
data:
status: created
payment_reference: WNDRFL000015550
wonderful_payments_id: 48ee6f08-d6d6-4894-8866-2fdca56bcd2e
payment_type: domestic-payments
redirect_to: 'https://wonderful.co.uk/payments/48ee6f08-d6d6-4894-8866-2fdca56bcd2e'
properties:
data:
type: object
properties:
status:
type: string
example: created
payment_reference:
type: string
example: WNDRFL000015550
wonderful_payments_id:
type: string
example: 48ee6f08-d6d6-4894-8866-2fdca56bcd2e
payment_type:
type: string
example: domestic-payments
redirect_to:
type: string
example: 'https://wonderful.co.uk/payments/48ee6f08-d6d6-4894-8866-2fdca56bcd2e'
400:
description: 'Validation error'
content:
application/json:
schema:
type: object
example:
status: error
error_code: failed_validation
error_message: ''
properties:
status:
type: string
example: error
description: 'Current status. Example: created'
enum: []
error_code:
type: string
example: failed_validation
error_message:
type: string
example: ''
401:
description: 'Invalid auth token'
content:
application/json:
schema:
type: object
example:
status: error
error_code: unauthorized
error_message: 'Invalid Bearer Token'
properties:
status:
type: string
example: error
description: 'Current status. Example: created'
enum: []
error_code:
type: string
example: unauthorized
error_message:
type: string
example: 'Invalid Bearer Token'
tags:
- 'Refund Requests'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
amount:
type: integer
description: 'The refund request amount in pence sterling e.g. £12.45 would be sent as 1245. Must be at least 1.'
example: 12345
nullable: false
merchant_payment_reference:
type: string
description: 'Your payment reference. This should uniquely identify the refund on your system. Must not be greater than 18 characters.'
example: MY_REFUND_12345
nullable: false
redirect_url:
type: string
description: 'The URL to redirect the merchant to after the refund has been completed (or cancelled). Must be a valid URL.'
example: 'https://your-website.example.com/return-url'
nullable: false
webhook_url:
type: string
description: 'The URL that you want us to send webhook updates to for this specific refund. Must be a valid URL.'
example: 'https://your-website.example.com/webhook-url'
nullable: true
required:
- amount
- redirect_url
parameters:
-
in: path
name: payment
description: 'The payment.'
example: recusandae
required: true
schema:
type: string
/api/public/v1/supported-banks:
get:
summary: 'Active ASPSPs List'
operationId: activeASPSPsList
description: "Returns a list of the currently supported ASPSPs, with their current status and latest logo image.\nThe status could be:\n- `online`: no issues reported, payments are being accepted.\n- `issues`: payments are being accepted, but we are aware of some service degradation.\n- `offline`: we support this bank, but payments are not currently being accepted.\n\nWhen an ASPSP is marked as `issues` we may be experiencing some connectivity or processing errors\nbetween Wonderful Payments and the ASPSP. Our systems normally self-heal and return ASPSPs to `online`\nwhen they detect normal service has resumed.\nIn cases where an ASPSP is marked `offline` there may be an active service incident or a situation\nwhere we have manually disabled the connection for our customers benefit. Service disruptions\nwill be communicated on our social channels and on our\n[Wonderful Support](https://wonderful.support) website.\n\n### Selecting the ASPSP at the time of checkout\nWhen creating a Payment Request with the ASPSP selected at the Merchant, use the `aspsp_name`\nfrom this endpoint as the `selected_aspsp` value when creating the Payment Request.\nFor example, to select \"Bank of Scotland\" use the value `bos`."
parameters:
-
in: query
name: type
description: 'The ASPSP type you require. Set to `ais` to return AIS (accounts) banks. Returns PIS (payments) by default.'
example: pis
required: false
schema:
type: string
description: 'The ASPSP type you require. Set to `ais` to return AIS (accounts) banks. Returns PIS (payments) by default.'
example: pis
nullable: false
enum:
- ais
- pis
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: ''
type: object
example:
data:
aspsp_name: santander
display_name: 'SANTANDER (sandbox)'
logo: 'http://wonderful.co.uk/img/bank_logos/santander.png'
status: testing
properties:
data:
type: object
properties:
aspsp_name:
type: string
example: santander
display_name:
type: string
example: 'SANTANDER (sandbox)'
logo:
type: string
example: 'http://wonderful.co.uk/img/bank_logos/santander.png'
status:
type: string
example: testing
-
description: 'PIS (Payments) list'
type: object
example:
data:
-
aspsp_name: aib
display_name: 'Allied Irish Bank (GB)'
logo: 'https://payments.test/img/bank_logos/aib.png'
status: online
-
aspsp_name: danske
display_name: 'Danske Bank'
logo: 'https://payments.test/img/bank_logos/danske.png'
status: online
properties:
data:
type: array
example:
-
aspsp_name: aib
display_name: 'Allied Irish Bank (GB)'
logo: 'https://payments.test/img/bank_logos/aib.png'
status: online
-
aspsp_name: danske
display_name: 'Danske Bank'
logo: 'https://payments.test/img/bank_logos/danske.png'
status: online
items:
type: object
properties:
aspsp_name:
type: string
example: aib
display_name:
type: string
example: 'Allied Irish Bank (GB)'
logo:
type: string
example: 'https://payments.test/img/bank_logos/aib.png'
status:
type: string
example: online
tags:
- 'Supported Banks'
tags:
-
name: 'Account Information Services'
description: ''
-
name: 'Payment Requests'
description: ''
-
name: 'Refund Requests'
description: ''
-
name: 'Supported Banks'
description: ''
components:
securitySchemes:
default:
type: http
scheme: bearer
description: 'You can request your Public API token by contacting Wonderful support.'
security:
-
default: []