Transak fiat-to-crypto on-ramp for Web3. Buy and sell crypto with 100+ payment methods across 170+ countries.
67
Quality
56%
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Advisory
Suggest reviewing before use
Optimize this skill with Tessl
npx tessl skill review --optimize ./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 |
45f9fac
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.