curl --request POST \
--url https://harness.chance.cc/api/v1/wallets/{id}/propose \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"input": {
"kind": "transfer",
"chain": "base",
"transfer": {
"asset": "USDC",
"amount": "25",
"to": "0x1111111111111111111111111111111111111111"
}
},
"note": "Monthly payment to the design contractor."
}
'{
"txId": "<string>",
"status": "blocked",
"verdict": "<string>",
"reasoning": "<string>",
"requestHash": "<string>",
"simulation": {
"ok": true,
"status": "clean",
"declared": true,
"wouldRevert": true,
"error": "<string>",
"caip2": "<string>",
"changes": [
{
"direction": "in",
"assetType": "native",
"changeType": "transfer",
"symbol": "<string>",
"name": "<string>",
"contractAddress": "<string>",
"rawAmount": "<string>",
"decimals": 123,
"amount": "<string>",
"usdValue": 123,
"counterparty": "<string>",
"logoUrl": "<string>"
}
],
"totalUsdOut": 123,
"totalUsdIn": 123,
"gasUsed": "<string>",
"logsExcerpt": [
"<string>"
],
"warnings": [
"<string>"
],
"simulatedAt": "2023-11-07T05:31:56Z",
"provider": "tatum"
},
"approvalUrl": "<string>",
"txHash": "<string>",
"scanId": "<string>",
"creditsRemaining": 123,
"proof": {
"transcriptRoot": "<string>",
"outputHash": "<string>",
"signature": "<string>",
"judge": "<string>",
"attested": true,
"anchorTx": "<string>",
"anchorVerified": true,
"transcriptUri": "<string>",
"explorerTx": "<string>"
}
}Propose a transaction
Simulates the input, checks the wallet’s limits, then runs the judge against the wallet’s mandate. An autonomous wallet executes an ALLOW with a clean, verifiable simulation. Everything else that is not blocked waits for the owner at approvalUrl. One credit when the judge runs; a proposal the limits block first is free.
curl --request POST \
--url https://harness.chance.cc/api/v1/wallets/{id}/propose \
--header 'Content-Type: application/json' \
--header 'x-api-key: <api-key>' \
--data '
{
"input": {
"kind": "transfer",
"chain": "base",
"transfer": {
"asset": "USDC",
"amount": "25",
"to": "0x1111111111111111111111111111111111111111"
}
},
"note": "Monthly payment to the design contractor."
}
'{
"txId": "<string>",
"status": "blocked",
"verdict": "<string>",
"reasoning": "<string>",
"requestHash": "<string>",
"simulation": {
"ok": true,
"status": "clean",
"declared": true,
"wouldRevert": true,
"error": "<string>",
"caip2": "<string>",
"changes": [
{
"direction": "in",
"assetType": "native",
"changeType": "transfer",
"symbol": "<string>",
"name": "<string>",
"contractAddress": "<string>",
"rawAmount": "<string>",
"decimals": 123,
"amount": "<string>",
"usdValue": 123,
"counterparty": "<string>",
"logoUrl": "<string>"
}
],
"totalUsdOut": 123,
"totalUsdIn": 123,
"gasUsed": "<string>",
"logsExcerpt": [
"<string>"
],
"warnings": [
"<string>"
],
"simulatedAt": "2023-11-07T05:31:56Z",
"provider": "tatum"
},
"approvalUrl": "<string>",
"txHash": "<string>",
"scanId": "<string>",
"creditsRemaining": 123,
"proof": {
"transcriptRoot": "<string>",
"outputHash": "<string>",
"signature": "<string>",
"judge": "<string>",
"attested": true,
"anchorTx": "<string>",
"anchorVerified": true,
"transcriptUri": "<string>",
"explorerTx": "<string>"
}
}Authorizations
An API key (chance_sk_live_…) from https://harness.chance.cc/keys.
Path Parameters
The wallet's id (UUID) or its name.
Body
Response
The proposal outcome.
Escrow transaction id. Poll it at /api/v1/escrow-transactions/{id}.
blocked, awaiting_user, executing, executed, failed ALLOW, BLOCK or ESCALATE. BLOCK without a scanId means the wallet's limits refused it before the judge ran.
Hash of the canonical payload the wallet will sign. Execution recomputes it and refuses on a mismatch.
Show child attributes
Show child attributes
Set when the proposal waits for the owner. Send it to them; an API key cannot confirm.
Set when the proposal executed.
Verification id. Null when no judge ran.
Null when no credit was charged.
Null when no judge ran.
Show child attributes
Show child attributes
