openapi: 3.2.0 info: title: Azupay Payment Agreement Payment Initiation API description: API Reference version: v1 contact: email: contactus@azupay.com.au servers: - url: https://api-uat.azupay.com.au/v1 description: UAT environment - url: https://api.azupay.com.au/v1 description: Production environment tags: - name: Payment Initiation x-displayName: Payment Initiation description: 'This API allows you to initiate Payments using mandates. ' paths: /paymentInitiation: get: operationId: getPaymentInitiation security: - SecretKey: [] tags: - Payment Initiation summary: Get a Payment Initiation description: 'Retrieves an existing Payment Initiation (PayTo Transaction). ' parameters: - in: query name: id description: 'ID of Payment Initiation to retrieve. This is the `paymentInitiationId` returned by the **Initiate a Payment** API ' required: true schema: type: string responses: '200': description: The Payment Initiation object content: application/json: schema: allOf: - $ref: '#/components/schemas/PaymentInitiationObj' - $ref: '#/components/schemas/PaymentInitiationStatusObj' - $ref: '#/components/schemas/PaymentAgreementObj' '400': description: Invalid request content: application/json: schema: allOf: - $ref: '#/components/schemas/ErrorModel' '401': description: Unauthorized content: application/json: schema: allOf: - $ref: '#/components/schemas/ErrorModel' '403': description: Forbidden content: application/json: schema: allOf: - $ref: '#/components/schemas/ErrorModel' post: security: - SecretKey: [] tags: - Payment Initiation summary: Initiate a Payment description: Initiate a Payment operationId: makePaymentInitiation requestBody: content: application/json: schema: $ref: '#/components/schemas/PaymentInitiationObj' responses: '201': description: Payment Initiated content: application/json: schema: allOf: - $ref: '#/components/schemas/PaymentInitiationObj' - $ref: '#/components/schemas/PaymentInitiationStatusObj' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/PayToErrorModel' examples: contentTypeError: value: message: Content-Type request header must be application/json paymentAgreementNotFoundError: value: message: Could not find Payment Agreement fixedAgreementFirstPaymentAmountError: value: message: The amount specified does not match the First Payment Amount fixedAgreementExceedOutstandingBalanceError: value: message: The amount specified exceeds the Outstanding Balance of this Agreement validityNotStartedError: value: message: This Payment Agreement's Validity has not started validityPassedError: value: message: This Payment Agreement's Validity End Date has passed clientIdMismatchError: value: message: 'ClientId mismatch: Expecting ...' invalidStateError: value: message: Invalid Payment Agreement status. Should be ACTIVE invalidRequestBodyError: value: message: An invalid request body was supplied ddrMigrationInProgressError: value: message: "This payment agreement is still being migrated and payments cannot be initiated in the first 5 \ncalendar days\n" '401': description: Invalid Authorization header content: application/json: schema: allOf: - $ref: '#/components/schemas/ErrorModel' - properties: message: example: Unauthorized callbacks: PaymentInitiationStatusEvent: '{$request.body#/PaymentInitiation/paymentInitiationNotification/endpointURL}': post: summary: PaymentInitiationStatus.status Event description: 'If the merchant specifies values for the `PaymentInitiation/paymentInitiationNotification` object during the **Initiate a Payment** invocation, then a notification will be sent to the merchant system when it''s status has changed. The event will use `paymentInitiationNotification.endpointURL` as endpoint and `paymentInitiationNotification.authorizationHeader` as `Authorization` header. We **strongly** recommend to use a different value for `authorizationHeader` on each payment request to increase the level of security. This call is made by Azupay on a best effort basis. Azupay will implement retry mechanisms to ensure transient network failures do not affect the ability to call this endpoint. Azupay may call this endpoint more than once with the same payload so the merchant must ensure that the endpoint is implemented with idempotent behaviour always returning a `200 OK` response even after subsequent calls. If the target endpoint does not return HTTP `200`, azupay will retry the webhook call 45 times with a 20 second delay. The merchant system can correlate the event message using either the `PaymentInitiation.clientTransactionId` provided on the original request or the `PaymentInitiationStatus.paymentInitiationId` provided in the response of the original request. ' parameters: - in: header name: Authorization description: 'The value will be what was specified in {$request.body#/PaymentInitiation/paymentInitiationNotification/authorizationHeader} ' schema: type: string required: true requestBody: required: true content: application/json: schema: allOf: - $ref: '#/components/schemas/PaymentInitiationObj' - $ref: '#/components/schemas/PaymentInitiationStatusObj' responses: '200': description: The merchant's server should return this code /paymentInitiation/refund: post: security: - SecretKey: [] tags: - Payment Initiation summary: Refund for Payment Initiation description: 'Refund for Payment Initiation (PayTo Transactions) ' operationId: refundPaymentInitation parameters: - in: query name: id description: The ID for the Payment Initiation required: true schema: type: string - in: query name: refundAmount description: The refund amount required: false schema: type: number - in: query name: refundBatchId description: The batch Id if the refund is done through batch required: false schema: type: string responses: '200': description: Payment refunded content: application/json: schema: allOf: - $ref: '#/components/schemas/PaymentInitiationObj' - $ref: '#/components/schemas/PaymentInitiationStatusObj' '400': description: Invalid request content: application/json: schema: allOf: - $ref: '#/components/schemas/ErrorModel' '401': description: Invalid Authorization header content: application/json: schema: allOf: - $ref: '#/components/schemas/ErrorModel' '404': description: Payment Request Not Found content: application/json: schema: allOf: - $ref: '#/components/schemas/ErrorModel' /paymentInitiation/search: post: security: - SecretKey: [] tags: - Payment Initiation summary: Search for Payment Initiation description: 'Search for Payment Initiation (PayTo Transactions) ' operationId: searchPaymentInitiation parameters: - in: query name: nextPageId description: The next page ID that was obtained on a previous search result. Used to obtain the next set of results required: false schema: type: string - in: query name: numberOfRecords description: Number of records to retrieve. Defaults to 100 if not provided required: false schema: type: number requestBody: content: application/json: schema: $ref: '#/components/schemas/PaymentInitiationSearchObj' responses: '200': description: The requested page of payment agreements content: application/json: schema: type: object required: - nextPageId - recordCount - records properties: nextPageId: $ref: '#/components/schemas/nextPageIdResponse' recordCount: $ref: '#/components/schemas/recordCount' records: type: array description: The result from the search items: $ref: '#/components/schemas/PaymentInitiationSearchResponseObj' '400': description: Invalid request content: application/json: schema: $ref: '#/components/schemas/ErrorModel' examples: invalidRequestBody: value: message: An invalid request body was supplied '401': description: Invalid Authorization header content: application/json: schema: $ref: '#/components/schemas/ErrorModel' components: schemas: endDate: type: string description: A date in the calendar year expressed in this format YYYY-MM-DD. This date would be in Australia/Sydney timezone pattern: ^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)$ example: '2022-12-01' paymentAgreementIdForSearch: type: string minLength: 1 maxLength: 40 description: ID of the payment agreement being searched. example: K+9p4EE0rJnMtomRfWKWE2BnAboHP2KwgIPyEIA= PaymentInitiationObj: type: object required: - PaymentInitiation additionalProperties: false properties: PaymentInitiation: type: object additionalProperties: false required: - clientId - paymentAgreementId - paymentAmount - clientTransactionId properties: paymentAgreementId: type: string description: ID of the payment agreement to initiate payment example: K+9p4EE0rJnMtomRfWKWEDRh82BnAboHP2KwgIPyEIA= paymentRequestId: type: string minLength: 32 maxLength: 32 pattern: ^[A-Z|a-z|0-9]*$ metaData: type: object additionalProperties: true description: An object containing no more than 10 string fields. Where the field name is limited to 40 ASCII characters and the field value is limited to 255 ASCII characters clientTransactionId: $ref: '#/components/schemas/ClientTransactionIdObj' clientId: $ref: '#/components/schemas/ClientIdObj' paymentAmount: $ref: '#/components/schemas/PayToAmountObj' reference: type: string minLength: 1 maxLength: 35 pattern: ^[ -~]*$ description: "Unique identification to unambiguously identify the transaction. \nThis identification is passed on, unchanged, throughout the entire end-to-end payment message, \nand will appear on payers statements.\n" example: INVOICE-34434 description: type: string minLength: 5 maxLength: 280 description: Optional remittance information used to unambiguously refer to the payment transaction. example: Top-up for wallet 23432 paymentInitiationNotification: $ref: '#/components/schemas/NotificationObj' additionalDetails: $ref: '#/components/schemas/AdditionalDetailsObj' agreementDescription: type: string minLength: 5 maxLength: 140 pattern: ^[ -~]*$ description: Description of the Payment Agreement visible to the payer. PayerDetailsObj: type: object description: 'Provide either `payIDDetails` or `bankAccountDetails` ' additionalProperties: false properties: name: type: string description: The payer's name minLength: 1 maxLength: 100 example: Jane Smith pattern: ^[!-~]+( [!-~]+)*$ type: type: string description: Whether payer is a person or organisation. Defaults to 'Person'. enum: - Person - Organisation payIDDetails: description: PayID Details type: object required: - payID - payIDType properties: payID: $ref: '#/components/schemas/PayIDObj' payIDType: type: string example: EMAIL description: 'PayID Type. Valid Values: - ''PHONE’ Can be a mobile phone number or landline with area code - ‘EMAIL’ Email address - ‘ABN’ Australian Business Number - ‘ORG’ Organisation Name' enum: - PHONE - EMAIL - ABN - ORG bankAccountDetails: description: Bank Account Details type: object additionalProperties: false required: - bsb - accountNumber properties: bsb: $ref: '#/components/schemas/BsbObj' accountNumber: $ref: '#/components/schemas/AccountNumberObj' recordCount: type: number description: The number of records that were retrieved. authorizationHeader: type: string description: 'The string that Azupay will put into the Authorization request header when calling the Callback url. Will be obfuscated (shown as ****) in API responses. ' example: SECRET PayToErrorModel: type: object required: - message properties: message: type: string details: type: object description: 'An object containing details of the error ' properties: failureCode: type: string example: AZP5.1 description: 'A failure code for the error response. For the full list, please refer to the [Failure Codes and Failure Reasons](/guide/receiving-recurring-payments.html#failure-codes-and-failure-reasons) page ' failureReason: type: string example: PayID format is incorrect description: 'A reason message for the error response For the full list, please refer to the [Failure Codes and Failure Reasons ](/guide/receiving-recurring-payments.html#failure-codes-and-failure-reasons) page ' countPerPeriod: type: string description: Number of payments within a specified period based on the frequency pattern: ^[1-9][0-9]{0,2}$ example: '5' ContractIdObj: type: string minLength: 1 maxLength: 50 description: "Unique Id for the merchant side contract.\nThis field is used to prevent the creation of duplicated payment agreements in CREATED, SUSPENDED, ACTIVE status. \nPayment agreements in statuses such as CANCELLED, FAILED are not considered duplicates.\n" example: 30597959-a853-44d4-bdab-54332bf7a98e amount: type: string description: Amount in AUD pattern: ^[0-9]+(\.[0-9]{2})$ example: '1001.95' lastPaymentDate: type: string description: A date in the calendar year expressed in this format YYYY-MM-DD. This date would be in Australia/Sydney timezone pattern: ^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)$ example: '2022-06-01' BsbObj: type: string description: The BSB of the account number minLength: 6 maxLength: 6 pattern: ^\d*$ example: '123456' PayIDObj: type: string minLength: 1 maxLength: 140 example: jane.smith@example.com description: "The payer's PayID. Valid examples are `+61-432123321` (mobile), `+61-312344321` (landline), \n`0432123321` (mobile), `0312344321` (landline), `jane.smith@example.com`\n" maximumAmount: type: string description: Amount in AUD pattern: ^[0-9]+(\.[0-9]{2})$ example: '1001.95' lastPaymentAmount: type: string description: Amount in AUD pattern: ^[0-9]+(\.[0-9]{2})$ example: '1001.95' AccountNumberObj: type: string description: The Account Number (without the BSB) minLength: 4 maxLength: 9 pattern: ^\d*$ example: '123555555' azupayId: type: string description: An identifier generated by Azupay. Used to reference the object in subsequent operations example: K+9p4EE0rJnMtomRfWKWEDRh82BnAboHP2KwgIPyEIA= endpointURL: type: string format: url description: "An internet accessible url which Azupay will invoke when the status of the transaction has \nchanged. The call will be done using the HTTP POST method. The endpoint exposed by the client \nmust be TLS 1.2 and the server certificate must be issued by a well known commercial certificate \nauthority and that self-signed or internally signed certs are not acceptable.\n" example: https://example.org PaymentInitiationSearchResponseObj: type: object allOf: - $ref: '#/components/schemas/PaymentInitiationObj' - $ref: '#/components/schemas/PaymentInitiationStatusObj' - $ref: '#/components/schemas/PaymentAgreementObj' NotificationObj: type: object description: Merchant Callback Details required: - endpointURL - authorizationHeader properties: endpointURL: $ref: '#/components/schemas/endpointURL' authorizationHeader: $ref: '#/components/schemas/authorizationHeader' frequency: type: string description: Payment Frequency enum: - ADHOC - DAILY - FORTNIGHTLY - INTRADAY - SEMIANNUAL - MONTHLY - QUARTERLY - WEEKLY - ANNUAL agreementPayeeName: type: string maxLength: 140 minLength: 1 pattern: ^[ -~]*$ description: 'Lets you control the Payee description (visible to they payer) on the payment agreement: * If not populated, then your business name will appear i.e. "My business name". * If populated, then your business appears as a facilitator so the description will read something like "My business name on behalf of `payeeName`". ' PaymentInitiationStatusObj: type: object required: - PaymentInitiationStatus additionalProperties: false properties: PaymentInitiationStatus: additionalProperties: false required: - paymentInitiationId - status - createdDatetime type: object properties: paymentInitiationId: $ref: '#/components/schemas/azupayId' status: type: string description: Status of the requested payment initiation. enum: - CREATED - SETTLED - FAILED - PENDING - RETURN_IN_PROGRESS - RETURN_FAILED - RETURN_COMPLETE createdDatetime: type: string format: date-time description: Timestamp when the payment initiation was created. completedDatetime: type: string format: date-time description: 'Timestamp when the payment initiation was completed. Only for `status` different than `CREATED`. ' statusCode: type: string description: "A transaction status reason code returned by the destination institution. \n\nStandardized among NPP network participants.\n" example: AC02 statusReason: type: string description: 'A description corresponds to the value of the `statusCode` field. For the full list, please refer to the [Status Code and Status Reason](/guide/receiving-recurring-payments.html#status-code-and-status-reason) page ' example: The Debtor Account Number is invalid or missing. nppTransactionId: type: string description: "An identifier used to reference a payment pulled from a bank account between banks, businesses and \npayment facilitators such as Azupay.\n" payerInformation: description: This object is present when the payment is completed and your client is configured to expose payer information. type: object additionalProperties: false properties: bsb: type: string description: The bsb accountNumber: type: string description: The account number fullLegalAccountName: type: string description: The full legal account name refundInformation: description: This object is present when a refund is requested. type: object additionalProperties: false properties: availableBalance: type: string description: The remaining balance after completion of all the refunds. requests: type: array description: An array of objects capturing log of completed refund requests items: type: object description: Refund information properties: createdDateTime: type: string format: date-time description: Timestamp when refund request was initiated completedDateTime: type: string format: date-time description: Timestamp when refund request was completed. amount: type: string description: The refund amount nppTransactionId: description: The identifier of the transaction in the NPP network. This is an identifier known by the initiating bank and serves as unique identifier for the refund. type: string status: description: The status of the refund type: string enum: - IN_PROGRESS - COMPLETE - FAILED AdditionalDetailsObj: type: object required: - customerNumber - userID - authMethod - channelType description: Additional details for auditing purposes properties: customerNumber: type: string description: 'Uniquely identifies the Customer for whom the request has been initiated for. i.e. the Customer that owns the account. This field should contain the Member Number or Customer Number from the Client''s banking system. ' maxLength: 25 userID: type: string description: 'Uniquely identifies the User that has initiated the request. This could be the Customer or someone authorised to act on behalf of the Customer. ' maxLength: 25 authMethod: type: string description: 'This field allows us to understand how the user has logged in. Over a period we can determine if there is a deviation from normal usage patterns. e.g. Moving from biometric to PIN and linking that with payments we can detect fraud happening but also apply other rules to understand if PayIds are being from a device for malicious intent. ' enum: - 2FACTOR - OTP - BIOMETRIC - PASSWORD - PIN - NONE channelType: type: string description: 'This field allows us to understand, similar to authenticationMethod, which channels are being used to initiate a request. If `BROWSER` or `MOBILE` is selected. `ipAddress` and `deviceFingerprint` will be required fields. ' enum: - BROWSER - MOBILE - BRANCH - IVR - OTHER ipAddress: type: string description: 'IP address of the device or computer from which the user request originated. Required if request originated from a browser or mobile, else do not send. ' fraudScore: type: string description: This is a fraud score you may have calculated. if not, do not send. deviceFingerprint: type: string description: 'The device fingerprint or browser fingerprint. A change in device is a possible indicator of fraud/ID takeover/phone number porting. The device fingerprint, machine fingerprint or browser fingerprint. Required if the request originated from a web browser or mobile device, else do not send. ' notes: type: string description: Free text field up to 2048 characters. maxLength: 2048 geoLocation: type: string description: 'Latitude and Longitude from which the user request originated. For example -33.8708464,151.20732999999998 Only to be provided if GPS is enabled on the device, else do not send. ' maxLength: 50 PayToAmountObj: type: string pattern: ^[0-9]+(\.[0-9]{2})$ description: Amount in AUD to be requested from the Payee example: '2101.95' AgreementExpiryMinutesObj: type: integer description: An integer value representing the total number of minutes before a payment agreement expires. This field has a minimum value of 5 and a max of 7199 minimum: 5 maximum: 7199 example: 5 toDateUTC: type: string pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$ description: The report date in ISO date/time string format in UTC example: '2021-10-18T02:32:30.693Z' ClientTransactionIdObj: description: 'Unique Id for the transaction created by the merchant system This field is used to prevent the creation of duplicated clients in case of a message retry. It is recommended that a unique id (like uuid) is used for each client. If the same value is used a second time the client will be replaced. ' minLength: 5 maxLength: 100 type: string example: TX5346423452345345 fromDateUTC: type: string pattern: ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$ description: The report date in ISO date/time string format in UTC example: '2021-10-18T02:32:30.693Z' PaymentInitiationSearchObj: type: object additionalProperties: false properties: PaymentInitiationSearch: type: object additionalProperties: false properties: clientTransactionId: type: string minLength: 5 maxLength: 100 description: 'Unique Id for the transaction created by the merchant system. Please note `clientTransactionId` and date fields can''t be included in the same request. ' example: 30597959-a853-44d4-bdab-54332bf7a98e fromDate: $ref: '#/components/schemas/fromDateUTC' toDate: $ref: '#/components/schemas/toDateUTC' paymentAgreementId: $ref: '#/components/schemas/paymentAgreementIdForSearch' ClientIdObj: type: string description: 'Id of the client initiating the transaction. This is supplied by Azupay and only changes between environments. For example, you might be allocated CLIENT1TEST for the UAT environment and CLIENT1 for production. ' minLength: 5 maxLength: 50 example: CLIENT1 firstPaymentAmount: type: string description: Amount in AUD pattern: ^[0-9]+(\.[0-9]{2})$ example: '1001.95' PayeeDetailsObj: type: object description: Payee Details properties: becsUserId: type: string description: 'The BECS user ID related to the migrating Direct Debit Authority (DDR) over to a Payment Agreement. Only populate this field if it is for a migration request. ' minLength: 1 maxLength: 6 pattern: ^[a-zA-Z0-9]*$ example: 123456 payeeName: $ref: '#/components/schemas/agreementPayeeName' PaymentAgreementObj: type: object required: - PaymentAgreement properties: PaymentAgreement: type: object required: - clientId - clientTransactionId - payerDetails - paymentAgreementType - description - agreementDetails properties: clientId: $ref: '#/components/schemas/ClientIdObj' additionalDetails: $ref: '#/components/schemas/AdditionalDetailsObj' contractId: $ref: '#/components/schemas/ContractIdObj' clientTransactionId: $ref: '#/components/schemas/ClientTransactionIdObj' paymentAgreementNotification: $ref: '#/components/schemas/NotificationObj' conditionsOfPayment: type: string pattern: ^[ -~]{1,140}$ minLength: 1 maxLength: 140 agreementExpiryMinutes: $ref: '#/components/schemas/AgreementExpiryMinutesObj' description: Indication of conditions of sale, references to terms and conditions or Product Disclosure Statement as agreed between parties. payerDetails: $ref: '#/components/schemas/PayerDetailsObj' payeeDetails: $ref: '#/components/schemas/PayeeDetailsObj' paymentAgreementType: type: string enum: - MORTGAGE - UTILITY - LOAN - DEPENDANT SUPPORT - GAMBLING - RETAIL - SALARY - PERSONAL - GOVERNMENT - PENSION - TAX - OTHER SERVICE description: $ref: '#/components/schemas/agreementDescription' variant: type: string enum: - API - 1Click agreementDetails: type: object description: Agreement Details properties: fixedAgreementDetails: type: object description: Fixed Agreement Details additionalProperties: false required: - startDate - frequency - amount properties: startDate: $ref: '#/components/schemas/StartDateObj' endDate: $ref: '#/components/schemas/endDate' firstPaymentAmount: $ref: '#/components/schemas/firstPaymentAmount' amount: $ref: '#/components/schemas/amount' frequency: $ref: '#/components/schemas/frequency' countPerPeriod: $ref: '#/components/schemas/countPerPeriod' balloonAgreementDetails: type: object description: Balloon Agreement Details additionalProperties: false required: - startDate - frequency properties: startDate: $ref: '#/components/schemas/StartDateObj' lastPaymentDate: $ref: '#/components/schemas/lastPaymentDate' lastPaymentAmount: $ref: '#/components/schemas/lastPaymentAmount' amount: $ref: '#/components/schemas/amount' frequency: $ref: '#/components/schemas/frequency' countPerPeriod: $ref: '#/components/schemas/countPerPeriod' usageBasedAgreementDetails: type: object additionalProperties: false required: - startDate - frequency properties: maximumAmount: $ref: '#/components/schemas/PayToAmountObj' startDate: $ref: '#/components/schemas/StartDateObj' endDate: $ref: '#/components/schemas/endDate' frequency: $ref: '#/components/schemas/frequency' countPerPeriod: $ref: '#/components/schemas/countPerPeriod' variableAgreementDetails: type: object description: Variable Agreement Details additionalProperties: false required: - startDate - frequency properties: startDate: $ref: '#/components/schemas/StartDateObj' endDate: $ref: '#/components/schemas/endDate' maximumAmount: $ref: '#/components/schemas/maximumAmount' frequency: $ref: '#/components/schemas/frequency' countPerPeriod: $ref: '#/components/schemas/countPerPeriod' additionalProperties: false additionalProperties: false additionalProperties: false StartDateObj: type: string description: A date in the calendar year expressed in this format YYYY-MM-DD. This date would be in Australia/Sydney timezone pattern: ^(?:[1-9]\d{3}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)-02-29)$ example: '2022-01-01' nextPageIdResponse: type: string description: 'If there are more results you can invoke this search again by providing the nextPageId in the query parameters to retrieve the next set of results. ' ErrorModel: type: object additionalProperties: false required: - message properties: message: type: string details: type: object additionalProperties: false properties: failureCode: type: string failureReason: type: string required: - failureCode - failureReason securitySchemes: SecretKey: description: 'The secret key is used to access restricted functions and should be stored securely in your system. It is required for operations which may result in additional charges to you as a merchant. Please protect the key by storing it encrypted granting access only to a limited set of users and applications requiring its use. ' in: header name: Authorization type: apiKey DistributableKey: description: 'The distributable key has limited access and may be exposed publicly to your payers. ' in: header name: Authorization type: apiKey