TSYS Issuing Platform

TSYS Issuing Platform provides an API-driven payment stack for financial institutions and fintechs to issue debit and credit cards, manage cardholder accounts, set spending controls, and handle transaction disputes.

OpenAPI Specification

tsys-issuing-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: TSYS Issuing Platform
  description: >-
    TSYS Issuing Platform API for financial institutions and fintechs to manage
    card programs, cardholder accounts, card issuance, spending controls, and
    transaction history. Part of the Global Payments / TSYS API-driven payment stack.
  version: 1.0.0
  contact:
    name: TSYS Developer Support
    url: https://www.tsys.com/platform
servers:
  - url: https://issuing.api.tsys.com/v1
    description: TSYS Issuing Platform Production API
tags:
  - name: Accounts
    description: Cardholder account management
  - name: Cards
    description: Card lifecycle management
  - name: Transactions
    description: Card transaction history
  - name: Controls
    description: Spending controls and limits
  - name: Disputes
    description: Transaction dispute management
paths:
  /accounts:
    get:
      operationId: listAccounts
      summary: List Accounts
      description: Returns a paginated list of cardholder accounts in the program.
      tags:
        - Accounts
      parameters:
        - name: status
          in: query
          schema:
            type: string
            enum: [active, suspended, closed]
          description: Filter by account status
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 50
      responses:
        '200':
          description: Account list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AccountList'
        '401':
          $ref: '#/components/responses/Unauthorized'
    post:
      operationId: createAccount
      summary: Create Account
      description: Create a new cardholder account in the card program.
      tags:
        - Accounts
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountInput'
      responses:
        '201':
          description: Account created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
        '400':
          $ref: '#/components/responses/BadRequest'
  /accounts/{accountId}:
    get:
      operationId: getAccount
      summary: Get Account
      description: Retrieve details for a specific cardholder account.
      tags:
        - Accounts
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
          description: Cardholder account identifier
      responses:
        '200':
          description: Account details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
        '404':
          $ref: '#/components/responses/NotFound'
    put:
      operationId: updateAccount
      summary: Update Account
      description: Update cardholder account details or status.
      tags:
        - Accounts
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AccountUpdate'
      responses:
        '200':
          description: Account updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Account'
  /accounts/{accountId}/cards:
    get:
      operationId: listAccountCards
      summary: List Account Cards
      description: List all cards associated with a cardholder account.
      tags:
        - Cards
        - Accounts
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Cards list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CardList'
    post:
      operationId: issueCard
      summary: Issue Card
      description: Issue a new physical or virtual card for a cardholder account.
      tags:
        - Cards
        - Accounts
      parameters:
        - name: accountId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CardIssuanceRequest'
      responses:
        '201':
          description: Card issued
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Card'
  /cards/{cardId}:
    get:
      operationId: getCard
      summary: Get Card
      description: Retrieve details for a specific card.
      tags:
        - Cards
      parameters:
        - name: cardId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Card details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Card'
        '404':
          $ref: '#/components/responses/NotFound'
  /cards/{cardId}/activate:
    post:
      operationId: activateCard
      summary: Activate Card
      description: Activate a newly issued card to allow transactions.
      tags:
        - Cards
      parameters:
        - name: cardId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Card activated
  /cards/{cardId}/suspend:
    post:
      operationId: suspendCard
      summary: Suspend Card
      description: Temporarily suspend a card to block new transactions.
      tags:
        - Cards
      parameters:
        - name: cardId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Card suspended
  /cards/{cardId}/transactions:
    get:
      operationId: listCardTransactions
      summary: List Card Transactions
      description: Returns transaction history for a specific card.
      tags:
        - Transactions
        - Cards
      parameters:
        - name: cardId
          in: path
          required: true
          schema:
            type: string
        - name: startDate
          in: query
          schema:
            type: string
            format: date
          description: Start of date range
        - name: endDate
          in: query
          schema:
            type: string
            format: date
          description: End of date range
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 50
      responses:
        '200':
          description: Transaction list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/IssuingTransactionList'
  /cards/{cardId}/controls:
    get:
      operationId: getCardControls
      summary: Get Card Controls
      description: Retrieve spending controls for a specific card.
      tags:
        - Controls
        - Cards
      parameters:
        - name: cardId
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Card controls
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SpendingControls'
    put:
      operationId: updateCardControls
      summary: Update Card Controls
      description: Update spending limits, category restrictions, or geographic controls.
      tags:
        - Controls
        - Cards
      parameters:
        - name: cardId
          in: path
          required: true
          schema:
            type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SpendingControls'
      responses:
        '200':
          description: Controls updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SpendingControls'
  /disputes:
    get:
      operationId: listDisputes
      summary: List Disputes
      description: Returns a list of transaction disputes.
      tags:
        - Disputes
      parameters:
        - name: status
          in: query
          schema:
            type: string
            enum: [open, pending, resolved, closed]
        - name: page
          in: query
          schema:
            type: integer
            default: 1
        - name: limit
          in: query
          schema:
            type: integer
            default: 25
      responses:
        '200':
          description: Dispute list
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DisputeList'
    post:
      operationId: createDispute
      summary: Create Dispute
      description: File a dispute for a specific transaction.
      tags:
        - Disputes
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DisputeRequest'
      responses:
        '201':
          description: Dispute created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Dispute'
