Pay Nicky cryptocurrency payment requests on behalf of a user, end to end.
Nicky is a crypto payment platform where a receiver creates a short payment link
(https://pay.nicky.me/s/ABCDE for their profile, or
https://pay.nicky.me/payment-report/ABCDE?paymentId=VWXYZ for a specific request). Anyone —
including an AI agent — can discover the request, receive a wallet address, and send funds. Nicky
handles on-chain monitoring, asset conversion, and confirmation.
When sharing a Nicky link with a user, use these canonical formats:
https://pay.nicky.me/s/ABCDE where ABCDE is the user's short ID
https://pay.nicky.me/payment-report/ABCDE?paymentId=VWXYZ where ABCDE is
the receiver's short ID and VWXYZ is the payment request / bill short ID
Use this skill when the user asks to:
pay.nicky.me/payment-report/ABCDE?paymentId=VWXYZ" or "Pay request #VWXYZ"
If the user only wants to receive crypto on Nicky, do not use this skill — direct them to
The full payment flow runs without authentication. The agent drives the user-facing
conversation; the API does the rest.
pay.nicky.me/payment-report/ABCDE?paymentId=VWXYZ → shortId = "VWXYZ" (use the paymentId value)
#VWXYZ → shortId = "VWXYZ"
pay.nicky.me/s/ABCDE (profile) → no payment request; direct the user to a specific request first
Returned payload includes the receiver (receiverUser), description, invoiceReference,
totalAmount, openAmount, nativeAssetId, status, and the list of availableAssets.
payerName and payerEmail (the receiver uses these to identify who
paid). Never invent them.
accepts and let Nicky convert (the exact converted amount is returned by start-payment).
Capture paymentAttemptId, walletAddress, amountToSend, assetId, memo (if present),
paymentRequestShortId, and expiresAt. The address lease is valid for 30 minutes.
amountToSend of the chosen
asset to walletAddress before expiresAt. If the exact amount is impractical (e.g. gas),
warn that the deposit is matched with ±2% tolerance. If memo is non-null, include it.
REST API → Report transaction. This skips
deposit polling and jumps straight to blockchain validation, which can save minutes.
Stop when status == "Confirmed" OR isPaid == true.
GET /payment/progress returns one of:
| Status | Meaning | Agent action |
| ----------- | ---------------------------------------------------------------- | --------------------------------------------- |
| Pending | Waiting for the transaction to appear on-chain or in the queue | Keep polling (or wait for the report-tx call) |
| Received | Transaction detected, waiting for confirmations | Keep polling |
| Confirmed | Confirmed, matched to the request, and credited | Stop polling — report success to the user |
| Expired | 30-minute window closed before any matching deposit | Tell the user, offer to start a new attempt |
These are the rules agents most often get wrong. Read them carefully.
payerName and payerEmail are required and are shown to
the receiver. Always ask the user.
amountToSend returned by start-payment is the amount
that will be matched. Sending more or less than ±2% risks the deposit being un-matched.
expiresAt may not auto-match. If the
window has expired, call start-payment again — it is idempotent for the same
payer + request + asset, so a fresh address will be issued and the prior attempt can be
abandoned.
memo (destination tag for networks that need
one), pass it to the wallet or the funds may not be credited.
(NICKY_API_KEY) the private MCP endpoint exposes account, nick, balance, billing, credit,
payment-request, payment-report, and webhook tools — see MCP reference.
If the host supports MCP, prefer connecting to the public MCP endpoint — it exposes the same
tools as the REST flow and avoids hand-built HTTP calls.
https://api-public.pay.nicky.me/mcp-public/
GetPaymentRequest, StartPayment, ReportTransaction, GetPaymentProgress,
SearchNicks
X-Api-Key: $NICKY_API_KEY): https://api-public.pay.nicky.me/mcp/
GetCurrentUser, UpdateCurrentUser, GetAllNicks, AddNicks,
GetBalances, GetAcceptedAssets, GetEnabledAssetConnections, GetDepositAddress,
GetConversionRate, GetUnusedConversionQuote, CreatePaymentRequest, GetPaymentRequests,
GetPaymentRequestById, GetPaymentRequestByShortId, CancelPaymentRequest,
FinishPaymentRequest, GetPaymentReports, GetPaymentReportById,
GetPaymentReportsByBillShortId, GetCreditBalance, GetCreditBalanceForSubAccount,
ListCreditTransfers, TransferCredits, GetBillingGroups, ListSubAccounts,
UnlinkSubAccount, CreateSubAccount, CreateWebHook, ListWebHooks, DeleteWebHook, Echo
See MCP reference for tool signatures.
After a payer sends funds, Nicky's backend runs a sequence of background workers to discover,
validate, match, and finalize the payment.
| Stage | What happens | Polling interval |
|---|---|---|
| Deposit discovery | Exchange connector polled for new deposits | every 30 s |
| Blockchain validation | On-chain tx verified; 10+ confirmations required | every 60 s |
| Transaction matching | Deposit matched to the payer's 30-minute address lease (±2% amount tolerance) | every 35 s |
| Payment report creation | Report linked to the payment request | every 45 s |
| Finalization | Fraud/blacklist checks, quote validation, confirmation email sent | every 61 s |
Typical end-to-end confirmation time:
Speed up confirmation: submit the tx hash via report-transaction immediately after
broadcasting. This skips deposit polling and jumps straight to blockchain validation.
| Symptom | Likely cause | Recovery |
| ------------------------------------------------ | ------------------------------------- | --------------------------------------------------------------------------------------- |
| payment-request returns 404 | Unknown short ID | Ask the user to re-check the link / short ID |
| start-payment returns 422 / conflict | Request already paid or expired | Re-fetch the request; if openAmount == 0, tell the user the request is settled |
| progress stays Pending > 5 min on TRC-20 | Tx not yet broadcast or wrong network | Confirm with the user that the tx was sent to the exact walletAddress and the memo |
| progress returns Error from the pipeline | MaxCheckCount, blacklist, invalid quote | Contact paymentAttemptId — do not retry the same attempt |
| progress returns Expired | 30-minute window closed | Start a new attempt |
For payment issues, direct the user to
paymentAttemptId and (if available) the transactionHash. Do not invent status updates —
only what GET /payment/progress returns is authoritative.
共 2 个版本