banxa/php-sdk

Banxa Official PHP API SDK for partners

v1.0.4 2024-02-29 00:11 UTC

README

Banxa

Banxa official PHP SDK

GitHub Workflow Status Latest Version on Packagist

Table of Contents

General info

The Banxa SDK is a plug and play ready to go implementation to access our services.
It allows for a simple and fast integration.

Installation

Install the package via composer

composer require banxa/php-sdk 

Authentication

ApiKey and ApiSecret

While on-boarding with banxa, you will be provided with API keys and a subdomain ([partnername].banxa.com),
initially these will be for the sandbox environment. Once you are done testing the implementation, you will receive the credentials to use the production environment.

Dependencies

PHP Guzzle
^8.0 ^7.0

Usage

Banxa::create($subdomain, $apiKey, $apiSecret, $testMode)
Property type required description
$subdomain string true The subdomain provided by banxa. ([partnername].banxa.com)
$apiKey string true Given API key
$apiSecret string true Given API Secret
$testMode bool false Enable if testing, and provide sandbox api key and secret to method
Sandbox
$subdomain = 'partner';
$sandboxApiKey = 'xxx-xxx-xxx-xxx-xxx';
$sandboxApiSecret = 'xxxx-xxxx-xxxx-xxxx';
$testMode = true;
Banxa::create($subdomain, $sandboxApiKey, $sandboxApiSecret, $testMode)
Production
$subdomain = 'partner';
$apiKey = 'xxx-xxx-xxx-xxx-xxx';
$apiSecret = 'xxxx-xxxx-xxxx-xxxx';
Banxa::create($subdomain, $apiKey, $apiSecret)

Localisation

Countries

Global

Fetch all available countries

$banxa->getCountries()

Result Example

[
   [
       "country_code" => "AD",
       "country_name" => "Andora"
   ],
   [
       "country_code" => "AE",
       "country_name" => "United Arab Emirates"
   ],
]

US States

Fetch all available US States

$banxa->getUsStates()

Result Example

[
   [
       "state_code" => "AL",
       "state_name" => "Alabama"
   ],
   [
       "state_code" => "AK",
       "state_name" => "Alaska"
   ],
]

Currencies

Fiat

Buy order type

Fetch all available fiat currencies for buy order type.

$banxa->getBuyFiatCurrencies()

Sell order type

Fetch all available fiat currencies for sell order type.

$banxa->getSellFiatCurrencies()

Result Example

[
  [
      "fiat_code"   => "EUR",
      "fiat_name"   => "Euro",
      "fiat_symbol" => "",
  ],
  [
      "fiat_code"   => "GBP",
      "fiat_name"   => "British Pound Sterling",
      "fiat_symbol" => "£",
  ],
]
       

Crypto

Buy order type

Fetch all cryptocurrencies for buy order type.

$banxa->getBuyCryptoCurrencies()

Sell order type

Fetch all cryptocurrencies for sell-order type.

$banxa->getSellCryptoCurrencies()

Result Example

[
   [
       "coin_code"=> "BTC",
       "coin_name"=> "Bitcoin",
       "blockchains"=> [
           [
               "code"=> "BTC",
               "description"=> "Bitcoin",
               "is_default"=> true
           ]
       ]
   ],
   [
       "coin_code"=> "ETH",
       "coin_name"=> "Ethereum",
       "blockchains"=> [
           [
               "code"=> "ETH",
               "description"=> "Ethereum (ERC-20)",
               "is_default"=> true
           ],
           [
               "code"=> "MATIC",
               "description"=> "Polygon",
               "is_default"=> false
           ]
       ]
   ]
]

Payment Methods

Buy & Sell order type payment methods

Fetch all available payment providers for buy and sell order type

$banxa->getAllPaymentMethods()

Result Example

[
  [
       "id"               => 6036,
       "paymentType"      => "WORLDPAYCREDIT",
       "name"             => "Visa/Mastercard",
       "description"      => "Conveniently buy digital currency using your personal VISA or MasterCard.",
       "logo_url"         => "https://partner.banxa.com/images/payment-providers/worlpaycredit.png",
       "status"           => "ACTIVE",
       "supported_agents" => [
           [
               "os"      => "ios",
               "browser" => "safari"
           ],
           [
               "os"      => "macos",
               "browser" => "safari"
           ],
           [
               "os"      => "ipados",
               "browser" => "safari"
           ]
       ],
       "type"             => "FIAT_TO_CRYPTO",
       "supported_fiat"   => [
           "AED",
       ],
       "transaction_fees" => [
           [
               "fiat_code" => "AED",
               "coin_code" => "BTC",
               "fees"      => [
                   [
                       "name"   => "surcharge",
                       "amount" => 3,
                       "type"   => "fixed"
                   ]
               ]
           ],
       ]
   ],
   [
       "id"               => 6036,
       "paymentType"      => "WORLDPAYAPPLE",
       "name"             => "Apple Pay",
       "description"      => "Conveniently buy digital currency using your Apple Pay wallet.",
       "logo_url"         => "https://partner.banxa.com/images/payment-providers/apple-pay.png",
       "status"           => "ACTIVE",
       "supported_agents" => [
           [
               "os"      => "ios",
               "browser" => "safari"
           ],
           [
               "os"      => "macos",
               "browser" => "safari"
           ],
           [
               "os"      => "ipados",
               "browser" => "safari"
           ]
       ],
       "type"             => "CRYPTO_TO_FIAT",
       "supported_fiat"   => [
           "AED",
       ],
       "transaction_fees" => [
           [
               "fiat_code" => "AED",
               "coin_code" => "BTC",
               "fees"      => [
                   [
                       "name"   => "surcharge",
                       "amount" => 3,
                       "type"   => "fixed"
                   ]
               ]
           ],
       ]
   ]
];

