Total System Services Accounts API

Cardholder account management

OpenAPI Specification

total-system-services-accounts-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: TSYS Issuing Platform Accounts API
  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
security:
- bearerAuth: []
tags:
- name: Accounts
  description: Cardholder account 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:
      - 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:
      - 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'
components:
  schemas:
    AccountUpdate:
      type: object
      properties:
        status:
          type: string
          enum:
          - active
          - suspended
          - closed
        creditLimit:
          type: number
          format: float
    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
    AccountInput:
      type: object
      required:
      - cardholder
      properties:
        cardholder:
          $ref: '#/components/schemas/Cardholder'
        creditLimit:
          type: number
          format: float
        currency:
          type: string
          default: USD
    CardList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Card'
    AccountList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/Account'
        total:
          type: integer
        page:
          type: integer
        limit:
          type: integer
    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
    Error:
      type: object
      properties:
        code:
          type: string
        message:
          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
    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
  responses:
    Unauthorized:
      description: Authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    BadRequest:
      description: Invalid request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT