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.
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: 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: []