{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-products/legacy-api/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Banxa API Documentation","description":"Official Banxa API documentation – on-ramp and off-ramp transfers with identity verification and compliance.","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once you have the data collected from the customer, you are ready to make the Create Order request to start the order process with Banxa."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In the response you will receive a field called ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["checkout_url"]},"; use this to redirect the customer to our website."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This can also be put into a, iFrame or a WebView if the you are integrating Banxa into your mobile app."]},{"$$mdtype":"Tag","name":"blockquote","attributes":{},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Remember that the JSON string should not contain any whitespace outside of double quotes"]}]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"javascript","header":{"controls":{"copy":{}}},"source":"const axios = require('axios').default;\n\npublic func generateHmac(\n    method: String, \n    query: String, \n    data: Optional<String> = nil\n    ) -> String \n{    \n  ...\n }\n\npublic func postRequest(query: String, payload: String) {\n    let method = \"POST\"\n    let hmac = generateHmac(method: method, query: query, data: payload)\n    var request = URLRequest(url: URL(string: hostname + query)!)\n    \n    request.httpMethod = method\n    request.addValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n    request.addValue(\"Bearer \" + hmac, forHTTPHeaderField: \"Authorization\")\n    request.httpBody = payload.data(using: String.Encoding.utf8)\n    \n    let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: { data, response, error in\n        guard error == nil else {\n            return\n        }\n        \n        guard let data = data else {\n            return\n        }\n        \n        do {\n            //create json object from data\n            if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {\n                print (json)\n            }\n        } catch let error {\n            print(error.localizedDescription)\n        }\n    })\n    task.resume()\n}\n\npostRequest(query: \"api/orders\", payload: \"{\\\"account_reference\\\":\\\"test01\\\",\\\"source\\\":\\\"AUD\\\",\\\"target\\\":\\\"BTC\\\",\\\"wallet_address\\\":\\\"[VALID_WALLET_ADDRESS]\\\",\\\"return_url_on_success\\\":\\\"https://banxa.com\\\",\\\"source_amount\\\":300}\")\n","lang":"javascript"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"python","header":{"controls":{"copy":{}}},"source":"import requests\nimport time\nimport hmac\n\nurl = 'https://[PARTNER-NAME].banxa-sandbox.com'\n\ndef generateHmac(payload, nonce):\n    ...\n    \ndef sendPostRequest(query, payload):\n    nonce = int(time.time())\n\n    data = 'POST\\n' + query + '\\n' + str(nonce) + '\\n' + payload\n\n    authHeader = generateHmac(data, nonce)\n\n    response = requests.post(url + query,\n        data = payload,\n        headers = {\n                'Authorization': 'Bearer ' + authHeader,\n                'Content-Type': 'application/json'\n        })\n\n    print(response.content)\n\nsendPostRequest('/api/orders', '{\"account_reference\":\"test01\",\"source\":\"USD\",\"target\":\"BTC\",\"source_amount\":\"100\",\"return_url_on_success\":\"test.com\",\"wallet_address\":\"[VALID_WALLET_ADDRESS]\"}')\n","lang":"python"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"java","header":{"controls":{"copy":{}}},"source":"package com.banxa;\n\nimport javax.crypto.Mac;\nimport javax.crypto.spec.SecretKeySpec;\nimport java.net.URI;\nimport java.net.http.HttpClient;\nimport java.net.http.HttpRequest;\nimport java.net.http.HttpResponse;\nimport java.time.Duration;\nimport java.util.Formatter;\n\npublic class BanxaService {\n    private static final String BANXA_URL = \"https://api.banxa-sandbox.com\";\n\n    public static void main(String[] args) throws Exception {\n        BanxaService banxaService = new BanxaService();\n\n        banxaService.sendPostRequest(\"/api/orders\", \"{\" +\n                \"\\\"account_reference\\\":\\\"test01\\\",\" +\n                \"\\\"source\\\":\\\"USD\\\",\" +\n                \"\\\"target\\\":\\\"BTC\\\",\" +\n                \"\\\"source_amount\\\":\\\"100\\\",\" +\n                \"\\\"return_url_on_success\\\":\\\"test.com\\\",\" +\n                \"\\\"wallet_address\\\":\\\"[VALID_WALLET_ADDRESS]\\\"\"+\n                \"}\");\n    }\n\n    private void sendPostRequest(String query, String payload) throws Exception {\n        String hmac = getHmac(\"POST\", query, payload);\n\n        HttpClient httpClient = HttpClient.newHttpClient();\n        HttpRequest request = HttpRequest.newBuilder()\n                .uri(URI.create(BANXA_URL + query))\n                .timeout(Duration.ofSeconds(10))\n                .header(\"Authorization\", \"Bearer \" + hmac)\n                .header(\"content-type\", \"application/json\")\n                .POST(HttpRequest.BodyPublishers.ofString(payload))\n                .build();\n\n        HttpResponse<String> response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());\n\n        if (response.statusCode() == 200) {\n            System.out.println(\"OK\");\n        } else {\n            System.out.println(\"Failed: \" + response.statusCode());\n        }\n    }\n\n    public String getHmac(String method, String query, String payload) throws Exception {\n        ...\n    }\n}\n","lang":"java"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"ruby","header":{"controls":{"copy":{}}},"source":"require 'rest-client'\nrequire 'openssl'\n\ndef signed_header(query, body = nil, method = 'POST', content_type = 'application/json')\n  ...\nend\n\ndef generate_hmac(time, query, body, method = 'POST')\n  ...\nend\n\ndef request_env_url(resource)\n  ...\nend\n\ndef post_request(query, payload = nil)\n  response = RestClient.post(request_env_url(query), payload, signed_header(resource, payload, 'POST'))\n  JSON.parse(response.body)\nend\n\ndef create_order(account_reference, source, target, wallet_address, return_url_on_success)\n  query = \"/api/orders\"\n  payload = {\n    account_reference: account_reference,\n    source: source,\n    target: target,\n    wallet_address: wallet_address,\n    return_url_on_success:return_url_on_success\n  }.to_json\n  post_request(query, payload)\nend\n","lang":"ruby"},"children":[]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"swift","header":{"controls":{"copy":{}}},"source":"import CryptoKit\nimport Foundation\n\nlet hostname = \"https://api.banxa-sandbox.com/\"\nlet key = \"[YOUR_MERCHANT_KEY]\"\nlet secret = \"[YOUR_MERCHANT_SECRET]\".data(using: .utf8)!\nlet secretKey = SymmetricKey(data: secret)\n\npublic func generateHmac(\n    method: String, \n    query: String, \n    data: Optional<String> = nil\n    ) -> String {\n    ...\n}\n\npublic func postRequest(query: String, payload: String) {\n    let method = \"POST\"\n    let hmac = generateHmac(method: method, query: query, data: payload)\n    var request = URLRequest(url: URL(string: hostname + query)!)\n    request.httpMethod = method\n    request.addValue(\"application/json\", forHTTPHeaderField: \"Content-Type\")\n    request.addValue(\"Bearer \" + hmac, forHTTPHeaderField: \"Authorization\")\n    request.httpBody = payload.data(using: String.Encoding.utf8)\n    \n    let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: { data, response, error in\n        guard error == nil else {\n            return\n        }\n        \n        guard let data = data else {\n            return\n        }\n        \n        do {\n            //create json object from data\n            if let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String: Any] {\n                print (json)\n            }\n        } catch let error {\n            print(error.localizedDescription)\n        }\n    })\n    task.resume()\n}\n\npostRequest(query: \"api/orders\", payload: \"{\\\"account_reference\\\":\\\"123test11123a456iasusoa567h\\\",\\\"source\\\":\\\"AUD\\\",\\\"target\\\":\\\"BTC\\\",\\\"wallet_address\\\":\\\"37RdJDa8nbpQRN6e1Ub6uMev55X5uVcqKx\\\",\\\"return_url_on_success\\\":\\\"https://banxa.com\\\",\\\"source_amount\\\":300}\")\n","lang":"swift"},"children":[]}]},"headings":[],"frontmatter":{"title":"Step 6: Create Order","seo":{"title":""}},"lastModified":"2026-05-19T23:30:38.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/products/legacy-api/docs/on-ramp-off-ramp/on-ramp-api-tutorial/step-6-create-order","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}