Interswitch Card 360 API

Card issuer and cardholder lifecycle management for Verve, debit, and prepaid cards — create cards, set/reset PIN, block/unblock, balance inquiry, card linking, and card validation. Lets fintechs and banks issue and operate Verve cards programmatically on the Interswitch issuer-processor.

Interswitch Card 360 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 Cards, Issuing, Card Management, Verve, and Africa. The published artifact set on APIs.io includes API documentation, an OpenAPI specification, and 1 Naftiko capability spec.

OpenAPI Specification

interswitch-card-360-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Interswitch Card 360 API
  description: |
    Card issuer and cardholder lifecycle management for Verve, debit, and
    prepaid cards — create cards, set/reset PIN, block/unblock, balance
    inquiry, card linking, and card validation. Lets fintechs and banks
    issue and operate Verve cards programmatically on the Interswitch
    issuer-processor.
  version: '2024-01-01'
servers:
  - url: https://sandbox.interswitchng.com
    description: Sandbox
  - url: https://saturn.interswitchng.com
    description: Production
security:
  - BearerAuth: []
tags:
  - name: Cards
  - name: PIN
  - name: Balance
  - name: Linking
paths:
  /card-360/api/v1/cards:
    post:
      tags: [Cards]
      summary: Create Card
      description: Issue a new Verve, debit, or prepaid card to a customer profile.
      operationId: createCard
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [customerId, cardType, productCode]
              properties:
                customerId: { type: string }
                cardType: { type: string, enum: [debit, prepaid, verve] }
                productCode: { type: string }
                customerName: { type: string }
                deliveryAddress: { type: string }
      responses:
        '201':
          description: Card created.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Card' }
  /card-360/api/v1/cards/{cardId}:
    get:
      tags: [Cards]
      summary: Get Card
      operationId: getCard
      parameters:
        - { in: path, name: cardId, required: true, schema: { type: string } }
      responses:
        '200':
          description: Card details.
          content:
            application/json:
              schema: { $ref: '#/components/schemas/Card' }
  /card-360/api/v1/cards/{cardId}/block:
    post:
      tags: [Cards]
      summary: Block Card
      operationId: blockCard
      parameters:
        - { in: path, name: cardId, required: true, schema: { type: string } }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                reason: { type: string }
      responses:
        '200': { description: Card blocked. }
  /card-360/api/v1/cards/{cardId}/unblock:
    post:
      tags: [Cards]
      summary: Unblock Card
      operationId: unblockCard
      parameters:
        - { in: path, name: cardId, required: true, schema: { type: string } }
      responses:
        '200': { description: Card unblocked. }
  /card-360/api/v1/cards/{cardId}/pin:
    post:
      tags: [PIN]
      summary: Set Or Reset Card PIN
      operationId: setCardPin
      parameters:
        - { in: path, name: cardId, required: true, schema: { type: string } }
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [pinBlock]
              properties:
                pinBlock: { type: string, description: ISO-9564 PIN block. }
      responses:
        '200': { description: PIN updated. }
  /card-360/api/v1/cards/{cardId}/balance:
    get:
      tags: [Balance]
      summary: Get Card Balance
      operationId: getCardBalance
      parameters:
        - { in: path, name: cardId, required: true, schema: { type: string } }
      responses:
        '200':
          description: Balance.
          content:
            application/json:
              schema:
                type: object
                properties:
                  balance: { type: integer, description: Minor currency units. }
                  currency: { type: string }
                  availableBalance: { type: integer }
  /card-360/api/v1/cards/link:
    post:
      tags: [Linking]
      summary: Link Card To Customer
      operationId: linkCard
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [cardPan, customerId]
              properties:
                cardPan: { type: string }
                customerId: { type: string }
      responses:
        '200': { description: Linked. }
  /card-360/api/v1/cards/validate:
    post:
      tags: [Cards]
      summary: Validate Card
      operationId: validateCard
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required: [cardPan]
              properties:
                cardPan: { type: string }
      responses:
        '200':
          description: Card validation result.
          content:
            application/json:
              schema:
                type: object
                properties:
                  valid: { type: boolean }
                  cardScheme: { type: string, enum: [VERVE, VISA, MASTERCARD] }
                  cardType: { type: string }
                  issuerBank: { type: string }
components:
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
  schemas:
    Card:
      type: object
      properties:
        cardId: { type: string }
        cardPanMasked: { type: string }
        cardScheme: { type: string, enum: [VERVE, VISA, MASTERCARD] }
        cardType: { type: string, enum: [debit, prepaid, verve] }
        status: { type: string, enum: [ACTIVE, BLOCKED, EXPIRED, INACTIVE] }
        expiryMonth: { type: string }
        expiryYear: { type: string }
        customerId: { type: string }
        createdAt: { type: string, format: date-time }