For the complete documentation index, see llms.txt. This page is also available as Markdown.

Public To Public

Send tokens from public address to public address

post

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.

Authorizations
X-StampstringRequired

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.

Body
organizationIdstringRequired
userIdstringRequired
fromAddressstringRequired
tostringRequired

Recipient address

tokenstringRequired

Token contract address (ERC20 / SPL / TRC20)

amountstringRequired

Amount to transfer

chainIdstringRequired
noncestringRequired
Responses
200

Deposit transaction submitted and withdrawal scheduled

application/json
post/waas/public-to-public
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"
  }
}

Poll the status of a scheduled withdrawal

get

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.

Authorizations
X-StampstringRequired

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.

Path parameters
scheduleIdstringRequired

The scheduleId returned by POST /waas/public-to-public

Responses
200

Scheduled transaction status

application/json
get/waas/scheduled-transaction/{scheduleId}
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