Activity
The tamper-evident, hash-chained audit log (paginated; executed vs declined).
List the audit log (paginated, filterable)
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Query Parameters
Opaque pagination cursor from the previous page's pageInfo.nextCursor.
251 <= value <= 100Filter by executed / declined / pending.
"executed" | "declined" | "pending"ISO-8601 lower bound (inclusive).
date-timeISO-8601 upper bound (exclusive).
date-timeScope the log to this specific account of the caller's (must belong to the authenticated signer - a foreign or unknown id is rejected, never silently ignored). Omitted defaults to the signer's lowest-visible-index account.
Response Body
application/json
application/json
application/json
curl -X GET "https://api.app.botanary.xyz/activity"{
"items": [
{
"id": "a2",
"timestamp": "2026-07-07T09:41:00Z",
"dateLabel": "Today",
"timeLabel": "09:41",
"actor": {
"name": "Uniswap",
"kind": "dApp",
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
},
"action": "Swap 120 USDC → EURC",
"amount": -120,
"token": {
"symbol": "USDC",
"chainId": 42161
},
"chain": "Arbitrum",
"chainId": 42161,
"status": "declined",
"declineReason": "per_action_exceeded",
"provenance": "offchain_only",
"txHash": null,
"auditNonce": null,
"prevHash": "0x9b2c1d0a7e4f3c8b6a1d5e2f0c9a7b3d9b2c1d0a7e4f3c8b6a1d5e2f0c9a7b3d",
"hash": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
"delegationId": "d1"
}
],
"pageInfo": {
"nextCursor": "string",
"hasMore": true
}
}{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}{
"error": {
"code": "out_of_scope",
"message": "This action exceeds the per-action cap.",
"declineReason": "cap_exceeded",
"details": {},
"requestId": "string"
}
}The on-chain anchoring status of the audit log
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Response Body
application/json
application/json
curl -X GET "https://api.app.botanary.xyz/activity/anchor"{
"available": true,
"anchoredHead": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
"localHead": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
"unanchoredCount": 0,
"lastTxHash": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
"lastError": "string"
}{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}Get one audit event (with hash-chain fields)
Authorization
sessionToken Botanary session token from POST /auth/session. Not a key - a revocable session bearer.
In: header
Path Parameters
Response Body
application/json
application/json
application/json
curl -X GET "https://api.app.botanary.xyz/activity/string"{
"id": "a2",
"timestamp": "2026-07-07T09:41:00Z",
"dateLabel": "Today",
"timeLabel": "09:41",
"actor": {
"name": "Uniswap",
"kind": "dApp",
"address": "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"
},
"action": "Swap 120 USDC → EURC",
"amount": -120,
"token": {
"symbol": "USDC",
"chainId": 42161
},
"chain": "Arbitrum",
"chainId": 42161,
"status": "declined",
"declineReason": "per_action_exceeded",
"provenance": "offchain_only",
"txHash": null,
"auditNonce": null,
"prevHash": "0x9b2c1d0a7e4f3c8b6a1d5e2f0c9a7b3d9b2c1d0a7e4f3c8b6a1d5e2f0c9a7b3d",
"hash": "0x4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b4c1f9a0b2d7e8c3f1a6b0d4e2c9f7a1b",
"delegationId": "d1"
}{
"error": {
"code": "unauthorized",
"message": "Session token missing or expired."
}
}{
"error": {
"code": "out_of_scope",
"message": "This action exceeds the per-action cap.",
"declineReason": "cap_exceeded",
"details": {},
"requestId": "string"
}
}