Credit Cards
Providers: Visa, MasterCard, American Express Processor: Stripe (PCI-compliant) Fees: None Speed: Instant
Save a card once and pay from it whenever you want. Hoody never sees your card number; Stripe stores and processes it.
Your money goes into a General Balance for infrastructure or an AI Balance for LLM credits. Three payment methods add funds: credit card for instant top-ups, cryptocurrency for top-ups that need no payment-provider account, and bank transfer for large deposits. Every transaction is logged, every payment generates an invoice, and both are readable over HTTP.
You can read both balances in one call or query either one on its own:
# See both balances at oncehoody wallet balances get
# General balance onlyhoody wallet balance get
# AI balance onlyhoody wallet credits getimport { HoodyClient } from 'hoody-sdk';const client = new HoodyClient({ baseURL: 'https://api.hoody.com', token: process.env.HOODY_TOKEN });
// All balances: general + AIconst balances = await client.api.wallet.getBalances();console.log(balances.data);// { general_balance: "125.50", ai_limit: "50.00", ai_usage: "23.45", ai_remaining: "26.55", ai_usage_status: "live" }// If ai_usage_status is "unavailable", treat ai_remaining as unknown.
// General balance onlyconst general = await client.api.wallet.getBalance();
// AI balance onlyconst ai = await client.api.wallet.getCredits();# Aggregate balancescurl -X GET "https://api.hoody.com/api/v1/wallet/balances" \ -H "Authorization: Bearer $TOKEN"
# General balancecurl -X GET "https://api.hoody.com/api/v1/wallet/balances/general" \ -H "Authorization: Bearer $TOKEN"
# AI balancecurl -X GET "https://api.hoody.com/api/v1/wallet/balances/ai" \ -H "Authorization: Bearer $TOKEN"One request, one link
cURL runs inside your container and can wrap any HTTP request into a single GET URL. The call stops being something you need a client for and becomes something you can paste into a browser, send in a chat, bookmark, schedule with cron, or drop into a no-code tool.
Nothing is installed on the machine that opens it. The link does carry whatever credentials the call needs, so treat it as you would treat those credentials.
Slashes, colons and braces pass through as they are. The one character you must
encode is an & inside a value, which happens when the wrapped URL
carries its own query string. Left raw it ends the value early, and the rest is
read as cURL's own parameters, so you get a 200 on a request you did
not make.
How the wrapping works Chaining calls into one link Turning a link into a shortcut
Each link reads one of the three balance views without a CLI or SDK install.
# Both balances
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/balances&method=GET&bearer_token=TOKEN&response=transparent
# General only
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/balances/general&method=GET&bearer_token=TOKEN&response=transparent
# AI only
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/balances/ai&method=GET&bearer_token=TOKEN&response=transparent The link carries a credential and executes with it, so it is as sensitive as the credential itself — and it passes through the cURL service's request log on the way, not just the target's. Share it only where you would share the secret, and prefer a delegated token with minimal permissions and an expiry: see API tokens.
Credit Cards
Providers: Visa, MasterCard, American Express Processor: Stripe (PCI-compliant) Fees: None Speed: Instant
Save a card once and pay from it whenever you want. Hoody never sees your card number; Stripe stores and processes it.
Cryptocurrencies
Supported: BTC, ETH, USDT, USDC, LTC, 100+ more Processor: NOWPayments Fees: +5% processing Speed: 5-60 minutes (blockchain confirmation)
You do not need a NOWPayments account or an identity check, but you do need an authenticated Hoody account: creating and checking a crypto invoice are bearer-authenticated wallet calls.
Bank Transfer
Minimum: $500+ Fees: None from Hoody (your bank may charge) Speed: 1-3 business days
Contact support for account details. Best for large deposits and enterprise accounts.
Save a credit card for repeat payments:
# card.json holds the Stripe.js one-time token: {"token": "tok_1LgR....Dc2"}hoody wallet payments methods create --type credit_card --name "Personal Visa" \ --details @card.json --is-defaultconst paymentMethod = await client.api.wallet.createPaymentMethod({ type: 'credit_card', name: 'Personal Visa', details: { token: 'tok_1LgR....Dc2' }, // Stripe.js one-time token is_default: true,});console.log(paymentMethod.data.id); // "507f1f77bcf86cd799439131"curl -X POST "https://api.hoody.com/api/v1/wallet/payment-methods/" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "name": "Personal Visa", "type": "credit_card", "details": { "token": "tok_1LgR....Dc2" }, "is_default": true }'One request, one link
cURL runs inside your container and can wrap any HTTP request into a single GET URL. The call stops being something you need a client for and becomes something you can paste into a browser, send in a chat, bookmark, schedule with cron, or drop into a no-code tool.
Nothing is installed on the machine that opens it. The link does carry whatever credentials the call needs, so treat it as you would treat those credentials.
Slashes, colons and braces pass through as they are. The one character you must
encode is an & inside a value, which happens when the wrapped URL
carries its own query string. Left raw it ends the value early, and the rest is
read as cURL's own parameters, so you get a 200 on a request you did
not make.
How the wrapping works Chaining calls into one link Turning a link into a shortcut
Saves a card from a one-time Stripe token. Generate that token with Stripe.js in your own frontend first — this link cannot create one.
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/payment-methods/&method=POST&bearer_token=TOKEN&json={"name":"Personal%20Visa","type":"credit_card","details":{"token":"tok_1LgR....Dc2"},"is_default":true}&response=transparent The link carries a credential and executes with it, so it is as sensitive as the credential itself — and it passes through the cURL service's request log on the way, not just the target's. Share it only where you would share the secret, and prefer a delegated token with minimal permissions and an expiry: see API tokens.
# List all payment methodshoody wallet payments methods list
# Set a card as defaulthoody wallet payments methods default set $PAYMENT_METHOD_ID
# Delete a cardhoody wallet payments methods delete $PAYMENT_METHOD_ID// List allconst methods = await client.api.wallet.listPaymentMethods();
// Set defaultawait client.api.wallet.setDefaultPaymentMethod(PAYMENT_METHOD_ID);
// Deleteawait client.api.wallet.deletePaymentMethod(PAYMENT_METHOD_ID);# List allcurl -X GET "https://api.hoody.com/api/v1/wallet/payment-methods/" \ -H "Authorization: Bearer $TOKEN"
# Set defaultcurl -X PUT "https://api.hoody.com/api/v1/wallet/payment-methods/$PAYMENT_METHOD_ID/default" \ -H "Authorization: Bearer $TOKEN"
# Deletecurl -X DELETE "https://api.hoody.com/api/v1/wallet/payment-methods/$PAYMENT_METHOD_ID" \ -H "Authorization: Bearer $TOKEN"One request, one link
cURL runs inside your container and can wrap any HTTP request into a single GET URL. The call stops being something you need a client for and becomes something you can paste into a browser, send in a chat, bookmark, schedule with cron, or drop into a no-code tool.
Nothing is installed on the machine that opens it. The link does carry whatever credentials the call needs, so treat it as you would treat those credentials.
Slashes, colons and braces pass through as they are. The one character you must
encode is an & inside a value, which happens when the wrapped URL
carries its own query string. Left raw it ends the value early, and the rest is
read as cURL's own parameters, so you get a 200 on a request you did
not make.
How the wrapping works Chaining calls into one link Turning a link into a shortcut
List saved cards, set one as default, or delete one.
# List
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/payment-methods/&method=GET&bearer_token=TOKEN&response=transparent
# Set default
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/payment-methods/PAYMENT_METHOD_ID/default&method=PUT&bearer_token=TOKEN&response=transparent
# Delete
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/payment-methods/PAYMENT_METHOD_ID&method=DELETE&bearer_token=TOKEN&response=transparent The link carries a credential and executes with it, so it is as sensitive as the credential itself — and it passes through the cURL service's request log on the way, not just the target's. Share it only where you would share the secret, and prefer a delegated token with minimal permissions and an expiry: see API tokens.
Add funds to your General Balance with a card via Stripe Checkout:
# Card top-ups complete on Stripe's hosted checkout page, so they run# through the SDK/HTTP API or the dashboard rather than a direct CLI charge.# From the CLI, check your balance and transactions:hoody wallet balance gethoody wallet transactions list// Card top-up via Stripe Checkout. Redirect the user to the returned// checkout URL; the wallet is credited after Stripe confirms settlement// (webhook), not instantly.const checkout = await client.api.wallet.createStripeCheckout({ amount: '100.00', idempotency_key: 'topup-2026-06-10-001',});// checkout.data.checkout_url: hosted Stripe Checkout URL to open// checkout.data.intent.id: payment intent id (poll with getStripePaymentIntent)curl -X POST "https://api.hoody.com/api/v1/wallet/payments/stripe/checkout" \ -H "Authorization: Bearer $TOKEN" \ -H "Content-Type: application/json" \ -d '{ "amount": "100.00", "idempotency_key": "topup-2026-06-10-001" }'One request, one link
cURL runs inside your container and can wrap any HTTP request into a single GET URL. The call stops being something you need a client for and becomes something you can paste into a browser, send in a chat, bookmark, schedule with cron, or drop into a no-code tool.
Nothing is installed on the machine that opens it. The link does carry whatever credentials the call needs, so treat it as you would treat those credentials.
Slashes, colons and braces pass through as they are. The one character you must
encode is an & inside a value, which happens when the wrapped URL
carries its own query string. Left raw it ends the value early, and the rest is
read as cURL's own parameters, so you get a 200 on a request you did
not make.
How the wrapping works Chaining calls into one link Turning a link into a shortcut
Opens a Stripe Checkout session; follow the returned redirect URL to complete the charge. The wallet is credited after Stripe confirms settlement, not instantly.
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/payments/stripe/checkout&method=POST&bearer_token=TOKEN&json={"amount":"100.00","idempotency_key":"topup-2026-06-10-001"}&response=transparent The link carries a credential and executes with it, so it is as sensitive as the credential itself — and it passes through the cURL service's request log on the way, not just the target's. Share it only where you would share the secret, and prefer a delegated token with minimal permissions and an expiry: see API tokens.
Redirect the user to the returned checkout URL. Funds are credited after Stripe confirms settlement, usually within seconds. There are no additional fees, and an invoice is generated automatically.
Crypto payments work from any country and need no NOWPayments account or identity check; creating and checking the invoice still requires an authenticated Hoody account.
Create a hosted invoice
Call the dashboard or API with the USD amount and, optionally, an idempotency_key. The API returns data.invoice_url.
Complete payment on the hosted invoice
Redirect the user to data.invoice_url, where the cryptocurrency and payment destination are handled.
Wait for confirmation
Funds added
Hoody credits your balance, generates an invoice, and sends a confirmation email.
BTC, ETH, USDT, USDC, LTC, and 100+ more via NOWPayments. Check the payment interface for the complete list.
Bank transfers are for large deposits and enterprise accounts.
Contact support
Email with your desired amount, account ID, and preferred currency (USD, EUR).
Receive bank details
Account number, routing details, SWIFT/BIC code, and a reference number (required for crediting).
Send the transfer
Include the reference number in the transfer notes. Without it, crediting may be delayed.
Funds arrive (1-3 business days)
Hoody credits your balance, generates an invoice, and sends an email confirmation.
Hoody charges no fee on bank transfers. Your bank may charge wire, SWIFT, or conversion fees.
Every payment, charge, transfer, and refund lands in the same transaction list:
# List recent transactionshoody wallet transactions list
# Get details for a specific transactionhoody wallet transactions get $TRANSACTION_ID// List transactionsconst txns = await client.api.wallet.listTransactions({ limit: 50, sort_by: 'created_at', sort_order: 'desc' });
// Get a specific transactionconst txn = await client.api.wallet.getTransaction(TRANSACTION_ID);# List transactionscurl -X GET "https://api.hoody.com/api/v1/wallet/transactions?limit=50&sort_by=created_at&sort_order=desc" \ -H "Authorization: Bearer $TOKEN"
# Get specific transactioncurl -X GET "https://api.hoody.com/api/v1/wallet/transactions/$TRANSACTION_ID" \ -H "Authorization: Bearer $TOKEN"One request, one link
cURL runs inside your container and can wrap any HTTP request into a single GET URL. The call stops being something you need a client for and becomes something you can paste into a browser, send in a chat, bookmark, schedule with cron, or drop into a no-code tool.
Nothing is installed on the machine that opens it. The link does carry whatever credentials the call needs, so treat it as you would treat those credentials.
Slashes, colons and braces pass through as they are. The one character you must
encode is an & inside a value, which happens when the wrapped URL
carries its own query string. Left raw it ends the value early, and the rest is
read as cURL's own parameters, so you get a 200 on a request you did
not make.
How the wrapping works Chaining calls into one link Turning a link into a shortcut
Lists recent transactions or fetches one by ID.
# List
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/transactions?limit=50%26sort_by=created_at%26sort_order=desc&method=GET&bearer_token=TOKEN&response=transparent
# Get one
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/transactions/TRANSACTION_ID&method=GET&bearer_token=TOKEN&response=transparent The link carries a credential and executes with it, so it is as sensitive as the credential itself — and it passes through the cURL service's request log on the way, not just the target's. Share it only where you would share the secret, and prefer a delegated token with minimal permissions and an expiry: see API tokens.
Each transaction includes: unique ID, amount, currency, type (payment, credit, debit, refund, adjustment), status (pending, completed, failed, cancelled), timestamp, and related invoice.
Every payment generates an invoice automatically. Download them for accounting, taxes, or client billing:
# List all invoiceshoody wallet invoices list
# Download invoice as PDF (-o raw is required: the default output# JSON-stringifies the binary body and is not a usable PDF)hoody wallet invoices download $INVOICE_ID -o raw > invoice.pdf
# Generate invoice for a transaction that's missing onehoody wallet invoices create $TRANSACTION_ID// List invoicesconst invoices = await client.api.wallet.listInvoices({ limit: 10, sort_by: 'created_at', sort_order: 'desc' });
// Download PDFconst pdf = await client.api.wallet.downloadInvoice(INVOICE_ID);
// Generate missing invoiceawait client.api.wallet.createInvoice(TRANSACTION_ID);# List invoicescurl -X GET "https://api.hoody.com/api/v1/wallet/invoices/?limit=10&sort_order=desc" \ -H "Authorization: Bearer $TOKEN"
# Download PDFcurl -X GET "https://api.hoody.com/api/v1/wallet/invoices/$INVOICE_ID/pdf" \ -H "Authorization: Bearer $TOKEN" -o invoice.pdf
# Generate missing invoicecurl -X POST "https://api.hoody.com/api/v1/wallet/invoices/generate/$TRANSACTION_ID" \ -H "Authorization: Bearer $TOKEN"One request, one link
cURL runs inside your container and can wrap any HTTP request into a single GET URL. The call stops being something you need a client for and becomes something you can paste into a browser, send in a chat, bookmark, schedule with cron, or drop into a no-code tool.
Nothing is installed on the machine that opens it. The link does carry whatever credentials the call needs, so treat it as you would treat those credentials.
Slashes, colons and braces pass through as they are. The one character you must
encode is an & inside a value, which happens when the wrapped URL
carries its own query string. Left raw it ends the value early, and the rest is
read as cURL's own parameters, so you get a 200 on a request you did
not make.
How the wrapping works Chaining calls into one link Turning a link into a shortcut
Lists invoices or generates one for a transaction that’s missing it. The PDF download (see the HTTP tab above) is a plain GET too, returning raw PDF bytes instead of JSON — fetch it with the CLI or HTTP tab shown above.
# List
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/invoices/?limit=10%26sort_order=desc&method=GET&bearer_token=TOKEN&response=transparent
# Generate missing
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/invoices/generate/TRANSACTION_ID&method=POST&bearer_token=TOKEN&response=transparent The link carries a credential and executes with it, so it is as sensitive as the credential itself — and it passes through the cURL service's request log on the way, not just the target's. Share it only where you would share the secret, and prefer a delegated token with minimal permissions and an expiry: see API tokens.
| Method | Speed | Fees | Best For |
|---|---|---|---|
| Credit Card | Instant | None | Regular top-ups, automation |
| Cryptocurrency | 5-60 min | +5% | Privacy, international, no-account |
| Bank Transfer | 1-3 days | Bank fees vary | Large deposits ($500+), enterprise |
Pick the method by what you need most: speed (card), privacy (crypto), or volume (bank transfer).
Your bank may flag hosting purchases as suspicious. Call your bank to whitelist Stripe. Verify the card hasn’t expired and the billing address matches. Check payment status:
hoody wallet transactions list --limit 10 # no CLI command for payment-intent status; use the SDK/HTTP tab// For a card payment, look up its Stripe intent (crypto: getCryptoPaymentIntent)const status = await client.api.wallet.getStripePaymentIntent(PAYMENT_ID);# Card payment (crypto: /wallet/payments/crypto/intents/$PAYMENT_ID)curl -X GET "https://api.hoody.com/api/v1/wallet/payments/stripe/intents/$PAYMENT_ID" \ -H "Authorization: Bearer $TOKEN"One request, one link
cURL runs inside your container and can wrap any HTTP request into a single GET URL. The call stops being something you need a client for and becomes something you can paste into a browser, send in a chat, bookmark, schedule with cron, or drop into a no-code tool.
Nothing is installed on the machine that opens it. The link does carry whatever credentials the call needs, so treat it as you would treat those credentials.
Slashes, colons and braces pass through as they are. The one character you must
encode is an & inside a value, which happens when the wrapped URL
carries its own query string. Left raw it ends the value early, and the rest is
read as cURL's own parameters, so you get a 200 on a request you did
not make.
How the wrapping works Chaining calls into one link Turning a link into a shortcut
Looks up a card payment’s Stripe intent status.
https://PROJECT_ID-CONTAINER_ID-curl-1.SERVER.containers.hoody.com/api/v1/curl/request?url=https://api.hoody.com/api/v1/wallet/payments/stripe/intents/PAYMENT_ID&method=GET&bearer_token=TOKEN&response=transparent The link carries a credential and executes with it, so it is as sensitive as the credential itself — and it passes through the cURL service's request log on the way, not just the target's. Share it only where you would share the secret, and prefer a delegated token with minimal permissions and an expiry: see API tokens.
Check the blockchain explorer for your transaction hash. Bitcoin needs 1-6 confirmations, Ethereum needs 12. If confirmed but not credited, contact support with the transaction hash and payment reference.
Verify you included the reference number. Check with your bank that the transfer was processed and not held for review. SWIFT transfers can take up to 5 days. Contact support with your bank confirmation and transfer details.