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.

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 }