Stitch · Capability

Stitch Open Banking and Payments

Unified open banking and payments workflow for African fintech applications. Combines pay-in payment initiation, bank account data access, and outbound disbursements into a single integration covering South Africa and Nigeria. Designed for e-commerce platforms, marketplaces, and financial applications that need to accept payments, access account data, and send payouts.

Run with Naftiko AfricaOpen BankingPaymentsFinancial DataSouth AfricaNigeriaFintech

What You Can Do

POST
Initiate payment — Initiate a Pay By Bank payment for a customer.
/v1/payments
GET
Get payment status — Get current status of a payment initiation request.
/v1/payments/{paymentRequestId}
GET
List bank accounts — List bank accounts linked by the user.
/v1/bank-accounts
GET
Get account transactions — Get transactions for a linked bank account.
/v1/bank-accounts/{accountId}/transactions
POST
Create disbursement — Create an outbound disbursement to a bank account.
/v1/disbursements

MCP Tools

initiate-payment

Initiate a Pay By Bank payment in South Africa or Nigeria. Returns a payment URL to redirect the customer for bank authorization.

get-payment-status

Check the status of a payment initiation request (Pending, Complete, Cancelled, or Error). Use to poll for payment completion.

read-only idempotent
list-bank-accounts

List bank accounts linked by the user. Use to show available accounts for payment or data analysis.

read-only idempotent
get-account-transactions

Retrieve transaction history for a linked bank account. Supports Relay-style cursor pagination via first/after parameters.

read-only idempotent
create-disbursement

Send an outbound payment disbursement to a beneficiary bank account. Use for marketplace payouts, refunds, or mass payments.

Capability Spec

open-banking-payments.yaml Raw ↑
naftiko: 1.0.0-alpha2
info:
  label: Stitch Open Banking and Payments
  description: Unified open banking and payments workflow for African fintech applications. Combines pay-in payment initiation,
    bank account data access, and outbound disbursements into a single integration covering South Africa and Nigeria. Designed
    for e-commerce platforms, marketplaces, and financial applications that need to accept payments, access account data,
    and send payouts.
  tags:
  - Africa
  - Open Banking
  - Payments
  - Financial Data
  - South Africa
  - Nigeria
  - Fintech
  created: '2026-05-02'
  modified: '2026-05-06'
binds:
- namespace: env
  keys:
    STITCH_CLIENT_ID: STITCH_CLIENT_ID
    STITCH_CLIENT_SECRET: STITCH_CLIENT_SECRET
    STITCH_ACCESS_TOKEN: STITCH_ACCESS_TOKEN
