KYC.RIP Swap API

v1.0.0

Exchange cryptocurrencies via kyc.rip aggregator API. Use when swapping, converting, or exchanging crypto assets. Supports 700+ coins, no KYC, best rates acr...

0· 166·0 current·0 all-time

Install

OpenClaw Prompt Flow

Install with OpenClaw

Best for remote or guided setup. Copy the exact prompt, then paste it into OpenClaw for xbtoshi/swap-api.

Previewing Install & Setup.
Prompt PreviewInstall & Setup
Install the skill "KYC.RIP Swap API" (xbtoshi/swap-api) from ClawHub.
Skill page: https://clawhub.ai/xbtoshi/swap-api
Keep the work scoped to this skill only.
After install, inspect the skill metadata and help me finish setup.
Use only the metadata you can verify from ClawHub; do not invent missing requirements.
Ask before making any broader environment changes.

Command Line

CLI Commands

Use the direct CLI path if you want to install manually and keep every step visible.

OpenClaw CLI

Bare skill slug

openclaw skills install swap-api

ClawHub CLI

Package manager switcher

npx clawhub@latest install swap-api
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Benign
medium confidence
Purpose & Capability
The name/description (KYC.RIP Swap API) matches the SKILL.md: it documents public HTTP endpoints for estimating rates, creating swaps, and checking status. There are no unrelated environment variables, binaries, or install steps requested that would be disproportionate to a simple API integration.
Instruction Scope
Runtime instructions are API documentation and example HTTP requests only. The SKILL.md does not instruct the agent to read local files, environment variables, or system configuration, nor to exfiltrate data to arbitrary endpoints. It does, however, involve instructing users/agents to send real crypto to deposit addresses—which is expected for this purpose but carries financial risk.
Install Mechanism
No install spec or code files are present (instruction-only). That minimizes filesystem or code-execution risk and is proportionate for an API documentation skill.
Credentials
The skill declares no required environment variables or credentials and the instructions do not reference any hidden secrets. That aligns with the SKILL.md claim that endpoints are public and require no authentication.
Persistence & Privilege
Flags show normal defaults (always: false, model invocation enabled). The skill does not request permanent presence or elevated privileges and does not attempt to modify other skills or system-wide settings.
Assessment
This skill appears internally consistent with its stated purpose (public swap aggregator docs). However: 1) the skill's source/homepage is unknown—verify the service's reputation before sending funds; 2) the API deals with real cryptocurrency deposits—always test with a very small amount first and confirm deposit addresses and memos exactly; 3) ensure usage is legal in your jurisdiction and consider using established, audited services for large transfers; 4) confirm TLS (https://api.kyc.rip) and monitor returned provider names/addresses for signs of phishing or address replacement.

Like a lobster shell, security has layers — review code before you run it.

aggregatorvk973rc77dkt3bghpzjqesntpqx833jx4anonymousvk973rc77dkt3bghpzjqesntpqx833jx4apivk973rc77dkt3bghpzjqesntpqx833jx4atomic-swapvk973rc77dkt3bghpzjqesntpqx833jx4bitcoinvk973rc77dkt3bghpzjqesntpqx833jx4bridgevk973rc77dkt3bghpzjqesntpqx833jx4btcvk973rc77dkt3bghpzjqesntpqx833jx4cross-chainvk973rc77dkt3bghpzjqesntpqx833jx4cryptocurrencyvk973rc77dkt3bghpzjqesntpqx833jx4defivk973rc77dkt3bghpzjqesntpqx833jx4ethvk973rc77dkt3bghpzjqesntpqx833jx4ethereumvk973rc77dkt3bghpzjqesntpqx833jx4exchangevk973rc77dkt3bghpzjqesntpqx833jx4ghost-protocolvk973rc77dkt3bghpzjqesntpqx833jx4latestvk973rc77dkt3bghpzjqesntpqx833jx4monerovk973rc77dkt3bghpzjqesntpqx833jx4mwcvk973rc77dkt3bghpzjqesntpqx833jx4no-kycvk973rc77dkt3bghpzjqesntpqx833jx4non-custodialvk973rc77dkt3bghpzjqesntpqx833jx4paymentsvk973rc77dkt3bghpzjqesntpqx833jx4privacyvk973rc77dkt3bghpzjqesntpqx833jx4rate-comparisonvk973rc77dkt3bghpzjqesntpqx833jx4stablecoinvk973rc77dkt3bghpzjqesntpqx833jx4swapvk973rc77dkt3bghpzjqesntpqx833jx4usdtvk973rc77dkt3bghpzjqesntpqx833jx4walletvk973rc77dkt3bghpzjqesntpqx833jx4xmrvk973rc77dkt3bghpzjqesntpqx833jx4zanovk973rc77dkt3bghpzjqesntpqx833jx4zcashvk973rc77dkt3bghpzjqesntpqx833jx4zecvk973rc77dkt3bghpzjqesntpqx833jx4
166downloads
0stars
1versions
Updated 1mo ago
v1.0.0
MIT-0

kyc.rip Swap API

No-KYC cryptocurrency exchange aggregator. Compares rates across 10+ providers (Houdini, Trocador, SimpleSwap, ChangeNOW, FixedFloat, StealthEX, LetsExchange, Exolix, Godex, SideShift, and more) and returns the best deal.

Base URL: https://api.kyc.rip

No authentication required. All endpoints are public.


Endpoints

1. Get Swap Estimate

Compare rates across all providers for a given trading pair.

GET /v2/exchange/estimate

Query Parameters:

ParamTypeDefaultDescription
fromstringbtcSource currency ticker (lowercase)
from_netstringMainnetSource network
tostringxmrDestination currency ticker (lowercase)
to_netstringMainnetDestination network
amountnumber(required)Amount to send (must be > 0)
kycstringDMax KYC level filter: A (none), B (light), C (moderate), D (any)
logstringCMax logging policy filter: A (no logs), B (minimal), C (any)
typestringSet to to for fixed-output mode (specify desired receive amount)
fund_riskstringFund risk tolerance filter
no_cachestringSet to 1 to bypass cache

Example — Get best rate for 0.1 BTC to XMR, privacy-only providers:

GET /v2/exchange/estimate?from=btc&to=xmr&amount=0.1&kyc=A&log=A

Response:

{
  "amount_to": 8.42,
  "routes": [
    {
      "provider": "Houdini_Privacy",
      "engine": "houdini",
      "amount_to": 8.42,
      "amount_from": 0.1,
      "kyc": "A",
      "log_policy": "A",
      "eta": 15,
      "fixed": false,
      "spread": 0.012,
      "providerLogo": "https://..."
    },
    {
      "provider": "SageSwap",
      "engine": "sageswap",
      "amount_to": 8.38,
      "amount_from": 0.1,
      "kyc": "A",
      "log_policy": "A",
      "eta": 20,
      "fixed": false,
      "spread": 0.015
    }
  ]
}

Routes are sorted by best rate. The top-level amount_to reflects the best route.


2. Create a Swap Trade

Execute a swap through a specific provider/engine.

POST /v2/exchange/create
Content-Type: application/json

Request Body:

FieldTypeRequiredDescription
enginestringNoEngine name (default: trocador). Use the engine value from the estimate route.
providerstringYesProvider name from the estimate route
from_currencystringYesSource ticker (e.g. btc)
from_networkstringNoSource network (default: Mainnet)
to_currencystringYesDestination ticker (e.g. xmr)
to_networkstringNoDestination network (default: Mainnet)
amount_fromnumberYes*Amount to send (*required when fixed_rate is false)
amount_tonumberYes*Amount to receive (*required when fixed_rate is true)
address_tostringYesDestination wallet address
address_memostringNoMemo/tag for destination (XRP, XLM, etc.)
fixed_ratebooleanNoLock the exchange rate (default: false)
refstringNoReferral code

Example — Swap 0.1 BTC to XMR:

{
  "engine": "houdini",
  "provider": "Houdini_Privacy",
  "from_currency": "btc",
  "from_network": "Mainnet",
  "to_currency": "xmr",
  "to_network": "Mainnet",
  "amount_from": 0.1,
  "address_to": "48vKMSzWMF9b..."
}

Response:

{
  "id": "abc123-def456",
  "status": "WAITING",
  "engine": "houdini",
  "provider": "Houdini_Privacy",
  "depositAddress": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
  "depositAmount": 0.1,
  "depositMemo": null,
  "fromTicker": "BTC",
  "fromNetwork": "Mainnet",
  "fromAmount": 0.1,
  "toTicker": "XMR",
  "toNetwork": "Mainnet",
  "toAmount": 8.42,
  "address_user": "48vKMSzWMF9b...",
  "createdAt": "2026-03-15T10:00:00Z",
  "eta": 15
}

After creating the trade, send the exact depositAmount to depositAddress. If depositMemo is present, include it in the transaction.


3. Check Trade Status

Poll the status of an existing trade.

GET /v2/exchange/status/:id

Query Parameters:

ParamTypeDescription
enginestring(Optional) Specify the engine directly. If omitted, the API auto-detects.

Example:

GET /v2/exchange/status/abc123-def456?engine=houdini

Response:

{
  "id": "abc123-def456",
  "status": "EXCHANGING",
  "engine": "houdini",
  "provider": "Houdini_Privacy",
  "fromTicker": "BTC",
  "fromAmount": 0.1,
  "toTicker": "XMR",
  "toAmount": 8.42,
  "depositAddress": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh",
  "depositAmount": 0.1,
  "address_user": "48vKMSzWMF9b...",
  "txIn": "a1b2c3d4e5f6...",
  "txOut": null,
  "confirmations": 2,
  "createdAt": "2026-03-15T10:00:00Z",
  "timing": {
    "detectedAt": "2026-03-15T10:05:00Z",
    "confirmedAt": "2026-03-15T10:15:00Z",
    "sendingAt": null,
    "finishedAt": null
  }
}

Trade Statuses:

StatusDescription
WAITINGAwaiting deposit from user
CONFIRMINGDeposit detected, waiting for blockchain confirmations
EXCHANGINGDeposit confirmed, exchange in progress
SENDINGExchange complete, sending funds to destination
FINISHEDSwap completed successfully
FAILEDSwap failed (contact support)
REFUNDEDFunds returned to sender
EXPIREDDeposit window expired

4. List Supported Currencies

Get all currencies available for swapping.

GET /v2/exchange/currencies

Query Parameters:

ParamTypeDescription
forcestringSet to true to bypass cache and refresh from all engines

Example:

GET /v2/exchange/currencies

Response (array):

[
  {
    "id": "btc-Mainnet",
    "ticker": "btc",
    "network": "Mainnet",
    "name": "Bitcoin",
    "image": "https://...",
    "minimum": 0.0001,
    "maximum": 10,
    "memo": false,
    "engine": "trocador",
    "engines": ["trocador", "houdini", "sageswap"]
  },
  {
    "id": "usdt-TRC20",
    "ticker": "usdt",
    "network": "TRC20",
    "name": "Tether",
    "image": "https://...",
    "minimum": 1,
    "maximum": 100000,
    "memo": false,
    "engine": "trocador",
    "engines": ["trocador", "houdini"]
  }
]

5. Validate Crypto Address

Check if a wallet address is valid for a given currency and network.

GET /v2/exchange/validate

Query Parameters:

ParamTypeRequiredDescription
tickerstringYesCurrency ticker (e.g. btc)
networkstringYesNetwork name (e.g. Mainnet)
addressstringYesWallet address to validate

Example:

GET /v2/exchange/validate?ticker=btc&network=Mainnet&address=bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh

Response:

{
  "valid": true,
  "ticker": "btc",
  "network": "Mainnet"
}

6. Ghost Protocol (Privacy Bridge)

Two-hop privacy swaps that route through an intermediary (typically XMR) to break the on-chain link between source and destination.

6a. Bridge Estimate

GET /v2/exchange/bridge/estimate

Query Parameters:

ParamTypeDefaultDescription
fromstringbtcSource ticker
tostringbtcDestination ticker
amountnumber(required)Amount to send (must be > 0)
network_fromstringMainnetSource network
network_tostringMainnetDestination network
no_cachestringSet to 1 to bypass cache

Example — Bridge 1 ETH to BTC via privacy tunnel:

GET /v2/exchange/bridge/estimate?from=eth&to=btc&amount=1&network_from=Mainnet&network_to=Mainnet

Response:

{
  "amount_to": 0.038,
  "eta": 20,
  "routes": [
    {
      "engine": "houdini",
      "provider": "HOUDINI_Tunnel",
      "amount_to": 0.038,
      "eta": 15,
      "kyc": "A",
      "type": "TUNNEL",
      "ingressProvider": "Houdini",
      "egressProvider": "Houdini",
      "ingressKyc": "A",
      "egressKyc": "A",
      "requiresRefund": false,
      "bridgeLabel": "MONERO_TUNNEL",
      "bridgeBadge": "FASTEST",
      "bridgeHighlight": "SPEED_OPTIMIZED"
    },
    {
      "engine": "custom",
      "provider": "Custom_Privacy_Bridge",
      "amount_to": 0.0375,
      "eta": 30,
      "kyc": "A",
      "type": "DOUBLE_HOP",
      "hops": [
        { "name": "SimpleSwap" },
        { "name": "SageSwap" }
      ],
      "ingressProvider": "SimpleSwap",
      "egressProvider": "SageSwap",
      "ingressKyc": "C",
      "egressKyc": "A",
      "requiresRefund": true,
      "bridgeLabel": "CUSTOM_PRIVACY_BRIDGE",
      "bridgeBadge": "OPTIMAL",
      "bridgeHighlight": "BEST_OF_BOTH"
    }
  ]
}

Routes are sorted by a composite score: privacy (40%) + rate (40%) + speed (20%).

6b. Bridge Create

POST /v2/exchange/bridge/create
Content-Type: application/json

Request Body:

FieldTypeRequiredDescription
enginestringNoEngine name (default: trocador). Use engine from bridge estimate route.
from_currencystringYesSource ticker
from_networkstringNoSource network (default: Mainnet)
to_currencystringYesDestination ticker
to_networkstringNoDestination network (default: Mainnet)
amount_fromnumberYesAmount to send
address_tostringYesFinal destination address
refund_addressstringVariesRefund address. Required for engines where requiresRefund is true.
address_memostringNoMemo/tag for destination address
refund_memostringNoMemo/tag for refund address
refstringNoReferral code

Example:

{
  "engine": "houdini",
  "from_currency": "eth",
  "from_network": "Mainnet",
  "to_currency": "btc",
  "to_network": "Mainnet",
  "amount_from": 1,
  "address_to": "bc1qxy2kgdygjrsqtzq2n0yrf2493p83kkfjhx0wlh"
}

Response (array of trade legs):

[
  {
    "id": "leg1-id",
    "status": "WAITING",
    "engine": "houdini",
    "fromTicker": "ETH",
    "toTicker": "XMR",
    "depositAddress": "0xabc...",
    "depositAmount": 1,
    "toAmount": 6.5,
    "createdAt": "2026-03-15T10:00:00Z"
  },
  {
    "id": "leg2-id",
    "status": "WAITING",
    "engine": "houdini",
    "fromTicker": "XMR",
    "toTicker": "BTC",
    "depositAddress": "48vKMSzWMF9b...",
    "depositAmount": 6.5,
    "toAmount": 0.038,
    "createdAt": "2026-03-15T10:00:00Z"
  }
]

Only the first leg requires your deposit. The second leg is automatically triggered when the first completes.


Network Names

Use these normalized network names in all API calls:

NetworkValueUsed For
Native chainsMainnetBTC, XMR, ETH (native), LTC, DOGE, XRP, BCH, ADA, XLM, SOL, BNB, TRX
Ethereum ERC-20EthereumUSDT, USDC, DAI on Ethereum
Tron TRC-20TRC20USDT, USDC on Tron
BNB Smart ChainBSCBEP-20 tokens
Solana SPLSolanaSPL tokens
PolygonPolygonPolygon tokens
ArbitrumArbitrumArbitrum tokens
BaseBaseBase tokens
OptimismOptimismOptimism tokens
Avalanche C-ChainAvalancheAvalanche tokens

KYC & Logging Ratings

Providers are rated on two axes. Use these to filter for your privacy needs:

KYC Rating (kyc param): How much identity verification is required.

GradeMeaning
ANo KYC at all
BLight KYC (email or IP-based limits)
CModerate KYC (may require ID for larger amounts)
DAny (no filter)

Logging Policy (log param): How much transaction data the provider retains.

GradeMeaning
ANo logs / fully private
BMinimal logs
CAny (no filter)

For maximum privacy, use kyc=A&log=A.


Common Workflows

Standard Swap (Estimate, Create, Poll)

Step 1: Get quotes
  GET /v2/exchange/estimate?from=btc&to=xmr&amount=0.5

Step 2: Pick the best route and create the trade
  POST /v2/exchange/create
  {
    "engine": "<route.engine>",
    "provider": "<route.provider>",
    "from_currency": "btc",
    "to_currency": "xmr",
    "amount_from": 0.5,
    "address_to": "<user_xmr_address>"
  }

Step 3: Send crypto to the depositAddress from the response

Step 4: Poll status until FINISHED
  GET /v2/exchange/status/<trade_id>?engine=<engine>

Privacy Bridge (Ghost Protocol)

Step 1: Get bridge quotes
  GET /v2/exchange/bridge/estimate?from=eth&to=btc&amount=2

Step 2: Create the bridge (picks a route)
  POST /v2/exchange/bridge/create
  {
    "engine": "<route.engine>",
    "from_currency": "eth",
    "to_currency": "btc",
    "amount_from": 2,
    "address_to": "<user_btc_address>",
    "refund_address": "<user_eth_address>"
  }

Step 3: Send crypto to the first leg's depositAddress

Step 4: Poll both trade legs
  GET /v2/exchange/status/<leg1_id>?engine=<engine>
  GET /v2/exchange/status/<leg2_id>?engine=<engine>

Rate Comparison

# Compare all providers for 1000 USDT (TRC20) -> BTC
GET /v2/exchange/estimate?from=usdt&from_net=TRC20&to=btc&to_net=Mainnet&amount=1000

# Compare only no-KYC providers
GET /v2/exchange/estimate?from=usdt&from_net=TRC20&to=btc&to_net=Mainnet&amount=1000&kyc=A&log=A

Error Handling

All errors return JSON with an error field:

{ "error": "Invalid amount" }
HTTP CodeMeaning
400Bad request (missing/invalid params)
404Trade or resource not found
500Provider or server error

When the estimate endpoint has no available routes, it returns:

{ "routes": [], "amount_to": 0 }

Tips for AI Agents

  • Always estimate first. Do not hardcode provider names; they change. Use the estimate response to get the current best engine and provider.
  • Respect minimums. Check minimum from the currencies endpoint before attempting a swap.
  • Poll with backoff. When checking status, poll every 15-30 seconds. Most swaps complete in 5-30 minutes.
  • Handle memo coins. XRP, XLM, and some others require a depositMemo. Always check the create response for depositMemo and include it in the deposit transaction.
  • Validate addresses before creating trades. Use the /v2/exchange/validate endpoint to avoid failed trades.
  • Use the engine param on status checks for faster lookups when you know which engine handled the trade.

Comments

Loading comments...