Buy order type payment methods

Fetch all available payment providers for buy order type

$banxa->getBuyPaymentMethods($fiatCode, $coinCode)
Property type required description
$fiatCode string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$coinCode string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto

Result Example

[
   "id"               => 6036,
   "paymentType"      => "WORLDPAYAPPLE",
   "name"             => "Apple Pay",
   "description"      => "Conveniently buy digital currency using your Apple Pay wallet.",
   "logo_url"         => "https://partner.banxa.com/images/payment-providers/apple-pay.png",
   "status"           => "ACTIVE",
   "supported_agents" => [
       [
           "os"      => "ios",
           "browser" => "safari"
       ],
       [
           "os"      => "macos",
           "browser" => "safari"
       ],
       [
           "os"      => "ipados",
           "browser" => "safari"
       ]
   ],
   "type"             => "FIAT_TO_CRYPTO",
   "supported_fiat"   => [
       "AED",
   ],
   "transaction_fees" => [
       [
           "fiat_code" => "AED",
           "coin_code" => "BTC",
           "fees"      => [
               [
                   "name"   => "surcharge",
                   "amount" => 3,
                   "type"   => "fixed"
               ]
           ]
       ],
   ]
]

Sell order type payment methods

Fetch all available payment methods for sell order type

$banxa->getSellPaymentMethods($coinCode, $fiatCode)
Property type required description
$coinCode string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$fiatCode string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats

Result Example

[
   "id"               => 6036,
   "paymentType"      => "DIRECTCREDIT",
   "name"             => "Bank Transfer",
   "description"      => "Sell digital currency to us and have the value directly credited to your bank account",
   "logo_url"         => "https://partner.banxa.com/images/payment-providers/directcredit.png",
   "status"           => "ACTIVE",
   "supported_agents" => [
       [
           "os"      => "ios",
           "browser" => "safari"
       ],
       [
           "os"      => "macos",
           "browser" => "safari"
       ],
       [
           "os"      => "ipados",
           "browser" => "safari"
       ]
   ],
   "type"             => "CRYPTO_TO_FIAT",
   "supported_fiat"   => [
       "AED",
   ],
   "transaction_fees" => [
       [
           "fiat_code" => "AED",
           "coin_code" => "BTC",
           "fees"      => [
               [
                   "name"   => "surcharge",
                   "amount" => 3,
                   "type"   => "fixed"
               ]
           ]
       ],
   ]
]

Prices

Get prices for Payment Methods to obtain a payment method id for each specific fiat.

Buy order types pricing

Fetch all available prices for buy order type

$banxa->getAllBuyPrices(
    $fiatCode,
    $coinCode,
    $fiatAmount,
    $blockchain
)
Property description required description
$fiatCode string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$coinCode string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$fiatAmount string/int/float true Fiat amount
$blockchain string false Blockchain code e.g. 'ETH' or 'TRON' see Crypto to get a list all available blockchains per coin.

Result Example

[
    "spot_price" => "1.07",
    "prices" => [
        [
            "payment_method_id" => 6047,
            "type" => "FIAT_TO_CRYPTO",
            "spot_price_fee" => "0.00",
            "spot_price_including_fee" => "1.07",
            "coin_amount" => "93.84000000",
            "coin_code" => "USDT",
            "fiat_amount" => "100.00",
            "fiat_code" => "USD",
            "fee_amount" => "0.00",
            "network_fee" => "2.37"
        ],
        [
            "payment_method_id" => 6058,
            "type" => "FIAT_TO_CRYPTO",
            "spot_price_fee" => "0.00",
            "spot_price_including_fee" => "1.09",
            "coin_amount" => "93.84000000",
            "coin_code" => "USDT",
            "fiat_amount" => "100.00",
            "fiat_code" => "USD",
            "fee_amount" => "0.00",
            "network_fee" => "2.37"
        ]
    ]
]

Buy order type pricing

Fetch single price for buy order type for a specific payment method

$banxa->getBuyPrice(
    $fiatCode,
    $coinCode,
    $fiatAmount,
    $paymentMethodId,
    $blockchain
)
Property type required required
$fiatCode string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$coinCode string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$fiatAmount string/int/float true Fiat amount
$paymentMethodId string/int true Unique ID for the payment method that you want to get prices for. see Payment Methods to get a list of payment providers.
$blockchain string false Blockchain code e.g. 'ETH' or 'TRON' see Crypto to get a list all available blockchains per coin.

Result Example

[
    "payment_method_id" => 6058,
    "type" => "FIAT_TO_CRYPTO",
    "spot_price_fee" => "0.00",
    "spot_price_including_fee" => "1.09",
    "coin_amount" => "93.84000000",
    "coin_code" => "USDT",
    "fiat_amount" => "100.00",
    "fiat_code" => "USD",
    "fee_amount" => "0.00",
    "network_fee" => "2.37"
]