capability:
  consumes:
  - type: http
    namespace: stitch
    baseUri: https://api.stitch.money
    description: Stitch GraphQL API for payments and financial data.
    authentication:
      type: bearer
      token: '{{STITCH_ACCESS_TOKEN}}'
    resources:
    - name: graphql
      path: /graphql
      description: Stitch GraphQL endpoint for all operations.
      operations:
      - name: initiate-payment
        method: POST
        description: Initiate a Pay By Bank payment request.
        body:
          type: json
          data:
            query: 'mutation InitiatePayment($input: PaymentInitiationRequestInput!) { clientPaymentInitiationRequestCreate(input:
              $input) { paymentInitiationRequest { id url status } } }'
            variables:
              input:
                amount:
                  quantity: '{{tools.amount}}'
                  currency: '{{tools.currency}}'
                payerReference: '{{tools.payerReference}}'
                beneficiaryReference: '{{tools.beneficiaryReference}}'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.data.clientPaymentInitiationRequestCreate
      - name: get-payment-status
        method: POST
        description: Get the current status of a payment initiation request.
        body:
          type: json
          data:
            query: 'query GetPaymentStatus($paymentRequestId: ID!) { node(id: $paymentRequestId) { ... on PaymentInitiationRequest
              { id status amount { quantity currency } } } }'
            variables:
              paymentRequestId: '{{tools.paymentRequestId}}'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.data.node
      - name: list-bank-accounts
        method: POST
        description: List bank accounts linked by the user.
        body:
          type: json
          data:
            query: query ListBankAccounts { user { bankAccounts { id name accountNumber bankId availableBalance { quantity
              currency } currentBalance { quantity currency } } } }
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.data.user.bankAccounts
      - name: get-account-transactions
        method: POST
        description: Retrieve transactions for a linked bank account.
        body:
          type: json
          data:
            query: 'query GetTransactions($accountId: ID!, $first: Int, $after: String) { node(id: $accountId) { ... on BankAccount
              { transactions(first: $first, after: $after) { edges { node { id amount { quantity currency } date description
              reference } } pageInfo { hasNextPage endCursor } } } } }'
            variables:
              accountId: '{{tools.accountId}}'
              first: '{{tools.first}}'
              after: '{{tools.after}}'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.data.node.transactions
      - name: create-disbursement
        method: POST
        description: Create an outbound payment disbursement.
        body:
          type: json
          data:
            query: 'mutation CreateDisbursement($input: DisbursementCreateInput!) { disbursementCreate(input: $input) { disbursement
              { id status amount { quantity currency } } } }'
            variables:
              input:
                amount:
                  quantity: '{{tools.amount}}'
                  currency: '{{tools.currency}}'
                beneficiaryAccountNumber: '{{tools.beneficiaryAccountNumber}}'
                beneficiaryBankId: '{{tools.beneficiaryBankId}}'
                reference: '{{tools.reference}}'
        outputRawFormat: json
        outputParameters:
        - name: result
          type: object
          value: $.data.disbursementCreate
  exposes:
  - type: rest
    port: 8080
    namespace: open-banking-api
    description: Unified REST API for African open banking payments, account data, and disbursements via Stitch.
    resources:
    - path: /v1/payments
      name: payments
      description: Payment initiation requests.
      operations:
      - method: POST
        name: initiate-payment
        description: Initiate a Pay By Bank payment for a customer.
        call: stitch.initiate-payment
        with:
          amount: rest.amount
          currency: rest.currency
          payerReference: rest.payerReference
          beneficiaryReference: rest.beneficiaryReference
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/payments/{paymentRequestId}
      name: payment
      description: Payment status retrieval.
      operations:
      - method: GET
        name: get-payment-status
        description: Get current status of a payment initiation request.
        call: stitch.get-payment-status
        with:
          paymentRequestId: rest.paymentRequestId
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/bank-accounts
      name: bank-accounts
      description: Linked user bank accounts.
      operations:
      - method: GET
        name: list-bank-accounts
        description: List bank accounts linked by the user.
        call: stitch.list-bank-accounts
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/bank-accounts/{accountId}/transactions
      name: transactions
      description: Bank account transactions.
      operations:
      - method: GET
        name: get-account-transactions
        description: Get transactions for a linked bank account.
        call: stitch.get-account-transactions
        with:
          accountId: rest.accountId
          first: rest.first
          after: rest.after
        outputParameters:
        - type: object
          mapping: $.
    - path: /v1/disbursements
      name: disbursements
      description: Outbound payment disbursements.
      operations:
      - method: POST
        name: create-disbursement
        description: Create an outbound disbursement to a bank account.
        call: stitch.create-disbursement
        with:
          amount: rest.amount
          currency: rest.currency
          beneficiaryAccountNumber: rest.beneficiaryAccountNumber
          beneficiaryBankId: rest.beneficiaryBankId
          reference: rest.reference
        outputParameters:
        - type: object
          mapping: $.
  - type: mcp
    port: 9090
    namespace: open-banking-mcp
    transport: http
    description: MCP server for AI-assisted African open banking operations including payment initiation, account data retrieval,
      and payout management.
    tools:
    - name: initiate-payment
      description: Initiate a Pay By Bank payment in South Africa or Nigeria. Returns a payment URL to redirect the customer
        for bank authorization.
      hints:
        readOnly: false
      call: stitch.initiate-payment
      with:
        amount: tools.amount
        currency: tools.currency
        payerReference: tools.payerReference
        beneficiaryReference: tools.beneficiaryReference
      outputParameters:
      - type: object
        mapping: $.
    - name: get-payment-status
      description: Check the status of a payment initiation request (Pending, Complete, Cancelled, or Error). Use to poll
        for payment completion.
      hints:
        readOnly: true
        idempotent: true
      call: stitch.get-payment-status
      with:
        paymentRequestId: tools.paymentRequestId
      outputParameters:
      - type: object
        mapping: $.
    - name: list-bank-accounts
      description: List bank accounts linked by the user. Use to show available accounts for payment or data analysis.
      hints:
        readOnly: true
        idempotent: true
      call: stitch.list-bank-accounts
      outputParameters:
      - type: object
        mapping: $.
    - name: get-account-transactions
      description: Retrieve transaction history for a linked bank account. Supports Relay-style cursor pagination via first/after
        parameters.
      hints:
        readOnly: true
        idempotent: true
      call: stitch.get-account-transactions
      with:
        accountId: tools.accountId
        first: tools.first
        after: tools.after
      outputParameters:
      - type: object
        mapping: $.
    - name: create-disbursement
      description: Send an outbound payment disbursement to a beneficiary bank account. Use for marketplace payouts, refunds,
        or mass payments.
      hints:
        readOnly: false
      call: stitch.create-disbursement
      with:
        amount: tools.amount
        currency: tools.currency
        beneficiaryAccountNumber: tools.beneficiaryAccountNumber
        beneficiaryBankId: tools.beneficiaryBankId
        reference: tools.reference
      outputParameters:
      - type: object
        mapping: $.