Card issuance, lifecycle management, tokenization (Apple Pay / Google Pay), and 3D Secure (3DS) flows.
Card Types
"VIRTUAL_VISA_BUSINESS_DEBIT"— Virtual business debit"VIRTUAL_VISA_CREDIT"— Virtual credit card"PHYSICAL_VISA_BUSINESS_DEBIT"— Physical business debit- Etc. (see Solaris docs for full list)
Card Lifecycle
PROCESSING → INACTIVE → ACTIVE → BLOCKED → CLOSED
↘ LOST/STOLEN → CLOSED3DS Flow
- Card transaction triggers
SCA_CHALLENGEwebhook - Authenticate via device signing or SMS OTP
- Authorize or decline the challenge
Tokenization
For Apple Pay / Google Pay, use the tokenization endpoints to provision payment tokens for mobile wallets.
Summary
Functions
Activates a card.
Authorizes (approves) a 3DS card authorization challenge.
Blocks a card (temporary).
Changes the PIN of a card.
Closes/terminates a card permanently.
Issues a card for a business account.
Applies for a business credit card.
Issues a new card for a person.
Initiates card tokenization for Apple Pay or Google Pay.
Declines a 3DS card authorization challenge.
Deletes (revokes) a card token.
Retrieves a pending 3DS challenge for a card authorization.
Retrieves a credit card application status.
Retrieves spending limits for a card.
Retrieves a specific card for a person.
Retrieves a specific token for a card.
Lists all cards for a business account.
Lists all cards for a person's account.
Lists tokenization records for a card.
Reports a card as lost.
Reports a card as stolen.
Resumes a suspended card token.
Sandbox only. Simulates a card authorization (3DS flow).
Sandbox only. Simulates card authorization expiry.
Sandbox only. Simulates a card settlement.
Suspends a card token (e.g. when device is lost).
Unblocks a previously blocked card.
Updates card attributes (e.g., line_1 name).
Updates spending limits for a card.
Functions
@spec activate( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Activates a card.
@spec authorize_challenge(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Authorizes (approves) a 3DS card authorization challenge.
Examples
{:ok, auth} = Solaris.Cards.authorize_challenge(authorization_id, %{
response: "accepted"
})
@spec block(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Blocks a card (temporary).
@spec change_pin(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Changes the PIN of a card.
@spec close( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Closes/terminates a card permanently.
@spec create_business_card(String.t(), String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Issues a card for a business account.
@spec create_credit_card_application(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Applies for a business credit card.
Monitor CREDIT_CARD_APPLICATION webhook for status changes.
@spec create_person_card(String.t(), String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Issues a new card for a person.
Examples
{:ok, card} = Solaris.Cards.create_person_card("cper_123", "cacc_456", %{
type: "VIRTUAL_VISA_BUSINESS_DEBIT",
line_1: "Jane Doe"
})
@spec create_token(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Initiates card tokenization for Apple Pay or Google Pay.
Examples
{:ok, token} = Solaris.Cards.create_token(card_id, %{
wallet_type: "APPLE_PAY",
nonce: "...",
nonce_signature: "..."
})
@spec decline_challenge(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Declines a 3DS card authorization challenge.
@spec delete_token(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Deletes (revokes) a card token.
@spec get_authorization( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves a pending 3DS challenge for a card authorization.
Usually triggered after receiving SCA_CHALLENGE webhook.
@spec get_credit_card_application(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves a credit card application status.
@spec get_limits( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves spending limits for a card.
@spec get_person_card(String.t(), String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves a specific card for a person.
@spec get_token(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Retrieves a specific token for a card.
@spec list_business_cards(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Lists all cards for a business account.
@spec list_person_cards(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Lists all cards for a person's account.
@spec list_tokens( String.t(), keyword() ) :: {:ok, [map()]} | {:error, Solaris.Error.t()}
Lists tokenization records for a card.
@spec report_lost(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Reports a card as lost.
@spec report_stolen(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Reports a card as stolen.
@spec resume_token(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Resumes a suspended card token.
@spec sandbox_simulate_authorization(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Sandbox only. Simulates a card authorization (3DS flow).
Triggers SCA_CHALLENGE webhook so you can test the full 3DS flow.
@spec sandbox_simulate_expiry( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Sandbox only. Simulates card authorization expiry.
@spec sandbox_simulate_settlement(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Sandbox only. Simulates a card settlement.
@spec suspend_token(String.t(), String.t(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Suspends a card token (e.g. when device is lost).
@spec unblock( String.t(), keyword() ) :: {:ok, map()} | {:error, Solaris.Error.t()}
Unblocks a previously blocked card.
@spec update(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Updates card attributes (e.g., line_1 name).
@spec update_limits(String.t(), map(), keyword()) :: {:ok, map()} | {:error, Solaris.Error.t()}
Updates spending limits for a card.