Sell order types pricing

Fetch all available prices for sell order type

$banxa->getAllSellPrices(
  $coinCode, 
  $fiatCode, 
  $coinAmount
)
Property type required description
$coinCode string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$fiatCode string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$coinAmount string/int/float true Crypto amount that will be used to calculate the fiat amount

Result Example

[
    "spot_price" => "1.07",
    "prices" => [
        [
            "payment_method_id" => 6045,
            "type" => "CRYPTO_TO_FIAT",
            "spot_price_fee" => "0.00",
            "spot_price_including_fee" => "32500.00",
            "coin_amount" => "0.02000000",
            "coin_code" => "BTC",
            "fiat_amount" => "100.00",
            "fiat_code" => "AUD",
            "fee_amount" => "0.00",
            "network_fee" => "0.00"
        ],
        [
            "payment_method_id" => 6046,
            "type" => "CRYPTO_TO_FIAT",
            "spot_price_fee" => "0.00",
            "spot_price_including_fee" => "32500.00",
            "coin_amount" => "0.04000000",
            "coin_code" => "BTC",
            "fiat_amount" => "650.00",
            "fiat_code" => "AUD",
            "fee_amount" => "0.00",
            "network_fee" => "0.00"
        ],
    ]
]

Sell order type pricing

Fetch single price for buy order type for a specific payment method

$banxa->getSellPrice(
  $coinCode, 
  $fiatCode, 
  $coinAmount, 
  $paymentMethodId
)
Property type required description
$coinCode string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$fiatCode string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$coinAmount string/int/float true Crypto amount that will be used to calculate
$paymentMethodId string/int true Unique ID for the payment method that you want to get prices for. see Payment Methods to get a list of payment providers.

Result Example

[
    "payment_method_id" => 6033,
    "type" => "CRYPTO_TO_FIAT",
    "spot_price_fee" => "0.00",
    "spot_price_including_fee" => "1.09",
    "coin_amount" => "93.84000000",
    "coin_code" => "USDT",
    "fiat_amount" => "100.00",
    "fiat_code" => "USD",
    "fee_amount" => "0.00",
    "network_fee" => "2.37"
]

Orders

Retrieving orders

Fetch orders

Fetch all orders within a specific time range. (paginated)

$banxa->getOrders(
  $startDate, 
  $endDate, 
  $statuses, 
  $perPage, 
  $page, 
  $accountReference
)
Property type required description
$startDate string true Start date used for filtering orders. Must be a date in the format YYYY-MM-DD.
$endDate string true End date used for filtering orders. Must be a date in the format YYYY-MM-DD.
$statuses array false One or many order statuses (see 'Available Statuses')
$perPage string/int false Page size.
$page string/int false Page to retrieve.
$accountReference string false Customer reference that was passed as a parameter when creating an order. Used to retrieve all orders for a customer.
Available Statuses
OrderStatus::PENDING_PAYMENT
OrderStatus::WAITING_PAYMENT
OrderStatus::PAYMENT_RECEIVED
OrderStatus::IN_PROGRESS
OrderStatus::COIN_TRANSFERRED
OrderStatus::CANCELLED
OrderStatus::DECLINED
OrderStatus::EXPIRED
OrderStatus::COMPLETE
OrderStatus::REFUNDED

Result Example

[
    [
        "id"                  => "e7f3d4e436c8925af84a391f317aaa6e",
        "account_id"          => "ebfef819583ff4573e6db307abd9c126",
        "account_reference"   => "banxa-account",
        "order_type"          => "CRYPTO-BUY",
        "ref"                 => 501903,
        "country"             => "AU",
        "fiat_code"           => "AUD",
        "fiat_amount"         => 100,
        "coin_code"           => "BTC",
        "coin_amount"         => 0.00704583,
        "wallet_address"      => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "wallet_address_tag"  => null,
        "fee"                 => 0,
        "fee_tax"             => 0,
        "payment_fee"         => 2.14,
        "payment_fee_tax"     => 0.19,
        "commission"          => 0,
        "tx_hash"             => "sync-tx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "tx_confirms"         => 10,
        "created_date"        => "01-Jul-2022",
        "created_at"          => "01-Jul-2022 07:51:18",
        "payment_type"        => "WorldPay Credit Card",
        "status"              => "complete",
        "completed_at"        => "01-Jul-2022 07:55:19",
        "merchant_fee"        => 0,
        "merchant_commission" => 0,
        "meta_data"           => null,
        "blockchain"          => [
        "code"        => "BTC",
        "description" => "Bitcoin"
        ]
   ],
   [
        "id"                  => "b719377e3541921297ebef33016fb068",
        "account_id"          => "ebfef819583ff4573e6db307abd9c126",
        "account_reference"   => "banxa-account",
        "order_type"          => "CRYPTO-BUY",
        "ref"                 => 501902,
        "country"             => "AU",
        "fiat_code"           => "AUD",
        "fiat_amount"         => 320,
        "coin_code"           => "BTC",
        "coin_amount"         => 0.02255405,
        "wallet_address"      => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "wallet_address_tag"  => null,
        "fee"                 => 0,
        "fee_tax"             => 0,
        "payment_fee"         => 6.83,
        "payment_fee_tax"     => 0.62,
        "commission"          => 0,
        "tx_hash"             => "sync-tx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        "tx_confirms"         => 10,
        "created_date"        => "01-Jul-2022",
        "created_at"          => "01-Jul-2022 07:51:18",
        "payment_type"        => "WorldPay Credit Card",
        "status"              => "complete",
        "completed_at"        => "01-Jul-2022 07:55:19",
        "merchant_fee"        => 0,
        "merchant_commission" => 0,
        "meta_data"           => null,
        "blockchain"          => [
            "code"        => "BTC",
            "description" => "Bitcoin"
        ]
   ]
]

