Transak fiat-to-crypto on-ramp for Web3. Buy and sell crypto with 100+ payment methods across 170+ countries.
45
48%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
High
Do not use without reviewing
Fix and improve this skill with Tessl
tessl review fix ./public/skills/0xterrybit/transak/SKILL.mdWeb3 payment infrastructure. Fiat on/off-ramp trusted by 600+ DeFi, NFT, and wallet projects.
| Variable | Description | Required |
|---|---|---|
TRANSAK_API_KEY | API Key | Yes |
TRANSAK_SECRET | Secret for webhooks | No |
TRANSAK_ENV | STAGING or PRODUCTION | No |
https://api-stg.transak.comhttps://api.transak.comAPI_KEY="${TRANSAK_API_KEY}"
ENV="${TRANSAK_ENV:-STAGING}"
[[ "$ENV" == "PRODUCTION" ]] && BASE_URL="https://api.transak.com" || BASE_URL="https://api-stg.transak.com"
curl -s "${BASE_URL}/api/v2/currencies/crypto-currencies" | jq '.response[:10] | .[] | {symbol: .symbol, name: .name, network: .network.name}'curl -s "${BASE_URL}/api/v2/currencies/fiat-currencies" | jq '.response[:10] | .[] | {symbol: .symbol, name: .name, paymentOptions: .paymentOptions}'FIAT="USD"
CRYPTO="ETH"
FIAT_AMOUNT="100"
NETWORK="ethereum"
PAYMENT_METHOD="credit_debit_card"
curl -s "${BASE_URL}/api/v2/currencies/price" \
-G \
--data-urlencode "fiatCurrency=${FIAT}" \
--data-urlencode "cryptoCurrency=${CRYPTO}" \
--data-urlencode "fiatAmount=${FIAT_AMOUNT}" \
--data-urlencode "network=${NETWORK}" \
--data-urlencode "paymentMethod=${PAYMENT_METHOD}" \
--data-urlencode "isBuyOrSell=BUY" | jq '{
cryptoAmount: .response.cryptoAmount,
fiatAmount: .response.fiatAmount,
totalFee: .response.totalFee,
conversionPrice: .response.conversionPrice
}'API_KEY="${TRANSAK_API_KEY}"
WALLET_ADDRESS="<USER_WALLET>"
CRYPTO="ETH"
NETWORK="ethereum"
FIAT_AMOUNT="100"
FIAT_CURRENCY="USD"
# Build widget URL
WIDGET_URL="https://global.transak.com/?apiKey=${API_KEY}"
WIDGET_URL+="&walletAddress=${WALLET_ADDRESS}"
WIDGET_URL+="&cryptoCurrencyCode=${CRYPTO}"
WIDGET_URL+="&network=${NETWORK}"
WIDGET_URL+="&fiatAmount=${FIAT_AMOUNT}"
WIDGET_URL+="&fiatCurrency=${FIAT_CURRENCY}"
WIDGET_URL+="&productsAvailed=BUY"
echo "Widget URL: $WIDGET_URL"ORDER_ID="<ORDER_ID>"
curl -s "${BASE_URL}/api/v2/partners/order/${ORDER_ID}" \
-H "api-key: ${API_KEY}" | jq '{
status: .response.status,
cryptoAmount: .response.cryptoAmount,
transactionHash: .response.transactionHash,
walletAddress: .response.walletAddress
}'| Network | ID | Tokens |
|---|---|---|
| Ethereum | ethereum | ETH, USDT, USDC, DAI |
| Polygon | polygon | MATIC, USDT, USDC |
| Arbitrum | arbitrum | ETH, ARB, USDC |
| Optimism | optimism | ETH, OP, USDC |
| BSC | bsc | BNB, BUSD, USDT |
| Solana | solana | SOL, USDC |
| Avalanche | avaxcchain | AVAX, USDC |
| Base | base | ETH, USDC |
| Bitcoin | bitcoin | BTC |
| Method | Regions | Speed |
|---|---|---|
| Credit/Debit Card | Global | Instant |
| Apple Pay | Global | Instant |
| Google Pay | Global | Instant |
| Bank Transfer | Global | 1-3 days |
| SEPA | Europe | 1-2 days |
| PIX | Brazil | Instant |
| UPI | India | Instant |
| GCash | Philippines | Instant |
| GrabPay | SEA | Instant |
| Status | Description |
|---|---|
AWAITING_PAYMENT_FROM_USER | Waiting for payment |
PAYMENT_DONE_MARKED_BY_USER | Payment submitted |
PROCESSING | Processing order |
PENDING_DELIVERY_FROM_TRANSAK | Sending crypto |
COMPLETED | Order completed |
CANCELLED | Order cancelled |
FAILED | Order failed |
REFUNDED | Payment refunded |
EXPIRED | Order expired |
# Webhook payload
{
"eventID": "ORDER_COMPLETED",
"webhookData": {
"id": "order-123",
"status": "COMPLETED",
"cryptoAmount": 0.05,
"cryptoCurrency": "ETH",
"transactionHash": "0x...",
"walletAddress": "0x..."
}
}verify_webhook() {
local payload="$1"
local signature="$2"
local expected=$(echo -n "$payload" | openssl dgst -sha256 -hmac "$TRANSAK_SECRET" | cut -d' ' -f2)
[[ "$signature" == "$expected" ]]
}# Additional widget parameters
WIDGET_URL+="&themeColor=0066FF" # Custom color
WIDGET_URL+="&hideMenu=true" # Hide menu
WIDGET_URL+="&disableWalletAddressForm=true" # Lock wallet
WIDGET_URL+="&exchangeScreenTitle=Buy%20Crypto" # Custom title
WIDGET_URL+="&defaultPaymentMethod=credit_debit_card"| Error | Cause | Solution |
|---|---|---|
INVALID_API_KEY | Bad API key | Check credentials |
UNSUPPORTED_CRYPTO | Currency unavailable | Check supported list |
AMOUNT_TOO_LOW | Below minimum | Increase amount |
AMOUNT_TOO_HIGH | Above maximum | Decrease amount |
f45fcb5
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.