Solaris.Cards (Solaris v1.0.0)

Copy Markdown View Source

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  CLOSED

3DS Flow

  1. Card transaction triggers SCA_CHALLENGE webhook
  2. Authenticate via device signing or SMS OTP
  3. 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.

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.

Resumes a suspended card token.

Sandbox only. Simulates a card authorization (3DS flow).

Sandbox only. Simulates card authorization expiry.

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

activate(card_id, opts \\ [])

@spec activate(
  String.t(),
  keyword()
) :: {:ok, map()} | {:error, Solaris.Error.t()}

Activates a card.

authorize_challenge(authorization_id, attrs, opts \\ [])

@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"
})

block(card_id, attrs \\ %{}, opts \\ [])

@spec block(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Blocks a card (temporary).

change_pin(card_id, attrs, opts \\ [])

@spec change_pin(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Changes the PIN of a card.

close(card_id, opts \\ [])

@spec close(
  String.t(),
  keyword()
) :: {:ok, map()} | {:error, Solaris.Error.t()}

Closes/terminates a card permanently.

create_business_card(business_id, account_id, attrs, opts \\ [])

@spec create_business_card(String.t(), String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Issues a card for a business account.

create_credit_card_application(business_id, attrs, opts \\ [])

@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.

create_person_card(person_id, account_id, attrs, opts \\ [])

@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"
})

create_token(card_id, attrs, opts \\ [])

@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: "..."
})

decline_challenge(authorization_id, attrs \\ %{}, opts \\ [])

@spec decline_challenge(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Declines a 3DS card authorization challenge.

delete_token(card_id, token_id, opts \\ [])

@spec delete_token(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Deletes (revokes) a card token.

get_authorization(authorization_id, opts \\ [])

@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.

get_credit_card_application(business_id, application_id, opts \\ [])

@spec get_credit_card_application(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Retrieves a credit card application status.

get_limits(card_id, opts \\ [])

@spec get_limits(
  String.t(),
  keyword()
) :: {:ok, map()} | {:error, Solaris.Error.t()}

Retrieves spending limits for a card.

get_person_card(person_id, account_id, card_id, opts \\ [])

@spec get_person_card(String.t(), String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Retrieves a specific card for a person.

get_token(card_id, token_id, opts \\ [])

@spec get_token(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Retrieves a specific token for a card.

list_business_cards(business_id, account_id, opts \\ [])

@spec list_business_cards(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Lists all cards for a business account.

list_person_cards(person_id, account_id, opts \\ [])

@spec list_person_cards(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Lists all cards for a person's account.

list_tokens(card_id, opts \\ [])

@spec list_tokens(
  String.t(),
  keyword()
) :: {:ok, [map()]} | {:error, Solaris.Error.t()}

Lists tokenization records for a card.

report_lost(card_id, attrs \\ %{}, opts \\ [])

@spec report_lost(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Reports a card as lost.

report_stolen(card_id, attrs \\ %{}, opts \\ [])

@spec report_stolen(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Reports a card as stolen.

resume_token(card_id, token_id, opts \\ [])

@spec resume_token(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Resumes a suspended card token.

sandbox_simulate_authorization(card_id, attrs, opts \\ [])

@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.

sandbox_simulate_expiry(authorization_id, opts \\ [])

@spec sandbox_simulate_expiry(
  String.t(),
  keyword()
) :: {:ok, map()} | {:error, Solaris.Error.t()}

Sandbox only. Simulates card authorization expiry.

sandbox_simulate_settlement(authorization_id, attrs \\ %{}, opts \\ [])

@spec sandbox_simulate_settlement(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Sandbox only. Simulates a card settlement.

suspend_token(card_id, token_id, opts \\ [])

@spec suspend_token(String.t(), String.t(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Suspends a card token (e.g. when device is lost).

unblock(card_id, opts \\ [])

@spec unblock(
  String.t(),
  keyword()
) :: {:ok, map()} | {:error, Solaris.Error.t()}

Unblocks a previously blocked card.

update(card_id, attrs, opts \\ [])

@spec update(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Updates card attributes (e.g., line_1 name).

update_limits(card_id, attrs, opts \\ [])

@spec update_limits(String.t(), map(), keyword()) ::
  {:ok, map()} | {:error, Solaris.Error.t()}

Updates spending limits for a card.