Fetch order

Fetch single order

$banxa->getOrder($orderId);
Property description required description
$orderId string true Unique ID of the order to retrieve

Result Example

[
    "id"                  => "b719377e3541921297ebef33016fb068",
    "account_id"          => "ebfef819583ff4573e6db307abd9c126",
    "account_reference"   => "banxa-account",
    "order_type"          => "CRYPTO-BUY",
    "ref"                 => 501902,
    "country"             => "AU",
    "fiat_code"           => "AUD",
    "fiat_amount"         => 320,
    "coin_code"           => "BTC",
    "coin_amount"         => 0.02255405,
    "wallet_address"      => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "wallet_address_tag"  => null,
    "fee"                 => 0,
    "fee_tax"             => 0,
    "payment_fee"         => 6.83,
    "payment_fee_tax"     => 0.62,
    "commission"          => 0,
    "tx_hash"             => "sync-tx:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
    "tx_confirms"         => 10,
    "created_date"        => "01-Jul-2022",
    "created_at"          => "01-Jul-2022 07:51:18",
    "payment_type"        => "WorldPay Credit Card",
    "status"              => "complete",
    "completed_at"        => "01-Jul-2022 07:55:19",
    "merchant_fee"        => 0,
    "merchant_commission" => 0,
    "meta_data"           => null,
    "blockchain"          => [
        "code"        => "BTC",
        "description" => "Bitcoin"
    ]
]

Creating orders

Allows your customer to create a buy or sell crypto order with Banxa. Upon success, the response will contain a checkout URL which will be unique for the order. The customer will be redirected to this URL to complete the checkout process, which will expire after 1 minute if a redirect does not occur.

When creating an order you will be required to create a BuyOrderTransaction/SellOrderTransaction/NftBuyOrderTransaction object. This object will allow you to create a transaction using a fiat amount, coin amount, or if you require both, you can specify your own amount using the createDynamic method, this will depend on your business use case.

Creating a buy order

$banxa->createBuyOrder(
  $buyOrderTransaction,
  $returnUrlOnSuccess,
  $returnUrlOnFailure,
  $returnUrlOnCancelled,
  $metadata,
  $readOnlyAmounts,
  $iframeRefererDomain,
  $optionalOrderParameters
);
Property type required description
$buyOrderTransaction Object true BuyOrderTransaction object
$returnUrlOnSuccess string true The return url on success
$returnUrlOnFailure string false The return url on failure
$returnUrlOnCancelled string false The return url on cancelled
$metadata string false Free form string that you can use to send us any information that will be returned in the Get Orders endpoint
$readOnlyAmounts boolean false Will cause the cryptocurrency and fiat amounts on the Banxa screens to be read-only and un-editable.
$iframeRefererDomain string false Used if you are embedding an iFrame. This must be the exact domain where the iFrame will be hosted. e.g. [yourCompany].com. Do not include https:// in front of the domain.
$optionalOrderParameters Object false optionalOrderParameters object

BuyOrderTransaction using Fiat as base amount

$buyOrderTransaction = BuyOrderTransaction::createFromFiatAmount(
      $accountReference, 
      $fiatCode, 
      $coinCode, 
      $fiatAmount, 
      $walletAddress, 
      $paymentMethodId
  );
Property type required description
$accountReference string true The customer's unique ID
$fiatCode string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$coinCode string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$fiatAmount string/float true Fiat amount
$walletAddress string true The target wallet address to transfer the coin to
$paymentMethodId int/string false Unique ID for the payment method that you want to get prices for. see Payment Methods to get a list of payment providers.
$blockchain string false Blockchain code, the list of available blockchains per coin see Crypto for all available blockchains per coin
$walletAddressTag string false Wallet tag or memo associated with the wallet address. Should be sent for buy cryptocurrency orders only for BNB (Memo) or XRP (Tag).

BuyOrderTransaction using Coin as base amount

 $buyOrderTransaction = BuyOrderTransaction::createFromCoinAmount(
      $accountReference, 
      $fiatCode, 
      $coinCode, 
      $coinAmount, 
      $walletAddress, 
      $paymentMethodId
 );
Property type required description
$accountReference string true The customer's unique ID
$fiatCode string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$coinCode string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$coinAmount string/float true The coin amount
$walletAddress string true The target wallet address to transfer the coin to
$paymentMethodId int/string false Unique ID for the payment method that you want to get prices for. see Payment Methods to get a list of payment providers.
$blockchain string false Blockchain code, the list of available blockchains per coin see Crypto for all available blockchains per coin
$walletAddressTag string false Wallet tag or memo associated with the wallet address. Should be sent for buy cryptocurrency orders only for BNB (Memo) or XRP (Tag).

