Send and receive Keeta tokens
When to use
Use for a direct on-chain transfer of a specific Keeta token. For an off-chain bank payment, bridge, or FX conversion, use the corresponding anchor skill instead.
SDK steps
For receiving, return
account.publicKeyString.get()with the selected network and requested token address. No SDK call is required to receive.Parse the recipient and token:
const Account = KeetaNet.lib.Account; const recipient = Account.fromPublicKeyString(recipientAddress); const token = Account .fromPublicKeyString(tokenAddress) .assertKeyType(Account.AccountKeyAlgorithm.TOKEN);Check
await userClient.balance(token)and keep the amount asbigint.Present the network, recipient, token, base-unit amount, and optional external identifier for confirmation.
After approval, send:
const result = await userClient.send( recipient, amount, token, externalIdentifier );Confirm the publish result and refresh
balance(token)orhistory()as appropriate.
Confirmations
- Require human confirmation for the final recipient, token address, and amount.
- Display both base units and a formatted value only when token decimals are verified.
- Treat
externalIdentifieras public transaction metadata; do not place secrets or personal data in it.
Failures
- Stop on an invalid recipient or non-token asset identifier.
- On insufficient balance, do not substitute another token.
- If publish status is ambiguous, inspect history before retrying; a blind retry can duplicate payment.
- Do not switch network, recipient, token, or amount to “make it work.”
Related skills
- Use multi-asset-balances for preflight and reconciliation.
- Use pay-out for bank recipients.
- Apply spend-policy before publishing.