curl --request POST \
--url https://api.copper.co/platform/orders \
--header 'Content-Type: application/json' \
--data '
{
"amount": "0.1",
"baseCurrency": "BTC",
"externalOrderId": "<string>",
"orderType": "withdraw",
"portfolioId": "<string>",
"toCryptoAddressId": "<string>",
"description": "Withdrawal to my wallet",
"includeFeeInWithdraw": "false",
"mainCurrency": "<string>"
}
'import requests
url = "https://api.copper.co/platform/orders"
payload = {
"amount": "0.1",
"baseCurrency": "BTC",
"externalOrderId": "<string>",
"orderType": "withdraw",
"portfolioId": "<string>",
"toCryptoAddressId": "<string>",
"description": "Withdrawal to my wallet",
"includeFeeInWithdraw": "false",
"mainCurrency": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
amount: '0.1',
baseCurrency: 'BTC',
externalOrderId: '<string>',
orderType: 'withdraw',
portfolioId: '<string>',
toCryptoAddressId: '<string>',
description: 'Withdrawal to my wallet',
includeFeeInWithdraw: 'false',
mainCurrency: '<string>'
})
};
fetch('https://api.copper.co/platform/orders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.copper.co/platform/orders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => '0.1',
'baseCurrency' => 'BTC',
'externalOrderId' => '<string>',
'orderType' => 'withdraw',
'portfolioId' => '<string>',
'toCryptoAddressId' => '<string>',
'description' => 'Withdrawal to my wallet',
'includeFeeInWithdraw' => 'false',
'mainCurrency' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.copper.co/platform/orders"
payload := strings.NewReader("{\n \"amount\": \"0.1\",\n \"baseCurrency\": \"BTC\",\n \"externalOrderId\": \"<string>\",\n \"orderType\": \"withdraw\",\n \"portfolioId\": \"<string>\",\n \"toCryptoAddressId\": \"<string>\",\n \"description\": \"Withdrawal to my wallet\",\n \"includeFeeInWithdraw\": \"false\",\n \"mainCurrency\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.copper.co/platform/orders")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"0.1\",\n \"baseCurrency\": \"BTC\",\n \"externalOrderId\": \"<string>\",\n \"orderType\": \"withdraw\",\n \"portfolioId\": \"<string>\",\n \"toCryptoAddressId\": \"<string>\",\n \"description\": \"Withdrawal to my wallet\",\n \"includeFeeInWithdraw\": \"false\",\n \"mainCurrency\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.copper.co/platform/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"0.1\",\n \"baseCurrency\": \"BTC\",\n \"externalOrderId\": \"<string>\",\n \"orderType\": \"withdraw\",\n \"portfolioId\": \"<string>\",\n \"toCryptoAddressId\": \"<string>\",\n \"description\": \"Withdrawal to my wallet\",\n \"includeFeeInWithdraw\": \"false\",\n \"mainCurrency\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"amount": "<string>",
"baseCurrency": "<string>",
"createdAt": "<string>",
"externalOrderId": "<string>",
"orderId": "<string>",
"orderType": "sell",
"portfolioId": "<string>",
"portfolioType": "custody",
"status": "new",
"createdBy": "<string>",
"extra": {
"availableCoSigners": [
"<string>"
],
"availableSnapshot": "<string>",
"balanceSnapshot": "<string>",
"blockchainTransactionType": "send",
"clearLoop": true,
"clearLoopExtra": {
"clearLoopExternalNetted": true,
"clearLoopSettlementId": "<string>"
},
"clientAccountId": "<string>",
"coSigners": [
"<string>"
],
"coSignersNumber": "<string>",
"confirmations": "<string>",
"counterpartyPortfolioId": "<string>",
"deliveryType": "free-of-payment",
"depositOrderId": "<string>",
"depositTargetId": "<string>",
"description": "<string>",
"estimatedFees": {
"fee": "<string>",
"feeCurrency": "<string>",
"baseFeePerGas": "<string>",
"estimatedTime": "<string>",
"feePerByte": {},
"gasLimit": {},
"gasPriceGwei": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"reportingCurrencyRate": "<string>",
"transactionBytes": "<string>"
},
"externalBroadcast": true,
"feeLevel": "low",
"fees": [
{
"fee": "<string>",
"feeCurrency": "<string>",
"baseFeePerGas": "<string>",
"estimatedTime": "<string>",
"feePerByte": {},
"gasLimit": {},
"gasPriceGwei": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"reportingCurrencyRate": "<string>",
"transactionBytes": "<string>"
}
],
"fromAddresses": [
"<string>"
],
"fromCounterpartyId": "<string>",
"fromCryptoAddress": {
"address": "<string>",
"addressType": "externally-owned-account",
"createdAt": "<string>",
"createdBy": "<string>",
"cryptoAddressId": "<string>",
"currency": "<string>",
"isWhitelist": true,
"name": "<string>",
"_embedded": {
"currencyConfigurations": [
{
"createdAt": "<string>",
"createdBy": "<string>",
"cryptoAddressId": "<string>",
"currency": "<string>",
"currencyConfigurationId": "<string>",
"isWhitelist": true,
"extra": {},
"lastUsedAt": "<string>",
"portfolioIds": [
"<string>"
],
"updatedAt": "<string>",
"updatedBy": "<string>"
}
]
},
"acceptTokens": true,
"addressTags": [],
"category": "smart-contract",
"extra": {},
"lastUsedAt": "<string>",
"mainCurrency": "<string>",
"memo": "<string>",
"organizationId": "<string>",
"portfolioIds": [
"<string>"
],
"updatedAt": "<string>",
"updatedBy": "<string>"
},
"fromCryptoAddressId": "<string>",
"fromPortfolioId": "<string>",
"includeFeeInWithdraw": true,
"invoiceId": "<string>",
"marketPrice": "<string>",
"memo": "<string>",
"nextTransferTo": [
{
"targetType": "external",
"cryptoAddressId": "<string>",
"portfolioId": "<string>"
}
],
"originalDepositAmount": "<string>",
"partSigned": {},
"payload": "<string>",
"payloads": [
"<string>"
],
"reportingCurrencyRate": "<string>",
"reportingQuoteCurrencyRate": "<string>",
"signed": {},
"spenderAddress": "<string>",
"terminatedReportingCurrencyRate": "<string>",
"toAddress": "<string>",
"toCounterpartyId": "<string>",
"toCryptoAddressId": "<string>",
"toInvoiceId": "<string>",
"toLendingInvoiceId": "<string>",
"toPortfolioId": "<string>",
"totalQuoteAmount": "<string>",
"transactionId": "<string>",
"transactionRequest": {},
"transferAmount": "<string>",
"transferChainId": "<string>",
"transferDepositTargetId": "<string>",
"transferFees": "<string>",
"transferFeesCurrency": "<string>",
"transferTransactionId": "<string>",
"withdrawFee": "<string>",
"withdrawOrderId": "<string>"
},
"limitType": "otc",
"mainCurrency": "<string>",
"organizationId": "<string>",
"quoteCurrency": "<string>",
"quoteMainCurrency": "<string>",
"terminatedAt": "<string>",
"updatedAt": "<string>"
}{
"error": "bad-request",
"message": "<string>"
}{
"error": "forbidden",
"message": "<string>"
}{
"error": "conflict",
"message": "<string>"
}Withdraw to an Address Book address
curl --request POST \
--url https://api.copper.co/platform/orders \
--header 'Content-Type: application/json' \
--data '
{
"amount": "0.1",
"baseCurrency": "BTC",
"externalOrderId": "<string>",
"orderType": "withdraw",
"portfolioId": "<string>",
"toCryptoAddressId": "<string>",
"description": "Withdrawal to my wallet",
"includeFeeInWithdraw": "false",
"mainCurrency": "<string>"
}
'import requests
url = "https://api.copper.co/platform/orders"
payload = {
"amount": "0.1",
"baseCurrency": "BTC",
"externalOrderId": "<string>",
"orderType": "withdraw",
"portfolioId": "<string>",
"toCryptoAddressId": "<string>",
"description": "Withdrawal to my wallet",
"includeFeeInWithdraw": "false",
"mainCurrency": "<string>"
}
headers = {"Content-Type": "application/json"}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({
amount: '0.1',
baseCurrency: 'BTC',
externalOrderId: '<string>',
orderType: 'withdraw',
portfolioId: '<string>',
toCryptoAddressId: '<string>',
description: 'Withdrawal to my wallet',
includeFeeInWithdraw: 'false',
mainCurrency: '<string>'
})
};
fetch('https://api.copper.co/platform/orders', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.copper.co/platform/orders",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'amount' => '0.1',
'baseCurrency' => 'BTC',
'externalOrderId' => '<string>',
'orderType' => 'withdraw',
'portfolioId' => '<string>',
'toCryptoAddressId' => '<string>',
'description' => 'Withdrawal to my wallet',
'includeFeeInWithdraw' => 'false',
'mainCurrency' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.copper.co/platform/orders"
payload := strings.NewReader("{\n \"amount\": \"0.1\",\n \"baseCurrency\": \"BTC\",\n \"externalOrderId\": \"<string>\",\n \"orderType\": \"withdraw\",\n \"portfolioId\": \"<string>\",\n \"toCryptoAddressId\": \"<string>\",\n \"description\": \"Withdrawal to my wallet\",\n \"includeFeeInWithdraw\": \"false\",\n \"mainCurrency\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.copper.co/platform/orders")
.header("Content-Type", "application/json")
.body("{\n \"amount\": \"0.1\",\n \"baseCurrency\": \"BTC\",\n \"externalOrderId\": \"<string>\",\n \"orderType\": \"withdraw\",\n \"portfolioId\": \"<string>\",\n \"toCryptoAddressId\": \"<string>\",\n \"description\": \"Withdrawal to my wallet\",\n \"includeFeeInWithdraw\": \"false\",\n \"mainCurrency\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.copper.co/platform/orders")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Content-Type"] = 'application/json'
request.body = "{\n \"amount\": \"0.1\",\n \"baseCurrency\": \"BTC\",\n \"externalOrderId\": \"<string>\",\n \"orderType\": \"withdraw\",\n \"portfolioId\": \"<string>\",\n \"toCryptoAddressId\": \"<string>\",\n \"description\": \"Withdrawal to my wallet\",\n \"includeFeeInWithdraw\": \"false\",\n \"mainCurrency\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"amount": "<string>",
"baseCurrency": "<string>",
"createdAt": "<string>",
"externalOrderId": "<string>",
"orderId": "<string>",
"orderType": "sell",
"portfolioId": "<string>",
"portfolioType": "custody",
"status": "new",
"createdBy": "<string>",
"extra": {
"availableCoSigners": [
"<string>"
],
"availableSnapshot": "<string>",
"balanceSnapshot": "<string>",
"blockchainTransactionType": "send",
"clearLoop": true,
"clearLoopExtra": {
"clearLoopExternalNetted": true,
"clearLoopSettlementId": "<string>"
},
"clientAccountId": "<string>",
"coSigners": [
"<string>"
],
"coSignersNumber": "<string>",
"confirmations": "<string>",
"counterpartyPortfolioId": "<string>",
"deliveryType": "free-of-payment",
"depositOrderId": "<string>",
"depositTargetId": "<string>",
"description": "<string>",
"estimatedFees": {
"fee": "<string>",
"feeCurrency": "<string>",
"baseFeePerGas": "<string>",
"estimatedTime": "<string>",
"feePerByte": {},
"gasLimit": {},
"gasPriceGwei": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"reportingCurrencyRate": "<string>",
"transactionBytes": "<string>"
},
"externalBroadcast": true,
"feeLevel": "low",
"fees": [
{
"fee": "<string>",
"feeCurrency": "<string>",
"baseFeePerGas": "<string>",
"estimatedTime": "<string>",
"feePerByte": {},
"gasLimit": {},
"gasPriceGwei": "<string>",
"maxFeePerGas": "<string>",
"maxPriorityFeePerGas": "<string>",
"reportingCurrencyRate": "<string>",
"transactionBytes": "<string>"
}
],
"fromAddresses": [
"<string>"
],
"fromCounterpartyId": "<string>",
"fromCryptoAddress": {
"address": "<string>",
"addressType": "externally-owned-account",
"createdAt": "<string>",
"createdBy": "<string>",
"cryptoAddressId": "<string>",
"currency": "<string>",
"isWhitelist": true,
"name": "<string>",
"_embedded": {
"currencyConfigurations": [
{
"createdAt": "<string>",
"createdBy": "<string>",
"cryptoAddressId": "<string>",
"currency": "<string>",
"currencyConfigurationId": "<string>",
"isWhitelist": true,
"extra": {},
"lastUsedAt": "<string>",
"portfolioIds": [
"<string>"
],
"updatedAt": "<string>",
"updatedBy": "<string>"
}
]
},
"acceptTokens": true,
"addressTags": [],
"category": "smart-contract",
"extra": {},
"lastUsedAt": "<string>",
"mainCurrency": "<string>",
"memo": "<string>",
"organizationId": "<string>",
"portfolioIds": [
"<string>"
],
"updatedAt": "<string>",
"updatedBy": "<string>"
},
"fromCryptoAddressId": "<string>",
"fromPortfolioId": "<string>",
"includeFeeInWithdraw": true,
"invoiceId": "<string>",
"marketPrice": "<string>",
"memo": "<string>",
"nextTransferTo": [
{
"targetType": "external",
"cryptoAddressId": "<string>",
"portfolioId": "<string>"
}
],
"originalDepositAmount": "<string>",
"partSigned": {},
"payload": "<string>",
"payloads": [
"<string>"
],
"reportingCurrencyRate": "<string>",
"reportingQuoteCurrencyRate": "<string>",
"signed": {},
"spenderAddress": "<string>",
"terminatedReportingCurrencyRate": "<string>",
"toAddress": "<string>",
"toCounterpartyId": "<string>",
"toCryptoAddressId": "<string>",
"toInvoiceId": "<string>",
"toLendingInvoiceId": "<string>",
"toPortfolioId": "<string>",
"totalQuoteAmount": "<string>",
"transactionId": "<string>",
"transactionRequest": {},
"transferAmount": "<string>",
"transferChainId": "<string>",
"transferDepositTargetId": "<string>",
"transferFees": "<string>",
"transferFeesCurrency": "<string>",
"transferTransactionId": "<string>",
"withdrawFee": "<string>",
"withdrawOrderId": "<string>"
},
"limitType": "otc",
"mainCurrency": "<string>",
"organizationId": "<string>",
"quoteCurrency": "<string>",
"quoteMainCurrency": "<string>",
"terminatedAt": "<string>",
"updatedAt": "<string>"
}{
"error": "bad-request",
"message": "<string>"
}{
"error": "forbidden",
"message": "<string>"
}{
"error": "conflict",
"message": "<string>"
}Financial regulations require us to collect information under the Travel Rule. We carry out multiple verifications for owners, addresses, and address ownership, for both deposits and withdrawals.
All outgoing withdrawal orders are only allowed to be made to addresses from the Address Book, that have passed the Travel Rule checks. Use the Copper Platform to create a new address and pass the Travel Rule checks before making a withdrawal.
Body
The order type. See details
withdraw Flat fees that Copper charges for withdrawing cryptocurrency to an external address. Flat fees are set per currency and do not change depending on transaction size and type. Flat fees are divided into three fee levels: low, medium and high, which define the speed of transaction processing—the higher the flat fee, the faster the speed. Flat fees are based on average network fees at the start of settlement. See details
low, medium, high Response
OK
Order type. See details
sell, buy, deposit, withdraw, multi-withdraw, wallet-message, retrieved-deposit, earn-reward, earn-shared-reward, claim-shared-reward, cross-chain-deposit, cross-chain-withdraw Portfolio type. See details
custody, trading-vault, trading, external, clearloop Order status. Note: When an order has completed processing, it enters one of the final states and returns a 'terminal' status. terminalStatuses are: EXECUTED, CANCELED, LIQUIDATED, ERROR, BLOCKED, DECLINED, SUSPENDED, REJECTED. See details
new, waiting-funds, reserving, reserved, queued, validating-funds, working, waiting-approve, co-sign-require, approved, processing, executed, canceled, rejecting, rejected, declining, declined, suspending, suspended, blocked, action-required, accepting, accepted, require-initializer-approve, waiting-counterparty-approve, require-counterparty-approve, ready-for-settlement, settled, part-signed-tx-added, full-signed-tx-added, rejected-part-signed-tx-added, rejected-full-signed-tx-added, accepted-part-signed-tx-added, accepted-full-signed-tx-added, awaiting-settlement, master-password-required, manual-resolving, error, pending-atomic-settlement-confirmation, atomic-settlement-reservation-completed, require-finalize, waiting-accept-deposit, waiting-reject-deposit Limit type of the order. See details
otc, rfq Was this page helpful?