BuyOrderTransaction using dynamic sourceAmount or targetAmount

When using BuyOrderTransaction::createDynamic you will need to specify $source(Fiat), $target(Coin), and either $sourceAmount or $targetAmount

  $buyOrderTransaction = BuyOrderTransaction::createDynamic(
      $accountReference, 
      $source, 
      $target, 
      $sourceAmount, 
      $targetAmount, 
      $walletAddress, 
      $refundAddress, 
      $paymentMethodId, 
      $blockchain, 
      $walletAddressTag
  );
Property type required description
$accountReference string true The customer's unique ID
$source string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$target string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$sourceAmount string/float/null true Source amount - null if targetAmount is set
$targetAmount string/float/null true Target amount - null if sourceAmount is set
$walletAddress string/null true The target wallet address to transfer the coin to - For Buy orders only
$refundAddress string/null true The refund wallet address - For sell orders only
$paymentMethodId int/string false Unique ID for the payment method that you want to get prices for. see Payment Methods to get a list of payment providers.
$blockchain string false Blockchain code, the list of available blockchains per coin see Crypto for all available blockchains per coin
$walletAddressTag string false Wallet tag or memo associated with the wallet address. Should be sent for buy cryptocurrency orders only for BNB (Memo) or XRP (Tag).

optionalOrderParameters

  $optionalOrderParameters = optionalOrderParameters::create(
      $sourceAddress, 
      $sourceAddressTag, 
      $email, 
      $mobile, 
  );
Property type required description
$sourceAddress string/null false Source wallet address. Should be sent for sell cryptocurrency orders only.
$sourceAddressTag string/null false Source wallet address tag or memo. Should be sent for sell cryptocurrency orders only. Required when source wallet address for BNB (Memo) or XRP (Tag).
$email string/null false Customer's email address. This will pre-populate the customers' email address field when they are redirected to Banxa checkout
$mobile string/null false Customer's mobile number. This will pre-populate the customers' mobile number field when they are redirected to Banxa checkout

Buy order full example

$buyOrderTransaction = BuyOrderTransaction::createFromFiatAmount($accountReference, $fiatCode, $coinCode, $fiatAmount, $walletAddress, $paymentMethodId, $blockchain, $walletAddressTag);// From Fiat Amount
$buyOrderTransaction = BuyOrderTransaction::createFromCoinAmount($accountReference, $fiatCode, $coinCode, $coinAmount, $walletAddress, $paymentMethodId, $blockchain, $walletAddressTag);// From Coin Amount
$buyOrderTransaction = BuyOrderTransaction::createDynamic($accountReference, $source, $target, $sourceAmount, null, $walletAddress, null, $paymentMethodId, $blockchain, $walletAddressTag); // Dynamic
$buyOrderTransaction = BuyOrderTransaction::createDynamic($accountReference, $source, $target, null, $targetAmount, $walletAddress, null, $paymentMethodId, $blockchain, $walletAddressTag); // Dynamic
$optionalOrderParameters = OptionalOrderParameters::create($sourceAddress, $sourceAddressTag, $email, $mobile);
$banxa->createBuyOrder(
    $buyOrderTransaction,
    $returnUrlOnSuccess,
    $returnUrlOnFailure,
    $returnUrlOnCancelled,
    $metadata,
    $readOnlyAmounts,
    $iframeRefererDomain,
    $optionalOrderParameters
);

Result Example

[
   "id"                => "b890df4aee4583a25ca8da17eb863c81",
   "account_id"        => "3ec8d3c67617af11d84a18931c4e369d",
   "account_reference" => "banxa-test-01",
   "order_type"        => "CRYPTO-BUY",
   "fiat_code"         => "AUD",
   "fiat_amount"       => 1,
   "coin_code"         => "BTC",
   "wallet_address"    => "1LbQ1WNTsm1Nzj1hbh3WDCbEim1oUg5rfi",
   "blockchain"        => [
       "id"          => 1,
       "code"        => "BTC",
       "description" => "Bitcoin"
   ],
   "created_at"        => "17-Aug-2022 00:09:03",
   "checkout_url"      => "https://your-return-url"
]

Creating a NFT buy order

$banxa->createNftBuyOrder(
    $nftBuyOrderTransaction,
    $nftData,
    $returnUrlOnSuccess,
    $returnUrlOnFailure,
    $returnUrlOnCancelled,
    $iframeRefererDomain
);
Property type required description
$nftBuyOrderTransaction Object true NftBuyOrderTransaction object
$nftData Object true NftData object
$returnUrlOnSuccess string true The return url on success
$returnUrlOnFailure string false The return url on failure
$returnUrlOnCancelled string false The return url on cancelled
$iframeRefererDomain string false Used if you are embedding an iFrame. This must be the exact domain where the iFrame will be hosted. e.g. [yourCompany].com. Do not include https:// in front of the domain.

NftBuyOrderTransaction

