openapi: 3.1.0 info: title: Tink Payments API description: > Tink Payments (Payment Initiation Service / Pay by Bank) initiates account-to-account payments directly from a customer's bank account under PSD2. Supports one-off domestic and cross-border SEPA payments, auto-payments, sweeping variable recurring payments, payouts, refunds, and mandates. Available in the EU under PSD2 and in the US via the Guaranteed Payments stack. version: '1.0' contact: name: Tink Developer Support url: https://docs.tink.com/resources/payments servers: - url: https://api.tink.com description: Tink EU Production - url: https://api.us.tink.com description: Tink US Production security: - BearerAuth: [] tags: - name: Payments description: Payment initiation, status, cancel, and refund. - name: Mandates description: Recurring payment mandates. paths: /payments: post: summary: Tink Initiate A Payment description: > Initiate a payment from the customer's bank account to the beneficiary using PSD2 PIS rails. Returns a payment object and the Tink Link redirect URL the customer follows to authenticate and authorize at their bank. operationId: initiatePayment tags: - Payments requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PaymentRequest' responses: '201': description: Payment initiated. content: application/json: schema: $ref: '#/components/schemas/Payment' '400': $ref: '#/components/responses/BadRequest' /payments/{paymentId}: get: summary: Tink Get A Payment description: Retrieve a payment by id, including current status (CREATED, AUTHORIZED, EXECUTED, REJECTED, CANCELLED, REFUNDED). operationId: getPayment tags: - Payments parameters: - $ref: '#/components/parameters/PaymentIdParam' responses: '200': description: Payment returned. content: application/json: schema: $ref: '#/components/schemas/Payment' '404': $ref: '#/components/responses/NotFound' /payments/{paymentId}/cancel: post: summary: Tink Cancel A Payment description: Cancel a payment that has not yet been executed by the customer's bank. operationId: cancelPayment tags: - Payments parameters: - $ref: '#/components/parameters/PaymentIdParam' responses: '200': description: Payment cancelled. content: application/json: schema: $ref: '#/components/schemas/Payment' /payments/{paymentId}/refunds: post: summary: Tink Refund A Payment description: Initiate a full or partial refund for an executed payment. operationId: refundPayment tags: - Payments parameters: - $ref: '#/components/parameters/PaymentIdParam' requestBody: content: application/json: schema: $ref: '#/components/schemas/RefundRequest' responses: '201': description: Refund created. content: application/json: schema: $ref: '#/components/schemas/Refund' /payments/{paymentId}/refunds/{refundId}: get: summary: Tink Get A Refund description: Retrieve a refund by id, including current status. operationId: getRefund tags: - Payments parameters: - $ref: '#/components/parameters/PaymentIdParam' - in: path name: refundId required: true schema: type: string responses: '200': description: Refund returned. content: application/json: schema: $ref: '#/components/schemas/Refund' /payments/mandates: post: summary: Tink Create A Mandate description: > Create a payment mandate that authorizes recurring or sweeping variable recurring payments from a user's bank account. operationId: createMandate tags: - Mandates requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/MandateRequest' responses: '201': description: Mandate created. content: application/json: schema: $ref: '#/components/schemas/Mandate' /payments/mandates/{id}: get: summary: Tink Get A Mandate description: Retrieve a mandate by id. operationId: getMandate tags: - Mandates parameters: - in: path name: id required: true schema: type: string responses: '200': description: Mandate returned. content: application/json: schema: $ref: '#/components/schemas/Mandate' delete: summary: Tink Revoke A Mandate description: Revoke an active mandate. operationId: revokeMandate tags: - Mandates parameters: - in: path name: id required: true schema: type: string responses: '204': description: Mandate revoked. components: securitySchemes: BearerAuth: type: http scheme: bearer parameters: PaymentIdParam: in: path name: paymentId required: true schema: type: string schemas: PaymentRequest: type: object required: - amount - currency - market - destinations properties: amount: type: string example: '100.00' currency: type: string example: EUR market: type: string example: GB remittanceInformation: type: object properties: type: type: string enum: [UNSTRUCTURED, REFERENCE] value: type: string destinations: type: array items: $ref: '#/components/schemas/Account' sourceAccount: $ref: '#/components/schemas/Account' Payment: type: object properties: id: type: string status: type: string enum: [CREATED, AUTHORIZED, EXECUTED, REJECTED, CANCELLED, REFUNDED, FAILED] amount: type: string currency: type: string market: type: string created: type: string format: date-time updated: type: string format: date-time redirectUrl: type: string format: uri destinations: type: array items: $ref: '#/components/schemas/Account' sourceAccount: $ref: '#/components/schemas/Account' remittanceInformation: type: object properties: type: type: string value: type: string RefundRequest: type: object properties: amount: type: string currency: type: string remittanceInformation: type: object properties: type: type: string value: type: string Refund: type: object properties: id: type: string paymentId: type: string amount: type: string currency: type: string status: type: string enum: [CREATED, EXECUTED, REJECTED, FAILED] created: type: string format: date-time MandateRequest: type: object properties: market: type: string currency: type: string userId: type: string maximumIndividualAmount: type: string maximumAmountPerPeriod: type: string period: type: string enum: [DAY, WEEK, MONTH, YEAR] beneficiary: $ref: '#/components/schemas/Account' expiresAt: type: string format: date-time Mandate: type: object properties: id: type: string status: type: string enum: [CREATED, ACTIVE, REVOKED, EXPIRED] userId: type: string market: type: string currency: type: string maximumIndividualAmount: type: string maximumAmountPerPeriod: type: string period: type: string enum: [DAY, WEEK, MONTH, YEAR] expiresAt: type: string format: date-time beneficiary: $ref: '#/components/schemas/Account' Account: type: object properties: accountNumber: type: object properties: type: type: string enum: [IBAN, SORT_CODE, BBAN, ACCOUNT_NUMBER] value: type: string name: type: string country: type: string Error: type: object properties: errorMessage: type: string errorCode: type: string responses: BadRequest: description: Invalid request. content: application/json: schema: $ref: '#/components/schemas/Error' NotFound: description: Not found. content: application/json: schema: $ref: '#/components/schemas/Error'