Yapily Payments API (PIS)
Payment Initiation Service Provider (PISP) endpoints for initiating single, scheduled, periodic, bulk, and international payments directly from a customer's bank account. Single-use consent per payment.
Payment Initiation Service Provider (PISP) endpoints for initiating single, scheduled, periodic, bulk, and international payments directly from a customer's bank account. Single-use consent per payment.
openapi: 3.0.1
info:
title: Yapily Payments API (PIS)
description: Payment Initiation Service Provider (PISP) endpoints for initiating single, scheduled, periodic, bulk, and
international payments directly from a customer's bank account.
version: 12.4.0
contact:
name: Yapily Support
url: https://docs.yapily.com/resources/support
email: support@yapily.com
servers:
- url: https://api.yapily.com
security:
- basicAuth: []
tags:
- description: In order to make a Payment on behalf of a user, you are required to request an [Authorisation](#tag/Authorisations)
from the user to authorise the user's account to make the payment from. Once a `consent-token` is obtained, you can call
the necessary Payments endpoint(s) to execute a payment.
name: Payments
paths:
/bulk-payments:
post:
description: "Creates a bulk payment after obtaining the user's authorisation. \n\nFeature: `CREATE_BULK_PAYMENT`"
operationId: createBulkPayment
parameters:
- description: __Mandatory__. The `consent-token` containing the user's authorisation to make the request.
example: '{consentToken}'
in: header
name: consent
required: true
schema:
type: string
- description: "__Conditional__. Represents the user's login ID for the `Institution` to a personal account. \n\nSee\
\ [PSU identifiers](/open-banking-flow/user-authorisation/psu-identifiers) to see if this header is required."
in: header
name: psu-id
required: false
schema:
type: string
- description: "__Conditional__. Represents the user's login ID for the `Institution` to a business account. \n\nSee\
\ [PSU identifiers](/open-banking-flow/user-authorisation/psu-identifiers) to see if this header is required."
in: header
name: psu-corporate-id
required: false
schema:
type: string
- description: "__Conditional__. The IP address of the PSU. \n\nSee [PSU identifiers](/open-banking-flow/user-authorisation/psu-identifiers)\
\ to see if this header is required."
in: header
name: psu-ip-address
required: false
schema:
type: string
requestBody:
content:
application/json;charset=UTF-8:
examples:
UK Bulk Payment Example Request:
$ref: '#/components/examples/uk-bulk-payment-example-request'
schema:
$ref: '#/components/schemas/SubmitBulkPaymentRequest'
required: true
responses:
'201':
content:
application/json;charset=UTF-8:
examples:
UK Bulk Payment Example Response:
$ref: '#/components/examples/uk-bulk-payment-example-response'
schema:
$ref: '#/components/schemas/ApiResponseOfCreateBulkPaymentRequest'
description: Created
default:
content:
application/json;charset=UTF-8:
examples:
Error Response:
$ref: '#/components/examples/error-response-code-401'
schema:
$ref: '#/components/schemas/ApiResponseError'
description: Error Response
summary: Create Bulk Payment
tags:
- Payments
x-mint:
content: '<Info>Learn more: [Bulk Payments Overview](/payments/bulk-payments/overview)</Info>'
/bulk-payments/{bulkPaymentId}:
get:
description: Returns the bulk file status of the bulk payment for given bulkPaymentId
summary: Get Bulk Payment File Status
tags:
- Payments
operationId: getBulkPaymentStatus
parameters:
- schema:
type: string
in: header
name: consent
description: __Mandatory__. The `consent token` containing the user's authorisation to make the request.
required: true
- schema:
type: string
in: path
name: bulkPaymentId
description: __Mandatory__. Bulk payment id returned when bulk payment request was submitted.
required: true
responses:
'200':
description: OK
content:
application/json:
schema:
type: object
properties:
meta:
type: object
properties:
tracingId:
type: string
data:
type: object
properties:
id:
description: Unique identifier of the Bulk Payment
type: string
consentId:
description: Identification of the consent.
type: string
statusDetails:
type: object
properties:
status:
type: string
description: 'Bulk file status. Enum: `COMPLETED` `PENDING` `FAILED` `UNKNOWN`
These values are subject to change.'
updatedAt:
type: string
format: date-time
createdAt:
type: string
format: date-time
examples:
Successful 200 OK:
value:
meta:
tracingId: 27b47dca-fb0f-4448-b470-1cd2d5516d0f
data:
id: 76ad88c7-6e99-4a16-a277-e428a73d1e86
consentId: 5daeb980-5ff5-49db-b7a0-e93dd9c93533
statusDetails:
status: COMPLETED
updatedAt: '2024-07-25T18:14:52.672Z'
createdAt: '2024-07-25T18:14:52.672Z'
'400':
description: Required parameter missing or invalid
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ApiErrorResponseV2'
examples:
Example-1:
$ref: '#/components/examples/400-error-response'
'401':
description: Authentication Error
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ApiErrorResponseV2'
examples:
Example-1:
$ref: '#/components/examples/401-error-response'
'404':
description: Bulk payment not found for provided id
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ApiErrorResponseV2'
examples:
Example-1:
$ref: '#/components/examples/404-error-response'
'500':
description: An unexpected error occurred.
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ApiErrorResponseV2'
examples:
Example-1:
$ref: '#/components/examples/500-error-response'
x-mint:
content: '<Info>Learn more: [Bulk Payment Status Monitoring](/payments/bulk-payments/additional-information#bulk-payment-status-and-monitoring)</Info>'
/bulk-payments/{bulkPaymentId}/details:
get:
description: "Retrieve details of each payment submitted for a given bulkPaymentId. \n\nFeature: `EXISTING_BULK_PAYMENT_DETAILS`"
operationId: getBulkPaymentDetailsById
summary: Get Bulk Payment Status Details
tags:
- Payments
parameters:
- schema:
type: string
in: header
name: consent
description: __Mandatory__. The `consent token` containing the user's authorisation to make the request.
required: true
- schema:
type: string
in: path
name: bulkPaymentId
description: __Mandatory__. Bulk payment id returned when bulk payment request was submitted
required: true
responses:
'200':
description: OK
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/BulkPaymentDetailsResponse'
examples:
Successful 200 OK:
$ref: '#/components/examples/bulk-payment-details-by-id-response'
'400':
description: Required parameter missing or invalid
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ApiErrorResponseV2'
examples:
Example-1:
$ref: '#/components/examples/400-error-response'
'401':
description: Authentication Error
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ApiErrorResponseV2'
examples:
Example-1:
$ref: '#/components/examples/401-error-response'
'404':
description: Bulk payment not found for provided id
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ApiErrorResponseV2'
examples:
Example-1:
$ref: '#/components/examples/404-error-response'
'500':
description: An unexpected error occurred.
content:
application/json;charset=UTF-8:
schema:
$ref: '#/components/schemas/ApiErrorResponseV2'
examples:
Example-1:
$ref: '#/components/examples/500-error-response'
/payments:
post:
description: "Creates a payment after obtaining the user's authorisation. \n\nFeatures:\n\n- `CREATE_DOMESTIC_PERIODIC_PAYMENT`\n\
- `CREATE_DOMESTIC_SCHEDULED_PAYMENT`\n- `CREATE_DOMESTIC_SINGLE_INSTANT_PAYMENT`\n- `CREATE_DOMESTIC_SINGLE_PAYMENT`\n\
- `CREATE_INTERNATIONAL_PERIODIC_PAYMENT`\n- `CREATE_INTERNATIONAL_SCHEDULED_PAYMENT`\n- `CREATE_INTERNATIONAL_SINGLE_PAYMENT`"
operationId: createPayment
parameters:
- description: __Mandatory__. The `consent-token` containing the user's authorisation to make the request.
example: '{consentToken}'
in: header
name: consent
required: true
schema:
type: string
- description: "__Conditional__. Represents the user's login ID for the `Institution` to a personal account. \n\nSee\
\ [PSU identifiers](/open-banking-flow/user-authorisation/psu-identifiers) to see if this header is required."
in: header
name: psu-id
required: false
schema:
title: User Id
type: string
- description: "__Conditional__. Represents the user's login ID for the `Institution` to a business account. \n\nSee\
\ [PSU identifiers](/open-banking-flow/user-authorisation/psu-identifiers) to see if this header is required."
in: header
name: psu-corporate-id
required: false
schema:
title: Corporate User Id
type: string
- description: "__Conditional__. The IP address of the PSU. \n\nSee [PSU identifiers](/open-banking-flow/user-authorisation/psu-identifiers)\
\ to see if this header is required."
in: header
name: psu-ip-address
required: false
schema:
title: User IP Address
type: string
- $ref: '#/components/parameters/SubAppHeader'
requestBody:
content:
application/json;charset=UTF-8:
examples:
EUR Domestic Single Payment Example Request:
$ref: '#/components/examples/eur-domestic-single-payment-example-request'
GBP Domestic Single Payment Example Request:
$ref: '#/components/examples/gbp-domestic-single-payment-example-request'
schema:
$ref: '#/components/schemas/PaymentRequest'
required: true
responses:
'201':
content:
application/json;charset=UTF-8:
examples:
EUR Domestic Single Payment Example Response:
$ref: '#/components/examples/eur-domestic-single-payment-example-response'
GBP Domestic Single Payment Example Response:
$ref: '#/components/examples/gbp-domestic-single-payment-example-response'
schema:
$ref: '#/components/schemas/ApiResponseOfPaymentResponse'
description: Created
default:
content:
application/json;charset=UTF-8:
examples:
Error Response:
$ref: '#/components/examples/error-response-code-401'
schema:
$ref: '#/components/schemas/ApiResponseError'
description: Error Response
summary: Create Payment
tags:
- Payments
x-mint:
content: '<Info>Learn more: [Payment Types](/payments/payment-resources/intro-to-payment-execution#payment-types)
- This endpoint supports 7 payment types (single, periodic, scheduled, international)</Info>'
/payments/{paymentId}/details:
get:
description: "Returns the details of a payment. \n\nMost commonly used to check for payment status updates. \n\nFeature:\
\ `EXISTING_PAYMENTS_DETAILS`"
operationId: getPayments
parameters:
- description: __Mandatory__. The payment Id of the payment.
in: path
name: paymentId
required: true
schema:
type: string
- description: __Mandatory__. The `consent-token` containing the user's authorisation to make the request.
example: '{consentToken}'
in: header
name: consent
required: true
schema:
type: string
- description: "__Conditional__. Represents the user's login ID for the `Institution` to a personal account. \n\nSee\
\ [PSU identifiers](/open-banking-flow/user-authorisation/psu-identifiers) to see if this header is required."
in: header
name: psu-id
required: false
schema:
title: User Id
type: string
- description: "__Conditional__. Represents the user's login ID for the `Institution` to a business account. \n\nSee\
\ [PSU identifiers](/open-banking-flow/user-authorisation/psu-identifiers) to see if this header is required."
in: header
name: psu-corporate-id
required: false
schema:
title: Corporate User Id
type: string
- description: "__Conditional__. The IP address of the PSU. \n\nSee [PSU identifiers](/open-banking-flow/user-authorisation/psu-identifiers)\
\ to see if this header is required."
in: header
name: psu-ip-address
required: false
schema:
title: User IP Address
type: string
- $ref: '#/components/parameters/SubAppHeader'
responses:
'200':
content:
application/json;charset=UTF-8:
examples:
EUR Single Domestic Payment Example Response:
$ref: '#/components/examples/eur-single-domestic-payment-details-example-response'
GBP Single Domestic Payment Example Response:
$ref: '#/components/examples/gbp-single-domestic-payment-details-example-response'
UK Bulk Payment Example Response:
$ref: '#/components/examples/uk-bulk-payment-details-example-response'
schema:
$ref: '#/components/schemas/ApiResponseOfPaymentResponses'
description: Ok
default:
content:
application/json;charset=UTF-8:
examples:
Error Response:
$ref: '#/components/examples/error-response-code-401'
schema:
$ref: '#/components/schemas/ApiResponseError'
description: Error Response
summary: Get Payment Details
tags:
- Payments
x-mint:
content: '<Info>Learn more: [Payment Status Lifecycle](/payments/payment-resources/payment-status) for monitoring
payment execution</Info>'
components:
schemas:
AccountIdentification:
title: Account Identifications
required:
- type
- identification
type: object
properties:
type:
$ref: '#/components/schemas/AccountIdentificationType'
identification:
title: Account Identification
type: string
description: "__Mandatory__. The value associated with the account identification type.\n\n See [Account Identification\
\ Combinations](/payments/payment-resources/intro-to-payment-execution#account-identifications-combinations) for\
\ more information on the format of the values."
example: '401016'
AccountIdentificationType:
title: Account Identification Type
type: string
description: "__Mandatory__. Used to describe the format of the account.\n\n See [Account Identification Combinations](/payments/payment-resources/intro-to-payment-execution#account-identifications-combinations)\
\ for more information on when to specify each type."
example: SORT_CODE
enum:
- SORT_CODE
- ACCOUNT_NUMBER
- IBAN
- BBAN
- BIC
- PAN
- MASKED_PAN
- MSISDN
- BSB
- NCC
- ABA
- ABA_WIRE
- ABA_ACH
- EMAIL
- ROLL_NUMBER
- BLZ
- IFS
- CLABE
- CTN
- BRANCH_CODE
- VIRTUAL_ACCOUNT_ID
Address:
title: Address Details
type: object
properties:
addressLines:
title: Address Lines
type: array
description: __Optional__. The address line of the address
example:
- Ardenham Court
items:
type: string
streetName:
title: Street
type: string
description: __Optional__. The street name of the address
example: Oxford Road
buildingNumber:
title: Building Number
type: string
description: __Optional__. The building number of the address
example: '45'
postCode:
title: Post Code
type: string
description: __Optional__. The post code of the address
example: HP19 3EQ
townName:
title: Town
type: string
description: __Optional__. The town name of the address
example: Aylesbury
county:
title: County
type: array
description: __Optional__. The list of counties for the address
example:
- Buckinghamshire
items:
type: string
country:
title: Country
type: string
description: "__Conditional__. The 2-letter country code for the address. \n\nAn `Institution` may require you to\
\ specify the `country` when used in the context of the `Payee` to be able to make a payment"
example: GB
department:
title: Department
type: string
description: __Optional__. The department for the address
example: Unit 2
subDepartment:
title: Sub-Department
type: string
description: __Optional__. The sub-department for the address
example: Floor 3
addressType:
$ref: '#/components/schemas/AddressTypeEnum'
description: '__Conditional__. The address of the `Payee` or `Payer`.
- `payee.address` is mandatory when the `paymentType` is an `INTERNATIONAL` payment
- An `Institution` may require you to specify the `country` when used in the context of the `Payee` to be able to
make a payment.'
example:
country: GB
AddressTypeEnum:
title: Address Type
type: string
description: __Optional__. The type of address
enum:
- BUSINESS
- CORRESPONDENCE
- DELIVERY_TO
- MAIL_TO
- PO_BOX
- POSTAL
- RESIDENTIAL
- STATEMENT
- UNKNOWN
Amount:
title: Amount Details
required:
- amount
- currency
type: object
properties:
amount:
title: Amount
type: number
description: __Mandatory__. The monetary value
example: 10
currency:
title: Currency
type: string
description: __Mandatory__. The [ISO 4217](https://www.xe.com/iso4217.php) currency code
example: GBP
description: __Mandatory__. Monetary Amount.
ApiError:
type: object
description: Provides details of the error that has occurred.
properties:
code:
type: integer
description: __Mandatory__. Numeric `HTTP` status code associated with the error.
format: int32
institutionError:
$ref: '#/components/schemas/InstitutionError'
message:
type: string
description: __Mandatory__. Description of the exact error that has been experienced.
source:
type: string
status:
type: string
description: __Mandatory__. Textual description of the `HTTP` error status type.
tracingId:
type: string
description: __Optional__. A unique identifier assigned by Yapily for the request that can be used for support
purposes.
ApiErrorResponseV2:
type: object
description: API Error Response
properties:
error:
required:
- tracingId
- code
- status
- issues
type: object
properties:
tracingId:
type: string
description: Unique identifier of the request, used by Yapily for support purposes
code:
type: integer
format: int32
description: Numeric HTTP status code associated with the error
status:
type: string
description: Textual description of the HTTP status
supportUrl:
type: string
description: Link to where further information regarding the error can be found
source:
type: string
description: Source of the error. This may be YAPILY, the INSTITUTION, or the USER
issues:
type: array
description: List of issues relating to the error
items:
required:
- message
- code
type: object
description: Detailed information regarding the issue that was experienced during processing of the request
properties:
type:
type: string
description: Category of the issue
code:
type: string
description: 5 digit Error Code that uniquely identifies the type of issue, for full list of error codes
pelase check our documentation
message:
type: string
description: Human readable description of the issue that was experienced
ApiResponseError:
type: object
properties:
error:
$ref: '#/components/schemas/ApiError'
raw:
deprecated: true
type: array
items:
$ref: '#/components/schemas/RawResponse'
description: 'Used to return errors from the bank from each request
- `400` - Returned by any `POST` endpoint when the body does not conform to the contract
- `401` - Returned by any endpoint when an invalid `authToken` is used for authentication
- `403` - Returned by any [Financial Data](/api-reference#financial-data) and any [Payments](/api-reference#payments)
endpoint when the `Consent` is no longer authorised to access financial data or to make a payment
- `404` - Returned by any endpoint where there are path parameters and the path parameters supplied are unable to
find the desired resource
- `409` - Returned by any `POST` endpoint when creating a resource that conflicts with any other existing resource
e.g. [Create User](/api-reference/addUser)
- `424` - Returned by any [Financial Data](/api-reference#financial-data) and any [Payments](/api-reference#payments)
endpoint when the feature to be accessed is not supported by the `Institution`.
- `500` - Returned by any endpoint when Yapily is down. If you encounter any false positives, please [notify us](mailto:support@yapily.com)'
example:
error:
tracingId: 74b13ce8ed51419f92c5d609e04532de
code: 424
institutionError:
errorMessage: '{"Code":"500 Internal Server Error","Id":"5ff8d331-4282-41e0-b5ef-1ac9ac39f009","Message":"Technical
Error. Please try again later","Errors":[{"ErrorCode":"UK.OBIE.UnexpectedError","Message":"There was a problem
processing your request. Please try again later"}]}'
httpStatusCode: 500
source: INSTITUTION
status: FAILED_DEPENDENCY
ApiResponseOfCreateBulkPaymentRequest:
type: object
properties:
meta:
$ref: '#/components/schemas/ResponseMeta'
data:
$ref: '#/components/schemas/BulkPaymentResponse'
links:
type: object
additionalProperties:
type: string
forwardedData:
type: array
items:
$ref: '#/components/schemas/ResponseForwardedData'
raw:
deprecated: true
type: array
items:
$ref: '#/components/schemas/RawResponse'
tracingId:
type: string
writeOnly: true
ApiResponseOfPaymentResponse:
type: object
properties:
meta:
$ref: '#/components/schemas/ResponseMeta'
data:
$ref: '#/components/schemas/PaymentResponse'
links:
type: object
additionalProperties:
type: string
forwardedData:
type: array
items:
$ref: '#/components/schemas/ResponseForwardedData'
raw:
deprecated: true
type: array
items:
$ref: '#/components/schemas/RawResponse'
tracingId:
type: string
writeOnly: true
ApiResponseOfPaymentResponses:
type: object
properties:
meta:
$ref: '#/components/schemas/ResponseMeta'
data:
$ref: '#/components/schemas/PaymentResponses'
links:
type: object
additionalProperties:
type: string
forwardedData:
type: array
items:
$ref: '#/components/schemas/ResponseForwardedData'
raw:
deprecated: true
type: array
items:
$ref: '#/components/schemas/RawResponse'
tracingId:
type: string
writeOnly: true
BulkPaymentDetailsResponse:
type: object
properties:
meta:
$ref: '#/components/schemas/ResponseMeta'
data:
type: object
title: BulkPaymentDetailsData
properties:
id:
type: string
description: __Mandatory__. Unique identifier for the bulk payment transaction.
consentId:
type: string
description: __Mandatory__. Unique identifier of the consent related to bulk payment transaction.
payments:
type: array
items:
$ref: '#/components/schemas/BulkPaymentIndividualStatus'
BulkPaymentIndividualStatus:
type: object
required:
- id
- status
properties:
id:
type: string
description: __Mandatory__. Unique identifier of the individual payment.
status:
$ref: '#/components/schemas/PaymentStatus'
statusDetails:
type: object
title: BulkPaymentIndividualStatusDetails
description: __Conditional__. Details regarding the status of an individual payment within a bulk request. This
object is conditionally returned, typically when the status is not `COMPLETED`.
properties:
code:
type: string
description: __Conditional__. The unique 4-digit error code identifying the specific issue. Refer to the official
documentation for a comprehensive list of error codes
reason:
type: string
description: __Optional__. A human-readable description providing additional context or the specific error message
encountered.
required:
- code
BulkPaymentResponse:
type: object
properties:
id:
type: string
description: The unique ID for this Bulk Payment.
institutionConsentId:
type: string
description: The Institution's Consent ID used for this Bulk Payment.
institutionInteractionId:
type: string
description: The Financial API (FAPI) Interaction ID for this Bulk Payment.
paymentIdempotencyId:
type: string
description: The unique ID provided by you to identify this Bulk Payment.
paymentLifecycleId:
type: string
paymentScheme:
type: string
description: The payment scheme (ie. payment rail, local instrument) used to carry out this Bulk Payment.
status:
$ref: '#/components/schemas/PaymentStatus'
statusDetails:
$ref: '#/components/schemas/BulkPaymentStatusDetails'
payer:
$ref: '#/components/schemas/Payer'
payeeDetails:
$ref: '#/components/schemas/Payee'
reference:
type: string
description: The reference or description for this Bulk Payment.
amount:
type: number
description: The total monetary amount of this Bulk Payment.
currency:
type: string
description: The currency of the amount, specified as a 3-letter ISO 4217 code.
amountDetails:
$ref: '#/components/schemas/Amount'
createdAt:
type: string
description: Date and time of when the payment request was created.
format: date-time
firstPaymentAmount:
$ref: '#/components/schemas/Amount'
firstPaymentDateTime:
type: string
description: Date and time of when the first payment request is to be made.
format: date-time
nextPaymentAmount:
$ref: '#/components/schemas/Amount'
nextPaymentDateTime:
type: string
description: __Conditional__. Defines when the recurring payment is to be made.
format: date-time
finalPaymentAmount:
$ref: '#/components/schemas/Amount'
finalPaymentDateTime:
type: string
description: Date and time of when the final payment is to be made.
format: date-time
numberOfPayments:
type: integer
description: Number of recurring payment requests to be made as part of the instructed payment schedule.
format: int32
previousPaymentAmount:
$ref: '#/components/schemas/Amount'
previousPaymentDateTime:
type: string
description: Date and time of when the previous payment request was posted.
format: date-time
chargeDetails:
type: array
items:
$ref: '#/components/schemas/PaymentChargeDetails'
scheduledPaymentType:
type: string
description: Details the execution type and the payment date between the payer and the payee.
scheduledPaymentDateTime:
type: string
description: Date and time of when the scheduled
# --- truncated at 32 KB (103 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/yapily/refs/heads/main/openapi/yapily-payments-api-openapi.yml