$nftBuyOrderTransaction = NftBuyOrderTransaction::create(
    $accountReference,
    $fiatCode,
    $coinCode,
    $fiatAmount,
    $walletAddress,
    $paymentMethodId = null,
    $blockchain = null,
    $walletAddressTag = null
);
Property type required description
$accountReference string true The customer's unique ID
$fiatCode string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$coinCode string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$fiatAmount string/float true Fiat amount
$walletAddress string true The target wallet address to transfer the coin to
$paymentMethodId int/string false Unique ID for the payment method that you want to get prices for. see Payment Methods to get a list of payment providers.
$blockchain string false Blockchain code, the list of available blockchains per coin see Crypto for all available blockchains per coin
$blockchain string false Blockchain code, the list of available blockchains per coin see Crypto for all available blockchains per coin
$walletAddressTag string false Wallet tag or memo associated with the wallet address. Should be sent for buy cryptocurrency orders only for BNB (Memo) or XRP (Tag).

NftData

$nftData = NftData::create(
    $purchaseReference, 
    $nft, 
    $metaData
);
Property type required description
$purchaseReference string true A reference of the purchase
$nft Object true Nft object
$metaData array false Array of metaData

Nft

$nft = Nft::create(
    $name, 
    $collection, 
    $nftMedia,
);
Property type required description
$name string true The name of the NFT
$collection string true The Collection the NFT
$nftMedia object true NftMedia object

Create VideoNftMedia

  $nftMedia = VideoNftMedia::create($link);

Create ImageNftMedia

  $nftMedia = ImageNftMedia::create($link);
Property type required description
link string true A link to the Nft video

Nft buy order full example

$nftBuyOrderTransaction = NftBuyOrderTransaction::create(
     $accountReference, 
     $fiatCode, 
     $coinCode, 
     $fiatAmount, 
     $walletAddress, 
     $paymentMethodId, 
     $blockchain, 
     $walletAddressTag
);


$nftMedia = ImageNftMedia::create($link); // OR $nftMedia = VideoNftMedia::create($link)


$nft = Nft::create(
    $name, 
    $collection, 
    $nftMedia,
);

$nftData = NftData::create(
    $purchaseReference, 
    $nft, 
    $metaData
);

$banxa->createNftBuyOrder(
    $nftBuyOrderTransaction,
    $nftData,
    $returnUrlOnSuccess,
    $returnUrlOnFailure,
    $returnUrlOnCancelled,
    $iframeRefererDomain,
);

Result Example

[
   "id"                => "b890df4aee4583a25ca8da17eb863c81",
   "account_id"        => "3ec8d3c67617af11d84a18931c4e369d",
   "account_reference" => "Banxa-Testing-01",
   "order_type"        => "NFT-BUY",
   "blockchain"        => [
       "id"          => 1,
       "code"        => "ETH",
       "description" => "Ethereum (ERC-20)"
   ],
   "created_at"        => "17-Aug-2022 00:09:03",
   "checkout_url"      => "https://your-return-url"
]

Creating a Sell order

$banxa->createSellOrder(
   $sellOrderTransaction,
   $returnUrlOnSuccess,
   $returnUrlOnFailure,
   $returnUrlOnCancelled,
   $metadata,
   $readOnlyAmounts,
   $iframeRefererDomain,
   $optionalOrderParameters,
)
Property type required description
$sellOrderTransaction Object true SellOrdertransaction object
$returnUrlOnSuccess string true The return url on success
$returnUrlOnFailure string false The return url on failure
$returnUrlOnCancelled string false The return url on cancelled
$metadata string false Free form string that you can use to send us any information that will be returned in the Get Orders endpoint
$readOnlyAmounts boolean false Will cause the cryptocurrency and fiat amounts on the Banxa screens to be read-only and un-editable.
$iframeRefererDomain string false Used if you are embedding an iFrame. This must be the exact domain where the iFrame will be hosted. e.g. [yourCompany].com. Do not include https:// in front of the domain.
$optionalOrderParameters Object false optionalOrderParameters object

SellOrderTransaction using Fiat as base amount

$sellOrderTransaction = SellOrderTransaction::createFromFiatAmount(
      $accountReference, 
      $fiatCode, 
      $coinCode, 
      $fiatAmount, 
      $refundAddress, 
      $paymentMethodId,
      $blockchain,
      $walletAddressTag,
);
Property type required description
$accountReference string true The customer's unique ID
$fiatCode string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$coinCode string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$fiatAmount string/float true Fiat amount
$refundAddress string true The refund wallet address if the order gets rejected
$paymentMethodId int/string false Unique ID for the payment method that you want to get prices for. see Payment Methods to get a list of payment providers.
$blockchain string false Blockchain code, the list of available blockchains per coin see Crypto for all available blockchains per coin
$walletAddressTag string false Wallet tag or memo associated with the wallet address. Should be sent for buy cryptocurrency orders only for BNB (Memo) or XRP (Tag).

sellOrderTransaction using Coin as base amount

$sellOrderTransaction = SellOrderTransaction::createFromCoinAmount(
      $accountReference, 
      $fiatCode, 
      $coinCode, 
      $coinAmount, 
      $refundAddress, 
      $paymentMethodId,
      $blockchain,
      $walletAddressTag,
 );
Property type required description
$accountReference string true The customer's unique ID
$fiatCode string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$coinCode string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$coinAmount string/float true The coin amount
$refundAddress string true The refund wallet address if the order gets rejected
$paymentMethodId int/string false Unique ID for the payment method that you want to get prices for. see Payment Methods to get a list of payment providers.
$blockchain string false Blockchain code, the list of available blockchains per coin see Crypto for all available blockchains per coin
$walletAddressTag string false Wallet tag or memo associated with the wallet address. Should be sent for buy cryptocurrency orders only for BNB (Memo) or XRP (Tag).

