# List cards in Protection Bulletin
Get all Pismo-issued cards in the Protection Bulletin with filtering options.
**Note:** This endpoint takes an account token - an access token encoded with a Pismo account ID. Tokens can expire quickly, which can result in a 401 Unauthorized message.
# OpenAPI definition
```json
{
"openapi": "3.1.0",
"info": {
"title": "Card issuing - Protection Bulletin",
"version": "2.0.3",
"description": "Bulletin API endpoints",
"contact": {
"name": "API Support",
"url": "https://developers.pismo.io/support/"
},
"license": {
"name": "Copyright Pismo"
}
},
"servers": [
{
"url": "https://sandbox.pismolabs.io/protection-bulletin",
"description": "Sandbox API server for testing"
}
],
"security": [
{
"BearerAuth": []
}
],
"tags": [
{
"name": "Bulletin",
"description": "Endpoints to manage cards with the Protection Bulletin"
}
],
"components": {
"parameters": {
"AuthHeader": {
"in": "header",
"name": "Authorization",
"required": true,
"description": "Account token - an access token encoded with a Pismo account ID. Tokens can expire quickly, which can result in a 401 Unauthorized message.",
"schema": {
"type": "string",
"example": "Bearer eyJhbGci...IUzUx"
}
},
"BeginDateQuery": {
"name": "begin_date",
"in": "query",
"description": "Beginning date filter, format = `yyyy-mm-dd`",
"required": true,
"schema": {
"type": "string",
"example": "2025-01-01"
}
},
"EndDateQuery": {
"name": "end_date",
"in": "query",
"description": "End date filter, format = `yyyy-mm-dd`",
"required": true,
"schema": {
"type": "string",
"example": "2025-01-30"
}
},
"NetworkBrandTypeQuery": {
"name": "network_brand_type",
"in": "query",
"description": "Card network brand.",
"required": false,
"schema": {
"type": "string",
"enum": [
"ELO",
"MASTERCARD",
"VISA"
],
"example": "ELO"
}
},
"PageQuery": {
"name": "page",
"in": "query",
"description": "Page to return. Default is `1`.",
"required": false,
"schema": {
"type": "integer",
"default": 1,
"example": 2,
"minimum": 1
}
},
"PerPageQuery": {
"name": "per_page",
"in": "query",
"description": "Number of items per page to return. Default is `10`.",
"required": false,
"schema": {
"type": "integer",
"default": 10,
"example": 20,
"minimum": 1
}
},
"ProgramIdQuery": {
"name": "program_id",
"in": "query",
"description": "Pismo program ID",
"required": false,
"schema": {
"type": "number",
"example": 1010
}
},
"StateQuery": {
"name": "state",
"in": "query",
"description": "Is card blocked or not in the network brand? \n\nWhen empty, it means the network did not successfully receive the action.\n",
"required": false,
"schema": {
"type": "string",
"enum": [
"",
"BLOCKED",
"UNBLOCKED"
],
"example": "BLOCKED"
}
},
"StatusQuery": {
"name": "status",
"in": "query",
"description": "Request processing status.",
"required": false,
"schema": {
"type": "string",
"enum": [
"PENDING",
"SUCCESS",
"FAILED"
],
"example": "PENDING"
}
}
},
"schemas": {
"BulletinResponseListModel": {
"type": "object",
"description": "Response model for the Bulletin API list.",
"properties": {
"current_page": {
"$ref": "#/components/schemas/CurrentPage"
},
"pages": {
"$ref": "#/components/schemas/Pages"
},
"per_page": {
"$ref": "#/components/schemas/PerPage"
},
"total_items": {
"$ref": "#/components/schemas/TotalItems"
},
"items": {
"$ref": "#/components/schemas/Items"
}
}
},
"ErrorDetailMessageModel": {
"description": "Detailed information about the error.",
"type": "object",
"properties": {
"payload": {
"type": "array",
"description": "List of payload-related error details.",
"items": {
"$ref": "#/components/schemas/ErrorPayloadMessageModel"
}
},
"header": {
"type": "array",
"description": "List of header-related error details.",
"items": {
"$ref": "#/components/schemas/ErrorHeaderMessageModel"
}
},
"parameters": {
"type": "array",
"description": "List of parameter-related error details.",
"items": {
"$ref": "#/components/schemas/ErrorParameterMessageModel"
}
}
}
},
"ErrorHeaderMessageModel": {
"description": "Details about header-related errors.",
"type": "object",
"properties": {
"field": {
"type": "string",
"description": "Header name related to the error.",
"example": "x-field"
},
"message": {
"type": "string",
"description": "Error message for the header.",
"example": "Generic error"
}
}
},
"ErrorMessageModel": {
"title": "ErrorModel",
"type": "object",
"description": "API generic returned error.",
"properties": {
"code": {
"type": "string",
"description": "Error code."
},
"message": {
"type": "string",
"description": "Error description."
},
"http_status_code": {
"type": "integer",
"description": "HTTP status code."
},
"details": {
"$ref": "#/components/schemas/ErrorDetailMessageModel"
}
}
},
"ErrorParameterMessageModel": {
"description": "Details about parameter-related errors.",
"type": "object",
"properties": {
"field": {
"type": "string",
"description": "Parameter name related to the error.",
"example": "query_parameter"
},
"message": {
"type": "string",
"description": "Parameter error message"
}
}
},
"ErrorPayloadMessageModel": {
"description": "Details about payload-related errors.",
"type": "object",
"properties": {
"field": {
"type": "string",
"description": "Field name related to the error.",
"example": "field"
},
"message": {
"type": "string",
"description": "Error message for the field.",
"example": "Generic error"
}
}
},
"CardID": {
"description": "Pismo card ID.",
"type": "number",
"example": 10203040
},
"CardTrackNumber": {
"description": "Pismo card track number.",
"type": "number",
"example": 1
},
"CreatedAt": {
"type": "string",
"description": "Date and time when the Protection Bulletin registration was created. Format = ISO 8601.",
"format": "yyyy-mm-dd hh:mm:ss",
"example": "2025-04-22 20:31:50"
},
"CurrentPage": {
"type": "integer",
"example": 1,
"description": "Current page."
},
"Items": {
"type": "array",
"description": "List of Bulletin Cards",
"items": {
"type": "object",
"description": "Response model for the Bulletin API.",
"properties": {
"card_id": {
"$ref": "#/components/schemas/CardID"
},
"org_id": {
"$ref": "#/components/schemas/OrgID"
},
"program_id": {
"$ref": "#/components/schemas/ProgramID"
},
"network_brand_type": {
"$ref": "#/components/schemas/NetworkBrandType"
},
"created_at": {
"$ref": "#/components/schemas/CreatedAt"
},
"updated_at": {
"$ref": "#/components/schemas/UpdatedAt"
},
"network_track_number": {
"$ref": "#/components/schemas/NetworkTrackNumber"
},
"state": {
"$ref": "#/components/schemas/State"
},
"status": {
"$ref": "#/components/schemas/Status"
},
"purge_date": {
"$ref": "#/components/schemas/PurgeDate"
},
"was_automatically_purged": {
"$ref": "#/components/schemas/WasAutomaticallyPurged"
},
"card_track_number": {
"$ref": "#/components/schemas/CardTrackNumber"
},
"region_code": {
"$ref": "#/components/schemas/RegionCode"
}
}
}
},
"NetworkBrandType": {
"type": "string",
"description": "Card network brand.",
"enum": [
"ELO",
"MASTERCARD",
"VISA"
],
"example": "ELO"
},
"NetworkTrackNumber": {
"type": "string",
"description": "Created in the internal system to track the card's event history. This is a combination between the tenant and the truncated random uuid.",
"example": "TN-123XXX-XXXXXX-XXXXXXX::1a2b3c"
},
"OrgID": {
"description": "Pismo organization/tenant ID.",
"type": "string",
"example": "TN-123XXX-XXXXXX-XXXXXXX"
},
"Pages": {
"type": "integer",
"example": 1,
"description": "Total number of pages."
},
"PerPage": {
"type": "integer",
"example": 100,
"description": "Items per page."
},
"ProgramID": {
"description": "Pismo program ID.",
"type": "number",
"example": 1010
},
"PurgeDate": {
"type": "string",
"description": "Date when the card will be removed from the Protection Bulletin in the network brand. Format = yyyy-mm-dd.\n",
"format": "yyyy-mm-dd",
"example": "2025-04-22"
},
"RegionCode": {
"type": "array",
"description": "Region code contains one or more Account Screen Authorization File (ASAF) region codes that define the distribution of a Visa cardholder account number in Card Recovery Bulletin Service files. **REQUIRED** for Visa. \n `0` - No Bulletin / V.I.P. Only (cannot be combined with other region codes)\n `A` - All Asia-Pacific region countries\n `B` - All Central Europe, Middle East, and Africa (CEMEA) region countries.\n `C` - All Visa Canada\n `D` - National Card Recovery Bulletin\n `E` - All European countries\n `F` - All Latin America and Caribbean (LAC) region countries \n\nRegion codes can be in any order, except no other region code can be specified in combination with region code 0.\n\nVisa documentation: VisaNet Authorization-Only Online Messages – Technical Specifications - Table 215: Field 127E.2 Account Screen Authorization File (ASAF) Region Codes\n",
"items": {
"type": "string",
"enum": [
"0",
"A",
"B",
"C",
"D",
"E",
"F"
]
}
},
"State": {
"type": "string",
"description": "Is card blocked or not in the network brand? When the state is empty, it means the network brand did not successfully receive any action.\n",
"enum": [
"",
"BLOCKED",
"UNBLOCKED"
],
"example": "BLOCKED"
},
"Status": {
"type": "string",
"description": "Request processing status.",
"enum": [
"PENDING",
"SUCCESS",
"FAILED"
],
"example": "PENDING"
},
"TotalItems": {
"type": "integer",
"example": 10,
"description": "Total number of items in page."
},
"UpdatedAt": {
"type": "string",
"description": "Date and time when the Protection Bulletin was updated. Format = ISO 8601.\n",
"format": "yyyy-mm-dd hh:mm:ss",
"example": "2025-04-22 20:31:50"
},
"WasAutomaticallyPurged": {
"type": "boolean",
"description": "Was card removed from the network brand on the purge date?\n",
"example": true
}
},
"securitySchemes": {
"BearerAuth": {
"type": "http",
"scheme": "bearer",
"description": "Account token - token encoded with a Pismo account ID. Tokens can expire quickly, which can result in a **401 Unauthorized** error.\n",
"bearerFormat": "JWT"
}
},
"responses": {
"401": {
"description": "Unauthorized",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorMessageModel"
},
"examples": {
"Missing or invalid Authorization header": {
"value": {
"code": "EBLT0005",
"message": "Missing or invalid Authorization header",
"http_status_code": 401
}
},
"Invalid Authorization header, missing account-id": {
"value": {
"code": "EBLT0006",
"message": "Invalid Authorization header, missing account-id",
"http_status_code": 401
}
},
"Invalid Authorization header, missing tenant": {
"value": {
"code": "EBLT0007",
"message": "Invalid Authorization header, missing tenant",
"http_status_code": 401
}
}
}
}
}
},
"500": {
"description": "Internal Server Error",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorMessageModel"
},
"examples": {
"Something went wrong when try to process a request in another service": {
"value": {
"code": "EBLT9998",
"message": "Something went wrong when try to process a request in Programs API using ID: 123",
"http_status_code": 500
}
},
"Something went wrong, please try again later": {
"value": {
"code": "EBLT9999",
"message": "Something went wrong, please try again later",
"http_status_code": 500
}
}
}
}
}
},
"504": {
"description": "Gateway Timeout",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorMessageModel"
},
"examples": {
"Request timeout": {
"value": {
"code": "EBLT0001",
"message": "Request timeout",
"http_status_code": 504
}
}
}
}
}
},
"200ListBulletin": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/BulletinResponseListModel"
}
}
}
}
}
},
"paths": {
"/v1/bulletin": {
"get": {
"summary": "List cards in Protection Bulletin",
"operationId": "list-v1-bulletin",
"description": "Get all Pismo-issued cards in the Protection Bulletin with filtering options.\n\n **Note:** This endpoint takes an account token - an access token encoded with a Pismo account ID. Tokens can expire quickly, which can result in a 401 Unauthorized message.\n",
"tags": [
"Bulletin"
],
"parameters": [
{
"$ref": "#/components/parameters/AuthHeader"
},
{
"$ref": "#/components/parameters/BeginDateQuery"
},
{
"$ref": "#/components/parameters/EndDateQuery"
},
{
"$ref": "#/components/parameters/PerPageQuery"
},
{
"$ref": "#/components/parameters/PageQuery"
},
{
"$ref": "#/components/parameters/ProgramIdQuery"
},
{
"$ref": "#/components/parameters/NetworkBrandTypeQuery"
},
{
"$ref": "#/components/parameters/StatusQuery"
},
{
"$ref": "#/components/parameters/StateQuery"
}
],
"responses": {
"200": {
"$ref": "#/components/responses/200ListBulletin"
},
"401": {
"$ref": "#/components/responses/401"
},
"500": {
"$ref": "#/components/responses/500"
},
"504": {
"$ref": "#/components/responses/504"
}
}
}
}
}
}
```