Card Programs & Designs

A Card Program is the top-level configuration unit for everything that governs how cards behave within your Tenant: the base currency, transaction-limit ceiling, supported card designs, 3-D Secure enablement, fee structure, and blockchain deposit address types. Card Designs are the visual and physical specifications for cards issued under a Program, managed across up to six design slots.

Both are configured via Account Management, which is available exclusively to Tenants holding production API keys — it is not accessible in the staging environment, and the underlying endpoints are not publicly exposed or documented in the OpenAPI reference. Full Account Management guides are provided separately to production Tenants. This page documents the data model, lifecycle, and operational concepts that underpin Program and Card Design configuration.

📘

Account Management is not publicly exposed. The endpoints that create and configure Programs and Card Designs are available only to Tenants with production API keys, through a separate Account Management interface. They are deliberately not included in the public OpenAPI reference. Full operational guides for Account Management are made available to Tenants in the production environment. If you are a Tenant and do not yet have access, contact your Axys account team.


Card Programs

What a Program configures

A Program is the authoritative source of several properties inherited by everything beneath it in the hierarchy:

PropertyDescriptionInherited by
Base currencyOne of USD, CAD, GBP, EUR — see Status & Enum Glossary. All balances, limits, and fees for cards and wallets in this Program are denominated in this currency.All Cards and Wallets in the Program
transactionLimit ceilingThe maximum per-transaction spending limit for the Program. No Cardholder or Card limit can exceed this.All Cardholders and Cards (as a hard ceiling — see Cards: Virtual & Physical)
Card DesignsUp to six design slots (see below)Selected at card issuance via cardType
3-D Secure enablementWhether CNP transactions trigger 3DS OTP challenges for cards in this ProgramAll Cards (prerequisite for OTP subscriptions — see 3-D Secure)
Fee structureAll fee types, rates, minimums, and Tenant/Program fee-share splitsAll Transactions and Fees in the Program — see Transactions & Fees
Blockchain deposit address typesThe chain/format set provisioned per card at issuance (default: EVM, BTC, SOL; others available by requisition)All Cards' cryptoAddresses at issuance — see Funding & Deposits
SMS sender identityAnonymous short code (default) or a named alphanumeric sender ID for outbound SMS (by application)Bank account registration OTP delivery — see Funding & Deposits
Inbound bank credentialsThe Program's account number, routing/sort code, BIC/SWIFT, and reference format for receiving fiat depositsExposed in Account Management only — see Funding & Deposits

Program lifecycle

stateDiagram-v2
    [*] --> Draft: Tenant creates Program (Account Management)
    Draft --> UnderReview: Program submitted for Axys configuration
    UnderReview --> Active: Program approved and configured
    Active --> Suspended: Administrative action
    Suspended --> Active: Issue resolved
    Active --> [*]: Program decommissioned
📘

Once a Program is Active, most of its configuration properties (fee structure, SMS sender, deposit address types) can be updated through Account Management. However, base currency cannot be changed after a Program is created — if you need a different currency, a new Program must be created.

Credential scoping

Each Program operates with its own mTLS client certificate and program-level API key — entirely independent of the Tenant's credentials and of other Programs under the same Tenant. See Program Architecture and mTLS Certificates & CSR.


Card Designs

The six-slot model

Each Program has six Card Design slots, numbered 0 through 5. The slot number maps directly to the cardType field on POST /cards/assign/{cardholderId} (physical card issuance):

Slot (cardType)RoleRequirement
0Default design — the Program's primary card design, applied to any physical card issued without an explicit cardType, or where cardType = 0Mandatory — a Program cannot be activated without an approved design in slot 0
15Optional additional designs — for co-brand, white-label, premium tier, segment-specific, or seasonal card facesOptional — slots may be left empty

A cardType value of 0 in any issuance call always resolves to the Program's default design, even if you forget to pass the field — cardType defaults to 0 in the OpenAPI schema.

Card Design approval lifecycle

Each design slot has its own approval status, independently of the others:

designStatusMeaning
0 PendingDesign submitted to Axys for review and approval; not yet available for issuance
1 ApprovedDesign approved; cards using this cardType can now be issued
2 RejectedDesign rejected; a revised design must be submitted
stateDiagram-v2
    [*] --> Pending: Design submitted via Account Management
    Pending --> Approved: Axys approves design
    Pending --> Rejected: Axys rejects design
    Rejected --> Pending: Revised design resubmitted
    Approved --> Pending: Design update submitted (re-review required)
    Approved --> [*]: Slot retired
🚧

A Program cannot issue physical cards until slot 0 is approved. Attempting to issue a physical card (POST /cards/assign/{cardholderId}) before the Program's default design has designStatus = 1 will fail. Virtual cards are not affected by card design status — they carry no physical design.

Design submission requirements

Card design submissions are handled via Account Management. A design submission typically includes:

ElementDescription
Front artworkHigh-resolution print-ready artwork for the card face, conforming to card network (Visa/Mastercard) brand standards for dimensions, safe zones, and mandatory elements
Back artworkReverse face artwork
Slot assignmentWhich slot (05) this design is being submitted for
Design metadataCard name, any co-brand or programme identifiers

Card network brand standards govern what must and must not appear on a card face — the specific requirements are published by Visa and Mastercard respectively, and Axys will validate submissions against these during the approval process.

Using cardType at issuance

Only the cardType field links a physical card to a design slot — virtual cards have no design slot and don't use this field. At issuance:

POST /cards/assign/{cardholderId}
{
  "nameOnCard": "J REYES",
  "cardType": 2,
  "alias": "Premium Black Card",
  "transactionLimit": 500000
}

cardType: 2 selects design slot 2. If slot 2's designStatus is not 1 (Approved) at the time of issuance, the request will fail. If cardType is omitted, it defaults to 0 (the Program's default design).

Relationship between Programs and designs

erDiagram
    PROGRAM ||--o{ CARD_DESIGN_SLOT : "has 6 slots"
    CARD_DESIGN_SLOT ||--o{ CARD : "selected via cardType"

    PROGRAM {
        int currency "0 USD 1 CAD 2 GBP 3 EUR"
        int transactionLimit "ceiling"
        boolean threeDSEnabled
    }
    CARD_DESIGN_SLOT {
        int slot "0-5, slot 0 mandatory"
        int designStatus "0 pending 1 approved 2 rejected"
        string name
    }
    CARD {
        int cardType "0-5, selects slot"
        string type "physical or virtual"
    }

What's next