sellOrderTransaction using dynamic sourceAmount or targetAmount

When using SellOrderTransaction::createDynamic you will need to specify $source(Coin), $target(Fiat), and either $sourceAmount or $targetAmount

$sellOrderTransaction = SellOrderTransaction::createDynamic(
      $accountReference, 
      $source, 
      $target, 
      $sourceAmount, 
      $targetAmount, 
      $walletAddress, 
      $refundAddress, 
      $paymentMethodId, 
      $blockchain, 
      $walletAddressTag
 );
Property type required description
$accountReference string true The customer's unique ID
$source string true Fiat code e.g. 'USD' or 'EUR' see Fiat to get a list all available fiats
$target string true Coin code e.g. 'BTC' or 'ETH' see Crypto to get a list all available crypto
$sourceAmount string/float/null true Source amount - null if targetAmount is set
$targetAmount string/float/null true Target amount - null if sourceAmount is set
$walletAddress string/null true The target wallet address to transfer the coin to - For Buy orders only
$refundAddress string/null true The refund wallet address - For sell orders only
$paymentMethodId int/string false Unique ID for the payment method that you want to get prices for. see Payment Methods to get a list of payment providers.
$blockchain string false Blockchain code, the list of available blockchains per coin see Crypto for all available blockchains per coin
$walletAddressTag string false Wallet tag or memo associated with the wallet address. Should be sent for buy cryptocurrency orders only for BNB (Memo) or XRP (Tag).

optionalOrderParameters

  $optionalOrderParameters = optionalOrderParameters::create(
      $sourceAddress, 
      $sourceAddressTag, 
      $email, 
      $mobile, 
  );
Property type required description
$sourceAddress string/null false Source wallet address. Should be sent for sell cryptocurrency orders only.
$sourceAddressTag string/null false Source wallet address tag or memo. Should be sent for sell cryptocurrency orders only. Required when source wallet address for BNB (Memo) or XRP (Tag).
$email string/null false Customer's email address. This will pre-populate the customers' email address field when they are redirected to Banxa checkout
$mobile string/null false Customer's mobile number. This will pre-populate the customers' mobile number field when they are redirected to Banxa checkout

Sell order full example

$sellOrderTransaction = SellOrderTransaction::createFromFiatAmount($accountReference, $fiatCode, $coinCode, $fiatAmount, $refundAddress, $paymentMethodId, $blockchain, $walletAddressTag);// From Fiat Amount
$sellOrderTransaction = SellOrderTransaction::createFromCoinAmount($accountReference, $fiatCode, $coinCode, $coinAmount, $refundAddress, $paymentMethodId, $blockchain, $walletAddressTag);// From Coin Amount
$sellOrderTransaction = SellOrderTransaction::createDynamic($accountReference, $source, $target, $sourceAmount, null, null, $refundAddress, $paymentMethodId, $blockchain, $walletAddressTag); // Dynamic
$sellOrderTransaction = SellOrderTransaction::createDynamic($accountReference, $source, $target, null, $targetAmount, null, $refundAddress, $paymentMethodId, $blockchain, $walletAddressTag); // Dynamic
$optionalOrderParameters = OptionalOrderParameters::create($sourceAddress, $sourceAddressTag, $email, $mobile);
$banxa->createSellOrder(
    $sellOrderTransaction,
    $returnUrlOnSuccess,
    $returnUrlOnFailure,
    $returnUrlOnCancelled,
    $metadata,
    $readOnlyAmounts,
    $iframeRefererDomain,
    $optionalOrderParameters,
);

Result Example

[
   "id"                => "b890df4aee4583a25ca8da17eb863c81",
   "account_id"        => "3ec8d3c67617af11d84a18931c4e369d",
   "account_reference" => "banxa-test-01",
   "order_type"        => "CRYPTO-SELL",
   "fiat_code"         => "AUD",
   "fiat_amount"       => 1,
   "coin_code"         => "BTC",
   "wallet_address"    => "1LbQ1WNTsm1Nzj1hbh3WDCbEim1oUg5rfi",
   "blockchain"        => [
       "id"          => 1,
       "code"        => "BTC",
       "description" => "Bitcoin"
   ],
   "created_at"        => "17-Aug-2022 00:09:03",
   "checkout_url"      => "https://your-return-url"

]

Confirm sell order

Once the coin amount transfer for a Sell Order has been executed,
Banxa must be notified by sending a request to this endpoint with transaction hash, source and destination wallet address details.

$banxa->confirmSellOrder(
      $orderId,
      $txHash,
      $sourceAddress,
      $destinationAddress,
      $sourceAddressTag,
      $destinationAddressTag
)
Property type required description
$orderId string true Unique ID for the the order
$txHash string true Blockchain transaction hash of the order
$sourceAddress string true The provided customer's source wallet address
$destinationAddress string true The wallet address provided to merchants to transact to
$sourceAddressTag string false The customer's source wallet address tag if the provided source wallet address requires it
$destinationAddressTag string false The wallet address tag provided to merchants if the provided destination wallet address requires it

Result Example

