Public To Public
Executes a deposit-and-withdraw: deposits tokens into the Hinkal contract and immediately schedules a withdrawal to the recipient. Returns the deposit txHash and a scheduleId you can poll via GET /waas/scheduled-transaction/{scheduleId} to track withdrawal status.
Base64URL-encoded JSON: { "publicKey": "<hex ed25519 pubkey>", "signature": "<hex ed25519 sig>" }.
The signature covers JSON.stringify([binding, Object.entries(params)]), where binding
is "<METHOD> <routePath>" (the server's route pattern, e.g. "POST /waas/create-wallet")
and params is the request body (POST) or query params (GET). This binds the stamp to
its own route so it cannot be replayed against a different endpoint. The one parameterized
route, GET /waas/scheduled-transaction/{scheduleId}, binds to the literal
"GET /waas/scheduled-transaction/:scheduleId", not the concrete ID. See the Signing
Requests guide for runnable examples.
Recipient address
Token contract address (ERC20 / SPL / TRC20)
Amount to transfer
Deposit transaction submitted and withdrawal scheduled
Bad request
Invalid or missing X-Stamp
Internal server error
POST /waas/public-to-public HTTP/1.1
Host: api.hinkal.io
X-Stamp: YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 137
{
"organizationId": "text",
"userId": "text",
"fromAddress": "text",
"to": "text",
"token": "text",
"amount": "text",
"chainId": "text",
"nonce": "text"
}{
"status": "success",
"data": {
"txHash": "0xabc123...",
"scheduleId": "sched_abc123"
}
}Use the scheduleId returned by POST /waas/public-to-public to check whether the withdrawal has been sent on-chain. Poll until status is completed, failed, or deposit_failed.
This route is parameterized, so the X-Stamp binding is the literal string "GET /waas/scheduled-transaction/:scheduleId" — with the :scheduleId placeholder unresolved, not the actual scheduleId value from the URL.
Base64URL-encoded JSON: { "publicKey": "<hex ed25519 pubkey>", "signature": "<hex ed25519 sig>" }.
The signature covers JSON.stringify([binding, Object.entries(params)]), where binding
is "<METHOD> <routePath>" (the server's route pattern, e.g. "POST /waas/create-wallet")
and params is the request body (POST) or query params (GET). This binds the stamp to
its own route so it cannot be replayed against a different endpoint. The one parameterized
route, GET /waas/scheduled-transaction/{scheduleId}, binds to the literal
"GET /waas/scheduled-transaction/:scheduleId", not the concrete ID. See the Signing
Requests guide for runnable examples.
The scheduleId returned by POST /waas/public-to-public
Scheduled transaction status
Invalid or missing X-Stamp
Resource not found
Internal server error
GET /waas/scheduled-transaction/{scheduleId} HTTP/1.1
Host: api.hinkal.io
X-Stamp: YOUR_API_KEY
Accept: */*
{
"status": "success",
"data": {
"scheduleId": "text",
"transactions": [
{
"status": "pending",
"scheduledTime": "2026-01-01T00:00:00.000Z",
"txHash": "text"
}
]
}
}Last updated