components:
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
  responses:
    BadRequest:
      description: Invalid request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  schemas:
    Error:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
    Account:
      type: object
      properties:
        id:
          type: string
        programId:
          type: string
        status:
          type: string
          enum: [active, suspended, closed]
        cardholder:
          $ref: '#/components/schemas/Cardholder'
        availableBalance:
          type: number
          format: float
        creditLimit:
          type: number
          format: float
        currency:
          type: string
        createdAt:
          type: string
          format: date-time
    AccountInput:
      type: object
      required:
        - cardholder
      properties:
        cardholder:
          $ref: '#/components/schemas/Cardholder'
        creditLimit:
          type: number
          format: float
        currency:
          type: string
          default: USD
    AccountUpdate:
      type: object
      properties:
        status:
          type: string
          enum: [active, suspended, closed]
        creditLimit:
          type: number
          format: float
    AccountList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Account'
        total:
          type: integer
        page:
          type: integer
        limit:
          type: integer
    Cardholder:
      type: object
      properties:
        firstName:
          type: string
        lastName:
          type: string
        email:
          type: string
          format: email
        phone:
          type: string
        dateOfBirth:
          type: string
          format: date
        address:
          type: object
          properties:
            street:
              type: string
            city:
              type: string
            state:
              type: string
            zip:
              type: string
            country:
              type: string
    Card:
      type: object
      properties:
        id:
          type: string
        accountId:
          type: string
        type:
          type: string
          enum: [physical, virtual]
        status:
          type: string
          enum: [pending, active, suspended, expired, cancelled]
        lastFour:
          type: string
        network:
          type: string
          enum: [visa, mastercard]
        expirationDate:
          type: string
        issuedAt:
          type: string
          format: date-time
        activatedAt:
          type: string
          format: date-time
    CardIssuanceRequest:
      type: object
      required:
        - type
        - network
      properties:
        type:
          type: string
          enum: [physical, virtual]
        network:
          type: string
          enum: [visa, mastercard]
        shippingAddress:
          type: object
          description: Required for physical cards
          properties:
            street:
              type: string
            city:
              type: string
            state:
              type: string
            zip:
              type: string
    CardList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Card'
    IssuingTransaction:
      type: object
      properties:
        id:
          type: string
        cardId:
          type: string
        type:
          type: string
          enum: [purchase, refund, cash_advance, fee]
        status:
          type: string
          enum: [pending, posted, declined]
        amount:
          type: number
          format: float
        currency:
          type: string
        merchantName:
          type: string
        merchantCategory:
          type: string
        merchantCity:
          type: string
        merchantCountry:
          type: string
        authorizedAt:
          type: string
          format: date-time
        postedAt:
          type: string
          format: date-time
    IssuingTransactionList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/IssuingTransaction'
        total:
          type: integer
        page:
          type: integer
        limit:
          type: integer
    SpendingControls:
      type: object
      properties:
        dailyLimit:
          type: number
          format: float
          description: Maximum spend per day
        monthlyLimit:
          type: number
          format: float
          description: Maximum spend per month
        transactionLimit:
          type: number
          format: float
          description: Maximum per transaction amount
        allowedMerchantCategories:
          type: array
          items:
            type: string
          description: Allowed MCC codes (empty = all allowed)
        blockedMerchantCategories:
          type: array
          items:
            type: string
          description: Blocked MCC codes
        allowedCountries:
          type: array
          items:
            type: string
          description: ISO 3166-1 alpha-2 country codes
        internationalEnabled:
          type: boolean
          default: false
        onlineEnabled:
          type: boolean
          default: true
        atmEnabled:
          type: boolean
          default: true
    Dispute:
      type: object
      properties:
        id:
          type: string
        transactionId:
          type: string
        cardId:
          type: string
        status:
          type: string
          enum: [open, pending, resolved, closed]
        reason:
          type: string
        amount:
          type: number
          format: float
        filedAt:
          type: string
          format: date-time
        resolvedAt:
          type: string
          format: date-time
    DisputeRequest:
      type: object
      required:
        - transactionId
        - reason
      properties:
        transactionId:
          type: string
        reason:
          type: string
          description: Dispute reason description
        amount:
          type: number
          format: float
          description: Amount being disputed
    DisputeList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Dispute'
        total:
          type: integer
        page:
          type: integer
        limit:
          type: integer
security:
  - bearerAuth: []