[
    "id"                  => "ee94a43403fb608f341dd5c4c899b846",
    "account_id"          => "d6e7ab2b8f638bed61dc0ac5bec37d4d",
    "account_reference"   => "banxa-account",
    "order_type"          => "CRYPTO-SELL",
    "payment_type"        => "CLEARJCNSELLFP",
    "ref"                 => 507000,
    "fiat_code"           => "AUD",
    "fiat_amount"         => 100,
    "coin_code"           => "BTC",
    "coin_amount"         => 0.00286436,
    "wallet_address"      => null,
    "wallet_address_tag"  => null,
    "fee"                 => 9.1,
    "fee_tax"             => 0,
    "payment_fee"         => 0,
    "payment_fee_tax"     => 0,
    "commission"          => 0.1,
    "tx_hash"             => null,
    "tx_confirms"         => 0,
    "created_date"        => "01-Jul-2022",
    "created_at"          => "01-Jul-2022 07:51:18",
    "status"              => "in progress",
    "completed_at"        => null,
    "merchant_fee"        => 6.54,
    "merchant_commission" => 0.05,
    "meta_data"           => null,
    "blockchain"          => [
        "id"          => 1,
        "code"        => "BTC",
        "description" => "Bitcoin"
    ]
]

Identity

Create Identity

Allows you to share customer details with Banxa before an Order is created.
This reduces the need for customers to re-submit personal details and upload KYC documentation during the Banxa checkout flow.
Detailed guide on how to implement this API can be found here. You can also find Testing information here

$banxa->createIdentity(
   $identitySharingCollection,
   $customerDetails,
   $residentialAddress
   $customerIdentity,
   $identityDocumentCollection,
)
Property type required description
$identitySharingCollection Object true IdentitySharingCollection object
$customerDetails Object true CustomerDetail object
$residentialAddress Object true ResidentialAddress object
$customerIdentity Object true CustomerIdentity object
$identityDocumentCollection Object false IdentityDocumentCollection object
IdentitySharingCollection
 IdentitySharingCollection::create($kycProviders)
Property type required description
$kycProviders array true array of IdentityProvider objects
IdentitySharingProvider
 IdentitySharingProvider::create($provider, $token)
Property type required description
$provider string true Name of the provider e.g. 'sumsub'
$token string true The unique provider token
CustomerDetail
$customerDetail = CustomerDetail::create($accountReference, $mobileNumber, $emailAddress);
Property type required description
$accountReference string true Unique customer reference provided by you. This should be the same value that is passed when calling the calling the Create Order endpoint.
$mobileNumber string true Mobile number of customer
$emailAddress string true Email address of customer
ResidentialAddress
$residentialAddress = ResidentialAddress::create($country, $addressLine, $suburb, $postCode, $state);
Property type required description
$country string true Customer's country of residence. Required to be formatted using ISO 3166 two-letter country code e.g. "US" or "AU".
$addressLine string false Customer's Street number, street name and street type/suffix.
$suburb string false Customer's Address city or suburb. E.g. "2 Abbey Road".
$postCode string false Customer's Address postal / PIN / ZIP code.
$state string false Customer's Address state / region.
CustomerIdentity
 $customerIdentity = CustomerIdentity::create($givenName, $surname, $dateOfBirth);
Property type required description
$givenName string true Customer's Customer's given / first name.
$surname string true Customer's surname / last name.
$dateOfBirth string false Customer's Customer's date of birth (e.g. "1985-01-31"). Required to format as ISO 8601 Date format : YYYY-MM-DD.
IdentityDocumentCollection
Property type description
$documents array An Array holding IdentityDocument objects
IdentityDocument
 IdentityDocument::create($documentType, $imageLinks, $documentNumber)
Property type required description
$documentType string true The document type (see 'Available document types')
$imageLinks array true Array of image links for the documents type
$documentNumber string true when document type is PASSPORT/IDENTIFICATION/DRIVING_LICENSE The document number, located on the document
Available document types
IdentityDocument::DOCUMENT_TYPE_DRIVING_LICENCE
IdentityDocument::DOCUMENT_TYPE_PASSPORT
IdentityDocument::DOCUMENT_TYPE_IDENTIFICATION
IdentityDocument::DOCUMENT_TYPE_SELFIE
IdentityDocument::DOCUMENT_TYPE_PROOF_OF_ADDRESS

Full Example

$kycProviders = [
    IdentitySharingProvider::create($provider, $token),
    IdentitySharingProvider::create($provider, $token),
];

$documents = [
    IdentityDocument::create($documentType, $imageLinks, $documentNumber),
    IdentityDocument::create($documentType, $imageLinks),
];

$identitySharingCollection = IdentitySharingCollection::create($kycProviders);
$customerDetail = CustomerDetail::create($accountReference, $mobileNumber, $emailAddress);
$residentialAddress = ResidentialAddress::create($country, $addressLine, $suburb, $postCode, $state);
$customerIdentity = CustomerIdentity::create($givenName, $surname, $dateOfBirth);
$identityDocumentCollection = IdentityDocumentCollection::create($documents);

$banxa->createIdentity(
    $identitySharingCollection,
    $customerDetail,
    $residentialAddress,
    $customerIdentity,
    $identityDocumentCollection
);

Result Example

[
    "account_id"        => "28d517af407a0566204acd75e3a8e5b7",
    "account_reference" => "test001001"
]