At a glance
- Get it:
GET /v1/agents/{agent_id}/operations/{correlation_id}/proof, orapi.getOperationProof()in the SDK, for anyop_…execution. - Check it:
verifyOperationProof(proof, "api.agentsonintents.com/log"), offline. - Then, yourself: look up the settlement transactions on-chain, and verify the notary’s TDX quote as on TEE & Attestation.
Get and verify a proof
The call needs your partner API key.correlation_id is the op_… id of an execution of that agent. Owner intents (intent_…) have no operation proof.
verifyOperationProof runs offline. It throws NoteError or ProofError when the proof is for another log, a signature is wrong, an event isn’t this execution’s, or a recorded result was changed after it was committed. The verify-operations example is a complete script.
Response
Each event has an
action, a created_at time, a status, a proof and its evidence:
evidence is the result the event recorded, as canonical JSON, or null when it recorded none. For an execution, it includes the settlement transaction hashes.
notary holds log_key and notary_key (the verifier keys), signing_address, and birth: the TDX attestation quote, its report_data, and previous, the checkpoint the notary continued from after a restart, or null on its first boot.
The log’s public tiles and latest checkpoint are served at https://log.agentsonintents.com/.
What a proof lets you check
APROVEN event’s proof carries the event’s opening (the committed content, in the extra line), its leaf index, the inclusion path and the signed checkpoint. verifyOperationProof checks, offline, that:
- The notary keys belong to the origin you pinned and match the birth attestation’s
report_data. - The checkpoint is signed by the log key and cosigned by the notary key.
- The opening hashes to a leaf the checkpoint includes, and names this execution, its action and its time.
- The
evidencehashes to the opening’sevidenceHash, so a result changed after it was committed is refused.
- Check the settlement on-chain. Look up each NEAR transaction the evidence names:
tx_hash,transaction_hashandsettlement_tx_hash, anddestination_tx_hashonly when the withdrawal’schainisnear. Each should be final and successful. Confidential routes other than withdrawals, and same-chain withdrawals that settle by intent hash alone, name no public transaction, so there is nothing to look up for them. - Check the attestation. Verify the TDX quote in
notary.birthwith a quote verifier, such as dstack-verifier, run by you or by a service you trust. TEE & Attestation shows how. Itsreport_datamust equalverified.birthReportData. That ties the keys to the attested code.
Retention and errors
The API keeps audit events for 90 days. Their commitments stay in the log, so the tree stays valid, but an expired event no longer appears in proofs.
See Status & Errors for every code.