---
name: keeclear-check
description: Advisory pre-send check for a Keeta USDC to Keeta USDC payment. Returns go, caution, or no-go with a signed receipt. 0.02 USDC. Advisory check, not a guarantee or a legal attestation. The sender decides whether to pay.
---

# KeeClear check

## When to use

Use this before a Keeta USDC to Keeta USDC send, when an agent needs a go, caution, or no-go and a receipt it can verify. Do not use it for other corridors, bridges, FX, AML, or sanctions. It does not send and it does not hold a key. Act on go only when verify returns ok true and signature_valid true. Caution is not approval. No-go means do not send.

## Request

POST https://clear.keespecs.xyz/api/clear/check. JSON body. A bad body is 400 and is not charged. Paid mode is 0.02 USDC, amount 20000, and answers 402 until PAYMENT-SIGNATURE verifies and settles. Dry-run is the default and never calls a facilitator. Asset, pay-to, network, and exact scheme match a KeeSpecs joined read.

- from: sender. Checksummed keeta_ account. Read for outgoing history.
- to: recipient. Must be a user account with at least one block.
- amount: decimal string, at most 6 places. Compared as integer micro-units.
- token: must be USDC.
- corridor: must be keeta-usdc:keeta-usdc.
- purpose: short label stored only inside the hashed request.
- policy.dailyLimit and policy.spentToday: decimal strings. The day's cap and what is already spent.
- policy.allowlist: optional. At most 100 checksummed accounts. Omitted means that check is skipped.
- policy.strict: default false. True turns a missing allowlist entry into no-go.

## Verdict

Rules are clear-rules/1. No-go beats caution beats go. Every reason is code and detail.

- no-go: recipient missing or zero blocks, recipient is a token account, network down or stale, corridor unsupported, amount over the remaining daily limit, or strict true with the recipient not on the allowlist.
- caution: new recipient, network degraded, amount above 50% of dailyLimit, recipient not on a given allowlist when strict is false, or check_unavailable.
- go: everything else.

## Verify

- POST https://clear.keespecs.xyz/api/clear/verify with the full response. Default there is receipt mode: a valid signature after expires_at is ok true, expired true, and signature_valid true.
- Decision mode on that service is ?mode=decision. An expired signature is then ok false, reason signature expired.
- POST https://keespecs.xyz/api/verify?mode=receipt checks the same receipt. A valid signature after expires_at is ok true, expired true, signature_valid true, and kid is set.
- Default https://keespecs.xyz/api/verify has no mode and stays decision. An expired signature is ok false, reason signature expired, with signature_valid true when the signature itself matches.
- You can send https://keespecs.xyz/api/verify a wrapper { "mode": "receipt", "receipt": <signed body> } instead of the query.
- Tampering is ok false, reason payload hash does not match.
- The KeeClear public key is kid kc-sig-2026-10-19-1 at https://keespecs.xyz/.well-known/keespecs-keys.json. The signature is over the canonical JSON of the envelope, not Keeta SignData.

## What it is not

- Not a send. Not custody. Not a legal attestation. Not proof of who the person is.
- Advisory check, not a guarantee or a legal attestation. The sender decides whether to pay.
- This service will not sign the sender's transaction.

Catalogue: https://keespecs.xyz/apis
Skills: https://keespecs.xyz/skills
Sending, bridging, banks, cards, and identity: https://keeta.ai/llms.txt
