Tink Payments API

PSD2 Payment Initiation Services. Initiate single payments, refunds, payouts, and create mandates for Auto Payments and sweeping Variable Recurring Payments. Available in EU under PSD2 and in the US via the Pay by Bank stack at api.us.tink.com.

Tink Payments API is one of 9 APIs that Tink publishes on the APIs.io network, described by a machine-readable OpenAPI specification.

This API exposes 1 machine-runnable capability that can be deployed as REST, MCP, or Agent Skill surfaces via Naftiko and 1 JSON Schema definition.

Tagged areas include Payments, Payment Initiation, PSD2, Pay by Bank, and Mandates. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, sample payloads, 1 Naftiko capability spec, and 1 JSON Schema.

OpenAPI Specification

tink-payments-api-openapi.yml Raw ↑
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'