Interswitch Lending API

Marketplace lending APIs connecting loan providers and distribution channels under `/lending-service/api/v1` — list providers, fetch offers (`GET /lending-service/api/v3/offers`), accept offers, fund loans, debit for repayment, and inspect customer loan status. Supports both PCI-DSS-licensed and hosted-fields integrations and powers Nano Loans, Salary Lending, and Value Financing.

Interswitch Lending API is one of 12 APIs that Interswitch 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.

Tagged areas include Lending, Nano Loans, Salary Lending, Credit, and Africa. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

interswitch-lending-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Interswitch Lending API
  description: |
    Marketplace lending APIs connecting loan providers and distribution
    channels — list providers, fetch offers, accept offers, fund loans, debit
    for repayment, and inspect customer loan status. Supports PCI-DSS-licensed
    and hosted-fields integrations and powers Nano Loans, Salary Lending, and
    Value Financing.
  version: '2024-01-01'
servers:
  - url: https://sandbox.interswitchng.com
    description: Sandbox
  - url: https://saturn.interswitchng.com
    description: Production
security:
  - BearerAuth: []
tags:
  - name: Providers
  - name: Offers
  - name: Loans
  - name: Customers
  - name: Payments
paths:
  /lending-service/api/v1/offers/providers:
    get:
      tags: [Providers]
      summary: List Loan Providers
      operationId: listLoanProviders
      responses:
        '200':
          description: Available lenders.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    providerId: { type: string }
                    name: { type: string }
                    products: { type: array, items: { type: string } }
  /lending-service/api/v3/offers:
    get:
      tags: [Offers]
      summary: List Loan Offers For Customer
      operationId: listLoanOffers
      parameters:
        - in: query
          name: customerId
          required: true
          schema: { type: string }
        - in: query
          name: amount
          schema: { type: integer }
      responses:
        '200':
          description: Loan offers.
          content:
            application/json:
              schema:
                type: array
                items: { $ref: '#/components/schemas/Offer' }
  /lending-service/api/v1/offers/{offerId}/accept:
    post:
      tags: [Offers]
      summary: Accept Loan Offer
      operationId: acceptLoanOffer
      parameters:
        - { in: path, name: offerId, required: true, schema: { type: string } }
      responses:
        '200':
          description: Loan created.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Loan' }
  /lending-service/api/v1/loans/{loanId}/fund:
    post:
      tags: [Loans]
      summary: Fund Loan
      description: Disburse accepted loan funds to the borrower.
      operationId: fundLoan
      parameters:
        - { in: path, name: loanId, required: true, schema: { type: string } }
      responses:
        '200': { description: Funded. }
  /lending-service/api/v1/loans/{loanId}/debit:
    post:
      tags: [Loans]
      summary: Debit Loan Repayment
      operationId: debitLoanRepayment
      parameters:
        - { in: path, name: loanId, required: true, schema: { type: string } }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [amount]
              properties:
                amount: { type: integer }
                paymentMethodId: { type: string }
      responses:
        '200': { description: Debited. }
  /lending-service/api/v1/loans/{loanId}/update:
    put:
      tags: [Loans]
      summary: Update Loan Status
      operationId: updateLoanStatus
      parameters:
        - { in: path, name: loanId, required: true, schema: { type: string } }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [status]
              properties:
                status: { type: string, enum: [ACTIVE, CLOSED, DEFAULTED, WRITTEN_OFF] }
      responses:
        '200': { description: Updated. }
  /lending-service/api/v1/users/{customerId}/status:
    get:
      tags: [Customers]
      summary: Get Customer Loan Status
      operationId: getCustomerLoanStatus
      parameters:
        - { in: path, name: customerId, required: true, schema: { type: string } }
      responses:
        '200':
          description: Active loan summary.
          content:
            application/json:
              schema:
                type: object
                properties:
                  hasActiveLoan: { type: boolean }
                  activeLoans: { type: array, items: { $ref: '#/components/schemas/Loan' } }
  /lending-service/api/v1/users/{customerId}/payment-methods:
    get:
      tags: [Customers]
      summary: List Customer Payment Methods
      operationId: listCustomerPaymentMethods
      parameters:
        - { in: path, name: customerId, required: true, schema: { type: string } }
      responses:
        '200':
          description: Payment methods.
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    paymentMethodId: { type: string }
                    type: { type: string, enum: [card, account] }
                    last4: { type: string }
  /lending-service/api/v2/payments/token:
    post:
      tags: [Payments]
      summary: Generate Lending Payment Token
      operationId: generateLendingPaymentToken
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [customerId, cardPan]
              properties:
                customerId: { type: string }
                cardPan: { type: string }
                expiryMonth: { type: string }
                expiryYear: { type: string }
                cvv: { type: string }
      responses:
        '200':
          description: Token + OTP challenge.
          content:
            application/json:
              schema:
                type: object
                properties:
                  pendingToken: { type: string }
                  otpRequired: { type: boolean }
  /lending-service/api/v2/payments/token/validate:
    post:
      tags: [Payments]
      summary: Validate Lending Payment Token OTP
      operationId: validateLendingPaymentTokenOtp
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [pendingToken, otp]
              properties:
                pendingToken: { type: string }
                otp: { type: string }
      responses:
        '200':
          description: Confirmed token.
          content:
            application/json:
              schema:
                type: object
                properties:
                  paymentMethodId: { type: string }
                  status: { type: string }
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
  schemas:
    Offer:
      type: object
      properties:
        offerId: { type: string }
        providerId: { type: string }
        principal: { type: integer }
        currency: { type: string }
        interestRate: { type: number, format: float }
        tenorDays: { type: integer }
        productType: { type: string, enum: [NANO, SALARY, VALUE_FINANCING] }
    Loan:
      type: object
      properties:
        loanId: { type: string }
        customerId: { type: string }
        providerId: { type: string }
        principal: { type: integer }
        outstandingBalance: { type: integer }
        currency: { type: string }
        interestRate: { type: number, format: float }
        tenorDays: { type: integer }
        status: { type: string, enum: [PENDING, ACTIVE, CLOSED, DEFAULTED, WRITTEN_OFF] }
        disbursedAt: { type: string, format: date-time }
        dueAt: { type: string, format: date-time }