Send native assets and tokens
curl --request POST \
--url https://api.afkcrypto.com/v1/send \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'x-api-key: <api-key>' \
--data '
{
"chain": "<string>",
"to": "<string>",
"amount": "<string>",
"from": "<string>",
"token": "<string>"
}
'import requests
url = "https://api.afkcrypto.com/v1/send"
payload = {
"chain": "<string>",
"to": "<string>",
"amount": "<string>",
"from": "<string>",
"token": "<string>"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
chain: '<string>',
to: '<string>',
amount: '<string>',
from: '<string>',
token: '<string>'
})
};
fetch('https://api.afkcrypto.com/v1/send', 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.afkcrypto.com/v1/send",
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([
'chain' => '<string>',
'to' => '<string>',
'amount' => '<string>',
'from' => '<string>',
'token' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"x-api-key: <api-key>"
],
]);
$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.afkcrypto.com/v1/send"
payload := strings.NewReader("{\n \"chain\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"from\": \"<string>\",\n \"token\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("x-api-key", "<api-key>")
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.afkcrypto.com/v1/send")
.header("Idempotency-Key", "<idempotency-key>")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"chain\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"from\": \"<string>\",\n \"token\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.afkcrypto.com/v1/send")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"chain\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"from\": \"<string>\",\n \"token\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{ "id": "tx_...", "status": "SUBMITTED", "hash": "0x...", "explorerUrl": "https://basescan.org/tx/0x...", "chainName": "Base" }
엔드포인트
자산 전송 (EVM + Solana)
POST 요청으로 EVM 및 Solana에서 네이티브 자산과 토큰을 전송합니다.
POST
/
send
Send native assets and tokens
curl --request POST \
--url https://api.afkcrypto.com/v1/send \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--header 'x-api-key: <api-key>' \
--data '
{
"chain": "<string>",
"to": "<string>",
"amount": "<string>",
"from": "<string>",
"token": "<string>"
}
'import requests
url = "https://api.afkcrypto.com/v1/send"
payload = {
"chain": "<string>",
"to": "<string>",
"amount": "<string>",
"from": "<string>",
"token": "<string>"
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"x-api-key": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
'x-api-key': '<api-key>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
chain: '<string>',
to: '<string>',
amount: '<string>',
from: '<string>',
token: '<string>'
})
};
fetch('https://api.afkcrypto.com/v1/send', 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.afkcrypto.com/v1/send",
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([
'chain' => '<string>',
'to' => '<string>',
'amount' => '<string>',
'from' => '<string>',
'token' => '<string>'
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"Idempotency-Key: <idempotency-key>",
"x-api-key: <api-key>"
],
]);
$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.afkcrypto.com/v1/send"
payload := strings.NewReader("{\n \"chain\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"from\": \"<string>\",\n \"token\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Idempotency-Key", "<idempotency-key>")
req.Header.Add("x-api-key", "<api-key>")
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.afkcrypto.com/v1/send")
.header("Idempotency-Key", "<idempotency-key>")
.header("x-api-key", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"chain\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"from\": \"<string>\",\n \"token\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.afkcrypto.com/v1/send")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Idempotency-Key"] = '<idempotency-key>'
request["x-api-key"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"chain\": \"<string>\",\n \"to\": \"<string>\",\n \"amount\": \"<string>\",\n \"from\": \"<string>\",\n \"token\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{ "id": "tx_...", "status": "SUBMITTED", "hash": "0x...", "explorerUrl": "https://basescan.org/tx/0x...", "chainName": "Base" }
Idempotency-Key 헤더가 필요합니다. ERC20는 transfer() 호출; SPL은 필요 시 ATA를 생성할 수 있습니다.{ "id": "tx_...", "status": "SUBMITTED", "hash": "0x...", "explorerUrl": "https://basescan.org/tx/0x...", "chainName": "Base" }
비고
- EVM native: value 전송
- ERC20: 토큰
transfer(address,uint256)호출 - SOL native: lamports 전송
- SPL: SPL 토큰 전송(필요 시 ATA 생성 가능)
- 멱등성은 단일 제출을 보장하며 동일 본문 반복 시 원래 200 본문을 반환
인증
헤더
Provide a unique Idempotency-Key per user to ensure single submission.
본문
application/json
Chain slug (e.g., base, base-sepolia, solana-devnet).
Recipient wallet address (owner for token transfers).
Asset type to send.
사용 가능한 옵션:
native, erc20, spl Amount in base units (wei/lamports/token units).
Optional sender wallet; defaults to user's default wallet for the chain.
Token address (EVM) or mint (Solana) when sending tokens.
응답
Submission accepted
AFK transaction id for the submitted action.
Submission status.
사용 가능한 옵션:
SUBMITTED On-chain transaction hash/signature (may be null at submission time).
Direct link to the transaction on a chain explorer. Null until a hash/signature exists.
Human-readable chain name for display (e.g., Base, Ethereum, Solana).