Checks the signature of a caller authentication audit event, the record the server keeps of every authentication, denial and governance action.
POST
/
audit
/
verify
cURL
# A signed audit event and its signature, as exported from caller_audit_events:curl -X POST https://parmana-api-real.vercel.app/audit/verify \ -H "Content-Type: application/json" \ --data @audit-event.json
import { ParmanaClient } from "@parmana/sdk";
import { readFileSync } from "node:fs";
const client = new ParmanaClient({
endpoint: "https://parmana-api-real.vercel.app",
apiKey: process.env.PARMANA_API_KEY!,
});
// A signed audit event and its signature, as exported from caller_audit_events.
const { event, signature } = JSON.parse(
readFileSync("audit-event.json", "utf8"),
);
const valid = await client.verifyAuditEvent(event, signature);
console.log(valid);
import json
import os
from datetime import datetime
from pathlib import Path
from parmana import ParmanaClient
from parmana.models import Signature, SignatureAlgorithm
client = ParmanaClient(
endpoint="https://parmana-api-real.vercel.app",
api_key=os.environ["PARMANA_API_KEY"],
)
# A signed audit event and its signature, as exported from caller_audit_events.
exported = json.loads(Path("audit-event.json").read_text())
signature = Signature(
algorithm=SignatureAlgorithm(exported["signature"]["algorithm"]),
key_id=exported["signature"]["keyId"],
value=exported["signature"]["value"],
signed_at=datetime.fromisoformat(exported["signature"]["signedAt"]),
)
valid = client.verify_audit_event(exported["event"], signature)
print(valid)
Request body for POST /audit/verify: the signed caller-authentication audit event and its stored signature, not a lookup by ID. Checked structurally on the server before signature verification runs. Verification operates on canonical bytes and the signature alone, never on event.type.
The caller-authentication audit event as stored. Only type, occurredAt, and route are structurally required; the event may carry further fields depending on what produced it.
The signature stored alongside the event. Only production (Supabase) audit sinks sign; in-memory test sinks never produce a genuine one of these.
Show child attributes
Response
The check ran. Read valid. A 200 alone does not mean the signature verified.
Response shared by POST /refusal/verify and POST /audit/verify: a bare signature-validity result, no wrapper, no partial-failure detail. Both routes verify a signature over bytes with no database lookup, so there is nothing more specific to report than valid or not.
Whether the signature verifies against Parmana's public key for the stated algorithm and key ID.
⌘I
cURL
# A signed audit event and its signature, as exported from caller_audit_events:curl -X POST https://parmana-api-real.vercel.app/audit/verify \ -H "Content-Type: application/json" \ --data @audit-event.json
import { ParmanaClient } from "@parmana/sdk";
import { readFileSync } from "node:fs";
const client = new ParmanaClient({
endpoint: "https://parmana-api-real.vercel.app",
apiKey: process.env.PARMANA_API_KEY!,
});
// A signed audit event and its signature, as exported from caller_audit_events.
const { event, signature } = JSON.parse(
readFileSync("audit-event.json", "utf8"),
);
const valid = await client.verifyAuditEvent(event, signature);
console.log(valid);
import json
import os
from datetime import datetime
from pathlib import Path
from parmana import ParmanaClient
from parmana.models import Signature, SignatureAlgorithm
client = ParmanaClient(
endpoint="https://parmana-api-real.vercel.app",
api_key=os.environ["PARMANA_API_KEY"],
)
# A signed audit event and its signature, as exported from caller_audit_events.
exported = json.loads(Path("audit-event.json").read_text())
signature = Signature(
algorithm=SignatureAlgorithm(exported["signature"]["algorithm"]),
key_id=exported["signature"]["keyId"],
value=exported["signature"]["value"],
signed_at=datetime.fromisoformat(exported["signature"]["signedAt"]),
)
valid = client.verify_audit_event(exported["event"], signature)
print(valid)
{"docsConfig":{"theme":"maple","$schema":"https://mintlify.com/docs.json","name":"Parmana","description":"Parmana lets businesses set clear limits on what AI can do, checks every action against those limits, and keeps a record of each decision.","colors":{"primary":"#6366F1","light":"#6366F1","dark":"#4338CA"},"logo":{"light":"https://mintcdn.com/parmanasystems/3fc1F82PB1uU1_pD/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=3fc1F82PB1uU1_pD\u0026q=85\u0026s=902f62a6181def8e3c6b5aa71a40d247","dark":"https://mintcdn.com/parmanasystems/3fc1F82PB1uU1_pD/logo/logo-dark.svg?fit=max\u0026auto=format\u0026n=3fc1F82PB1uU1_pD\u0026q=85\u0026s=dba61af5a5c9f7960dbd6051e4ec24fb"},"favicon":"https://mintcdn.com/parmanasystems/3fc1F82PB1uU1_pD/logo/seal.svg?fit=max\u0026auto=format\u0026n=3fc1F82PB1uU1_pD\u0026q=85\u0026s=9ede6c2634c534c1d4eadfd76a08d84b","api":{"examples":{"prefill":true}},"background":{"color":{"light":"#FFFFFF","dark":"#1A1A1A"}},"navbar":{"links":[{"href":"https://github.com/pavancharak/parmana-verifier","label":"GitHub"},{"href":"https://github.com/pavancharak/parmana-verifier/discussions","label":"Discussions"}]},"footer":{"socials":{"github":"https://github.com/pavancharak/parmana-verifier"},"links":[{"header":"Legal","items":[{"label":"License and evaluation","href":"/license"},{"label":"Security","href":"https://docs.parmanasystems.com/license"}]}]},"fonts":{"family":"Inter"},"banner":{"content":"The Parmana repository, including the server, the SDKs and the offline verifier, is licensed under the Apache License 2.0. [License](/license)","dismissible":false},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"parmanasystems","hasAudioNarration":false,"actualSubdomain":"parmanasystems","customDomains":["docs.parmanasystems.com"],"gitSource":{"type":"github","owner":"pavancharak","repo":"parmana-core","deployBranch":"main","contentDirectory":"docs/site","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeb7a3f08d17703d20e664e","collectionId":"a084c277-8061-4643-9409-c9716b43e15d","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeb7a3f08d17703d20e664e"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aeb7a3f08d17703d20e664e","clientVersion":"0.0.4067","searchFilterCounts":[{"language":"default","tag":"API reference","count":171},{"language":"default","tag":"TypeScript SDK","count":135},{"language":"default","tag":"REST API","count":69},{"language":"default","tag":"Interfaces","count":63},{"language":"default","tag":"Python SDK","count":48},{"language":"default","tag":"Classes","count":32},{"language":"default","tag":"Handbook","count":27},{"language":"default","tag":"Build with Parmana","count":26},{"language":"default","tag":"The Parmana Handbook","count":24},{"language":"default","tag":"Concepts","count":22}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/endpoints/verify-audit-event","slug":"/api-reference/endpoints/verify-audit-event","pageMetadata":{"title":"Verify a signed caller-authentication audit event","description":"Checks the signature of a caller authentication audit event, the record the server keeps of every authentication, denial and governance action.","openapi":"openapi.bundled.yaml POST /audit/verify","href":"/api-reference/endpoints/verify-audit-event"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Checks the signature of a caller authentication audit event, the record the server keeps of every authentication, denial and governance action.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Verify a signed caller-authentication audit event","description":"Checks the signature of a caller authentication audit event, the record the server keeps of every authentication, denial and governance action.","openapi":"openapi.bundled.yaml POST /audit/verify","href":"/api-reference/endpoints/verify-audit-event"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Audit"],"summary":"Verify a signed caller-authentication audit event","operationId":"verifyAuditEvent","description":"Checks the signature of a caller authentication audit event, the record the server keeps of every authentication, denial and governance action.","security":[],"requestBody":"2bc30f23-f228-45b6-89df-4f352557b134","responses":{"200":"0aaeb4f4-5d0f-41d0-9fe9-681f551e0649","400":"0c568a01-da8d-4839-ac17-76848987af78","429":"b8ec888c-6434-475a-8f83-27b059236083"},"x-codeSamples":[{"lang":"bash","label":"cURL","source":"# A signed audit event and its signature, as exported from caller_audit_events:\ncurl -X POST https://parmana-api-real.vercel.app/audit/verify \\\n -H \"Content-Type: application/json\" \\\n --data @audit-event.json"},{"lang":"typescript","label":"TypeScript","source":"import { ParmanaClient } from \"@parmana/sdk\";\nimport { readFileSync } from \"node:fs\";\n\nconst client = new ParmanaClient({\n endpoint: \"https://parmana-api-real.vercel.app\",\n apiKey: process.env.PARMANA_API_KEY!,\n});\n\n// A signed audit event and its signature, as exported from caller_audit_events.\nconst { event, signature } = JSON.parse(\n readFileSync(\"audit-event.json\", \"utf8\"),\n);\n\nconst valid = await client.verifyAuditEvent(event, signature);\n\nconsole.log(valid);"},{"lang":"python","label":"Python","source":"import json\nimport os\nfrom datetime import datetime\nfrom pathlib import Path\n\nfrom parmana import ParmanaClient\nfrom parmana.models import Signature, SignatureAlgorithm\n\nclient = ParmanaClient(\n endpoint=\"https://parmana-api-real.vercel.app\",\n api_key=os.environ[\"PARMANA_API_KEY\"],\n)\n\n# A signed audit event and its signature, as exported from caller_audit_events.\nexported = json.loads(Path(\"audit-event.json\").read_text())\n\nsignature = Signature(\n algorithm=SignatureAlgorithm(exported[\"signature\"][\"algorithm\"]),\n key_id=exported[\"signature\"][\"keyId\"],\n value=exported[\"signature\"][\"value\"],\n signed_at=datetime.fromisoformat(exported[\"signature\"][\"signedAt\"]),\n)\n\nvalid = client.verify_audit_event(exported[\"event\"], signature)\n\nprint(valid)"}],"method":"post","type":"path","servers":["ccbad58a-c6b7-4105-9b97-9f75bf5ac3e8","f8b42300-1978-4b73-8972-e40460cad714"],"path":"/audit/verify","baseUrlOptions":["https://parmana-api-real.vercel.app","http://localhost:3000"],"title":"Verify a signed caller-authentication audit event","codeSamples":[{"label":"cURL","lang":"bash","source":"# A signed audit event and its signature, as exported from caller_audit_events:\ncurl -X POST https://parmana-api-real.vercel.app/audit/verify \\\n -H \"Content-Type: application/json\" \\\n --data @audit-event.json"},{"label":"TypeScript","lang":"typescript","source":"import { ParmanaClient } from \"@parmana/sdk\";\nimport { readFileSync } from \"node:fs\";\n\nconst client = new ParmanaClient({\n endpoint: \"https://parmana-api-real.vercel.app\",\n apiKey: process.env.PARMANA_API_KEY!,\n});\n\n// A signed audit event and its signature, as exported from caller_audit_events.\nconst { event, signature } = JSON.parse(\n readFileSync(\"audit-event.json\", \"utf8\"),\n);\n\nconst valid = await client.verifyAuditEvent(event, signature);\n\nconsole.log(valid);"},{"label":"Python","lang":"python","source":"import json\nimport os\nfrom datetime import datetime\nfrom pathlib import Path\n\nfrom parmana import ParmanaClient\nfrom parmana.models import Signature, SignatureAlgorithm\n\nclient = ParmanaClient(\n endpoint=\"https://parmana-api-real.vercel.app\",\n api_key=os.environ[\"PARMANA_API_KEY\"],\n)\n\n# A signed audit event and its signature, as exported from caller_audit_events.\nexported = json.loads(Path(\"audit-event.json\").read_text())\n\nsignature = Signature(\n algorithm=SignatureAlgorithm(exported[\"signature\"][\"algorithm\"]),\n key_id=exported[\"signature\"][\"keyId\"],\n value=exported[\"signature\"][\"value\"],\n signed_at=datetime.fromisoformat(exported[\"signature\"][\"signedAt\"]),\n)\n\nvalid = client.verify_audit_event(exported[\"event\"], signature)\n\nprint(valid)"}],"requiredOnlyExamples":false,"requestExampleType":"codeSamples","responseExampleType":"generated","prefillPlaygroundWithExample":true,"prefillPlaygroundExamples":[{"body.event.type":"caller_authenticated","body.event.occurredAt":"2026-09-15T03:00:00.000Z","body.event.route":"/version","body.signature.algorithm":"ed25519","body.signature.keyId":"default","body.signature.value":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="}]},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"title":"Audit Verify Request","description":"Request body for POST /audit/verify: the signed caller-authentication audit event and its stored signature, not a lookup by ID. Checked structurally on the server before signature verification runs. Verification operates on canonical bytes and the signature alone, never on event.type.","type":"object","additionalProperties":false,"required":["event","signature"],"properties":{"event":{"type":"object","description":"The caller-authentication audit event as stored. Only type, occurredAt, and route are structurally required; the event may carry further fields depending on what produced it.","additionalProperties":true,"required":["type","occurredAt","route"],"properties":{"type":{"type":"string","isRequired":true,"uniqueKey":"event.type","typeLabel":"string"},"occurredAt":{"type":"string","format":"date-time","isRequired":true,"uniqueKey":"event.occurredAt","typeLabel":"string\u003cdate-time>"},"route":{"type":"string","isRequired":true,"uniqueKey":"event.route","typeLabel":"string"}},"isRequired":true,"uniqueKey":"event","typeLabel":"object"},"signature":{"type":"object","description":"The signature stored alongside the event. Only production (Supabase) audit sinks sign; in-memory test sinks never produce a genuine one of these.","additionalProperties":true,"required":["algorithm","keyId","value"],"properties":{"algorithm":{"type":"string","examples":["ed25519"],"isRequired":true,"uniqueKey":"signature.algorithm","typeLabel":"string"},"keyId":{"type":"string","isRequired":true,"uniqueKey":"signature.keyId","typeLabel":"string"},"value":{"type":"string","description":"Base64-encoded signature value.","isRequired":true,"uniqueKey":"signature.value","typeLabel":"string"}},"isRequired":true,"uniqueKey":"signature","typeLabel":"object"}},"examples":[{"event":{"type":"caller_authenticated","occurredAt":"2026-09-15T03:00:00.000Z","route":"/version"},"signature":{"algorithm":"ed25519","keyId":"default","value":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="}}],"uniqueKey":"","typeLabel":"Audit Verify Request · object"},"examples":{"Example":{"title":"Example","value":{"event":{"type":"caller_authenticated","occurredAt":"2026-09-15T03:00:00.000Z","route":"/version"},"signature":{"algorithm":"ed25519","keyId":"default","value":"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="}}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"0aaeb4f4-5d0f-41d0-9fe9-681f551e0649":{"description":"The check ran. Read `valid`. A `200` alone does not mean the signature verified.","content":{"application/json":{"schema":{"title":"Verify Result Response","description":"Response shared by POST /refusal/verify and POST /audit/verify: a bare signature-validity result, no wrapper, no partial-failure detail. Both routes verify a signature over bytes with no database lookup, so there is nothing more specific to report than valid or not.","type":"object","additionalProperties":false,"required":["valid"],"properties":{"valid":{"type":"boolean","description":"Whether the signature verifies against Parmana's public key for the stated algorithm and key ID.","isRequired":true,"uniqueKey":"valid","typeLabel":"boolean"}},"examples":[{"valid":true},{"valid":false}],"uniqueKey":"","typeLabel":"Verify Result Response · object"},"examples":{"invalid":{"title":"invalid","value":{"valid":false}}},"exampleType":"examples"}},"exampleType":"examples"},"0c568a01-da8d-4839-ac17-76848987af78":{"description":"The body is not an `{ event, signature }` pair.","content":{"application/json":{"schema":{"title":"Error Response","description":"Shared error envelope produced by packages/api/src/middleware/error-handler.ts and by every route's inline validation checks. error is always a plain human-readable string (never a nested object). code is present only when the failure was a RuntimeError subclass reaching the centralized error handler (VerificationFailedError, ReceiptGenerationError, or an uncategorized RuntimeError); it is absent from every inline route-level check (businessTransactionId format/required checks) and from BusinessTransactionValidationError, PolicyValidationError, SignalValidationError, PolicyNotFoundError, DuplicateBusinessTransactionError, and the generic 500 fallback. POST /policies/validate does NOT use this envelope at all. See its own response schema. For the triggering condition and recommended caller action behind any specific error/code/status combination, see the Error catalog at /api-reference/error-catalog.","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine-readable error code. Only present for errors that reach the handler as a RuntimeError.","examples":["RUNTIME_ERROR","VERIFICATION_FAILED","RECEIPT_GENERATION_FAILED","POLICY_DENIED","CAPABILITY_NOT_ALLOWED","RATE_LIMITED","AUDIT_UNAVAILABLE","SIGNING_UNAVAILABLE","CONNECTOR_NOT_REGISTERED","EXECUTION_RECORD_INCOMPLETE","EXECUTION_INTENT_UNAVAILABLE","EXECUTION_INTENT_RESULT_NOT_RECORDED","EXECUTION_INTENT_NOT_FOUND","EXECUTION_INTENTS_NOT_ENABLED","EXECUTION_INTENT_NOT_RESOLVABLE","EXECUTION_INTENT_RESOLUTION_INVALID","NON_HUMAN_CALLER_DENIED","EXECUTION_OUTCOME_UNKNOWN","AUTHORIZATION_NO_LONGER_VALID"],"uniqueKey":"code","typeLabel":"string"},"executionStatus":{"type":"string","enum":["EXECUTION_UNKNOWN","NOT_EXECUTED"],"description":"RFC-0023 phase 4. EXECUTION_UNKNOWN with EXECUTION_OUTCOME_UNKNOWN: the action was released and the call failed, so whether it ran is unknown; never reported as failed, and the Execution Intent stays ERRORED until a person resolves it. NOT_EXECUTED with AUTHORIZATION_NO_LONGER_VALID: the release was refused because a business condition or the authority grant it rested on no longer held, and nothing was sent.","uniqueKey":"executionStatus","typeLabel":"enum\u003cstring>"}},"examples":[{"error":"businessTransactionId must be a valid UUID."},{"error":"Business Transaction 'eed2a972-1bf5-4166-8472-761f76fbf1b2' already exists."},{"error":"Execution rejected: Vendor payment rejected because the assessed payment risk exceeds the maximum permitted threshold.","code":"RUNTIME_ERROR"}],"uniqueKey":"","typeLabel":"Error Response · object"},"examples":{"malformed":{"title":"malformed","value":{"error":"Request body must be { event, signature } (event: type, occurredAt, route; signature: algorithm, keyId, value required)."}}},"exampleType":"examples"}},"exampleType":"examples"},"b8ec888c-6434-475a-8f83-27b059236083":{"description":"Too many requests from this caller on this route in the last minute. The default limits are 30 per caller per minute on `/execute`, 300 per IP address on `/health` and `/ready`, and 60 per IP address shared by the unauthenticated verification and handbook routes. The request never reached the handler, so nothing was recorded or executed. Wait the number of seconds in the `Retry-After` header, then retry.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"title":"Error Response","description":"Shared error envelope produced by packages/api/src/middleware/error-handler.ts and by every route's inline validation checks. error is always a plain human-readable string (never a nested object). code is present only when the failure was a RuntimeError subclass reaching the centralized error handler (VerificationFailedError, ReceiptGenerationError, or an uncategorized RuntimeError); it is absent from every inline route-level check (businessTransactionId format/required checks) and from BusinessTransactionValidationError, PolicyValidationError, SignalValidationError, PolicyNotFoundError, DuplicateBusinessTransactionError, and the generic 500 fallback. POST /policies/validate does NOT use this envelope at all. See its own response schema. For the triggering condition and recommended caller action behind any specific error/code/status combination, see the Error catalog at /api-reference/error-catalog.","type":"object","additionalProperties":false,"required":["error"],"properties":{"error":{"type":"string","description":"Human-readable error message.","isRequired":true,"uniqueKey":"error","typeLabel":"string"},"code":{"type":"string","description":"Stable machine-readable error code. Only present for errors that reach the handler as a RuntimeError.","examples":["RUNTIME_ERROR","VERIFICATION_FAILED","RECEIPT_GENERATION_FAILED","POLICY_DENIED","CAPABILITY_NOT_ALLOWED","RATE_LIMITED","AUDIT_UNAVAILABLE","SIGNING_UNAVAILABLE","CONNECTOR_NOT_REGISTERED","EXECUTION_RECORD_INCOMPLETE","EXECUTION_INTENT_UNAVAILABLE","EXECUTION_INTENT_RESULT_NOT_RECORDED","EXECUTION_INTENT_NOT_FOUND","EXECUTION_INTENTS_NOT_ENABLED","EXECUTION_INTENT_NOT_RESOLVABLE","EXECUTION_INTENT_RESOLUTION_INVALID","NON_HUMAN_CALLER_DENIED","EXECUTION_OUTCOME_UNKNOWN","AUTHORIZATION_NO_LONGER_VALID"],"uniqueKey":"code","typeLabel":"string"},"executionStatus":{"type":"string","enum":["EXECUTION_UNKNOWN","NOT_EXECUTED"],"description":"RFC-0023 phase 4. EXECUTION_UNKNOWN with EXECUTION_OUTCOME_UNKNOWN: the action was released and the call failed, so whether it ran is unknown; never reported as failed, and the Execution Intent stays ERRORED until a person resolves it. NOT_EXECUTED with AUTHORIZATION_NO_LONGER_VALID: the release was refused because a business condition or the authority grant it rested on no longer held, and nothing was sent.","uniqueKey":"executionStatus","typeLabel":"enum\u003cstring>"}},"examples":[{"error":"businessTransactionId must be a valid UUID."},{"error":"Business Transaction 'eed2a972-1bf5-4166-8472-761f76fbf1b2' already exists."},{"error":"Execution rejected: Vendor payment rejected because the assessed payment risk exceeds the maximum permitted threshold.","code":"RUNTIME_ERROR"}],"uniqueKey":"","typeLabel":"Error Response · object"},"examples":{"rateLimited":{"title":"rateLimited","value":{"error":"Rate limit exceeded. Try again later.","code":"RATE_LIMITED"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{},"servers":{"ccbad58a-c6b7-4105-9b97-9f75bf5ac3e8":{"url":"https://parmana-api-real.vercel.app","description":"Production. Needs a key issued by the operator."},"f8b42300-1978-4b73-8972-e40460cad714":{"url":"http://localhost:3000","description":"Local (packages/api, PORT env var, default 3000)"}}},"originalFileLocation":"openapi.bundled.yaml"},"subdomain":"parmanasystems","siteName":"Parmana","title":"Verify a signed caller-authentication audit event - Parmana","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-01T10:36:32.946Z","originalFileLocation":"api-reference/endpoints/verify-audit-event.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Checks the signature of a caller authentication audit event, the record the server keeps of every authentication, denial and governance action.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Parmana\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/parmanasystems/etjcJguz6BN6OG2a/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/parmanasystems/etjcJguz6BN6OG2a/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/parmanasystems/etjcJguz6BN6OG2a/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/parmanasystems/etjcJguz6BN6OG2a/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/parmanasystems/etjcJguz6BN6OG2a/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/parmanasystems/etjcJguz6BN6OG2a/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/parmanasystems/etjcJguz6BN6OG2a/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/parmanasystems/etjcJguz6BN6OG2a/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/parmanasystems/etjcJguz6BN6OG2a/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Verify a signed caller-authentication audit event - Parmana\">\u003cmeta data-mint-head property=\"og:description\" content=\"Checks the signature of a caller authentication audit event, the record the server keeps of every authentication, denial and governance action.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Parmana\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.parmanasystems.com/api-reference/endpoints/verify-audit-event\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://parmanasystems.mintlify.app/_mintlify/api/og/v2?division=Audit\u0026amp;title=Verify+a+signed+caller-authentication+audit+event\u0026amp;description=Checks+the+signature+of+a+caller+authentication+audit+event%2C+the+record+the+server+keeps+of+every+authentication%2C+denial+and+governance+action.\u0026amp;theme=330e7d48bcc953731fc52f38\u0026amp;signature=f1f2dbd5c0adee247faa063a335e65323c72f8e2724a26b1a4cf7b0fecc404f3\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Verify a signed caller-authentication audit event - Parmana\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Checks the signature of a caller authentication audit event, the record the server keeps of every authentication, denial and governance action.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://parmanasystems.mintlify.app/_mintlify/api/og/v2?division=Audit\u0026amp;title=Verify+a+signed+caller-authentication+audit+event\u0026amp;description=Checks+the+signature+of+a+caller+authentication+audit+event%2C+the+record+the+server+keeps+of+every+authentication%2C+denial+and+governance+action.\u0026amp;theme=330e7d48bcc953731fc52f38\u0026amp;signature=f1f2dbd5c0adee247faa063a335e65323c72f8e2724a26b1a4cf7b0fecc404f3\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/parmanasystems/etjcJguz6BN6OG2a/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Parmana\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#6366F1\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.parmanasystems.com/api-reference/endpoints/verify-audit-event\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/endpoints/verify-audit-event.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.parmanasystems.com/#organization\",\"name\":\"Parmana\",\"url\":\"https://docs.parmanasystems.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/parmanasystems/3fc1F82PB1uU1_pD/logo/logo-light.svg?fit=max\u0026auto=format\u0026n=3fc1F82PB1uU1_pD\u0026q=85\u0026s=902f62a6181def8e3c6b5aa71a40d247\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.parmanasystems.com#website\",\"name\":\"Parmana\",\"url\":\"https://docs.parmanasystems.com\",\"publisher\":{\"@id\":\"https://docs.parmanasystems.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.parmanasystems.com/api-reference/endpoints/verify-audit-event#webpage\",\"url\":\"https://docs.parmanasystems.com/api-reference/endpoints/verify-audit-event\",\"name\":\"Verify a signed caller-authentication audit event\",\"description\":\"Checks the signature of a caller authentication audit event, the record the server keeps of every authentication, denial and governance action.\",\"dateModified\":\"2026-10-01T10:36:32.946Z\",\"isPartOf\":{\"@id\":\"https://docs.parmanasystems.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.parmanasystems.com/api-reference/endpoints/verify-audit-event#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.parmanasystems.com/api-reference/endpoints/verify-audit-event#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Parmana\",\"item\":\"https://docs.parmanasystems.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Verify a signed caller-authentication audit event\",\"item\":\"https://docs.parmanasystems.com/api-reference/endpoints/verify-audit-event\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.parmanasystems.com/api-reference/endpoints/verify-audit-event#apireference\",\"headline\":\"Verify a signed caller-authentication audit event\",\"name\":\"Verify a signed caller-authentication audit event\",\"description\":\"Checks the signature of a caller authentication audit event, the record the server keeps of every authentication, denial and governance action.\",\"url\":\"https://docs.parmanasystems.com/api-reference/endpoints/verify-audit-event\",\"mainEntityOfPage\":{\"@id\":\"https://docs.parmanasystems.com/api-reference/endpoints/verify-audit-event#webpage\"},\"dateModified\":\"2026-10-01T10:36:32.946Z\",\"publisher\":{\"@id\":\"https://docs.parmanasystems.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.parmanasystems.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Parmana\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Parmana","nav":{"global":null,"tabs":[{"tab":"Get started","pages":[{"title":"Get started","href":""}]},{"tab":"Concepts","pages":[{"title":"Concepts","href":"/concepts/policies-and-the-decision"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides/full-integration-overview"}]},{"tab":"TypeScript SDK","pages":[{"title":"TypeScript SDK","href":"/sdks/typescript"}]},{"tab":"Python SDK","pages":[{"title":"Python SDK","href":"/sdks/python"}]},{"tab":"Connector SDKs","pages":[{"title":"Connector SDKs","href":"/integrations/overview"}]},{"tab":"REST API","groups":[{"group":"REST API guide","pages":[{"title":"REST API Introduction","href":"/api-reference/introduction"},{"title":"Authentication","href":"/api-reference/authentication"},{"title":"Error Handling","href":"/api-reference/error-handling"},{"title":"Idempotency and Nonces","href":"/api-reference/idempotency-and-nonces"},{"title":"Error Catalog","href":"/api-reference/error-catalog"},{"title":"SDK coverage of the API","href":"/sdks/api-coverage"}]},{"group":"Execution","pages":[{"title":"Execute a Business Transaction","openapi":"openapi.bundled.yaml POST /execute","href":"/api-reference/endpoints/execute-transaction"}]},{"group":"Transactions","pages":[{"title":"List Business Transactions","openapi":"openapi.bundled.yaml GET /transactions","href":"/api-reference/endpoints/list-transactions"},{"title":"Create (execute) a Business Transaction","openapi":"openapi.bundled.yaml POST /transactions","href":"/api-reference/endpoints/create-transaction"},{"title":"Get Business Transaction","openapi":"openapi.bundled.yaml GET /transactions/{businessTransactionId}","href":"/api-reference/endpoints/get-transaction"}]},{"group":"Verification","pages":[{"title":"Verify an Execution Trust Record","openapi":"openapi.bundled.yaml POST /verify","href":"/api-reference/endpoints/verify-transaction"},{"title":"Get latest Verification","openapi":"openapi.bundled.yaml GET /verification/{businessTransactionId}","href":"/api-reference/endpoints/get-latest-verification"}]},{"group":"Receipts","pages":[{"title":"Generate a Receipt","openapi":"openapi.bundled.yaml POST /receipt","href":"/api-reference/endpoints/generate-receipt"},{"title":"Get latest Receipt","openapi":"openapi.bundled.yaml GET /receipt/latest/{businessTransactionId}","href":"/api-reference/endpoints/get-latest-receipt"}]},{"group":"Trust Records","pages":[{"title":"Bulk-export Execution Trust Records (compliance/audit)","openapi":"openapi.bundled.yaml GET /trust-records","href":"/api-reference/endpoints/list-trust-records"},{"title":"Get Execution Trust Record","openapi":"openapi.bundled.yaml GET /trust-records/{businessTransactionId}","href":"/api-reference/endpoints/get-trust-record"}]},{"group":"Replay","pages":[{"title":"Replay an Execution Trust Record","openapi":"openapi.bundled.yaml POST /replay","href":"/api-reference/endpoints/replay-transaction"}]},{"group":"Policies","pages":[{"title":"Get the policy a capability's requests must declare right now","openapi":"openapi.bundled.yaml GET /policies/in-effect","href":"/api-reference/endpoints/get-policy-in-effect"},{"title":"Validate that a Policy exists and is readable","openapi":"openapi.bundled.yaml POST /policies/validate","href":"/api-reference/endpoints/validate-policy"}]},{"group":"Policy Governance","pages":[{"title":"Propose a policy change (maker)","openapi":"openapi.bundled.yaml POST /policies/{name}/{version}/pending-changes","href":"/api-reference/endpoints/propose-policy-change"},{"title":"List pending policy changes (maker-checker)","openapi":"openapi.bundled.yaml GET /policies/pending-changes","href":"/api-reference/endpoints/list-pending-policy-changes"},{"title":"Approve a pending policy change (checker)","openapi":"openapi.bundled.yaml POST /policies/pending-changes/{id}/approve","href":"/api-reference/endpoints/approve-policy-change"},{"title":"Reject a pending policy change (checker)","openapi":"openapi.bundled.yaml POST /policies/pending-changes/{id}/reject","href":"/api-reference/endpoints/reject-policy-change"}]},{"group":"Approvers","pages":[{"title":"List approver keys","openapi":"openapi.bundled.yaml GET /approval-issuers","href":"/api-reference/endpoints/list-approval-issuers"},{"title":"List approver changes","openapi":"openapi.bundled.yaml GET /approval-issuers/changes","href":"/api-reference/endpoints/list-approval-issuer-changes"},{"title":"Propose adding or revoking an approver key","openapi":"openapi.bundled.yaml POST /approval-issuers/changes","href":"/api-reference/endpoints/propose-approval-issuer-change"},{"title":"Approve an approver change","openapi":"openapi.bundled.yaml POST /approval-issuers/changes/{id}/approve","href":"/api-reference/endpoints/approve-approval-issuer-change"},{"title":"Reject an approver change","openapi":"openapi.bundled.yaml POST /approval-issuers/changes/{id}/reject","href":"/api-reference/endpoints/reject-approval-issuer-change"}]},{"group":"External Connectors","pages":[{"title":"List external connectors","openapi":"openapi.bundled.yaml GET /external-connectors","href":"/api-reference/endpoints/list-external-connectors"},{"title":"List external connector changes","openapi":"openapi.bundled.yaml GET /external-connectors/changes","href":"/api-reference/endpoints/list-external-connector-changes"},{"title":"Propose registering or revoking an external connector","openapi":"openapi.bundled.yaml POST /external-connectors/changes","href":"/api-reference/endpoints/propose-external-connector-change"},{"title":"Approve an external connector change","openapi":"openapi.bundled.yaml POST /external-connectors/changes/{id}/approve","href":"/api-reference/endpoints/approve-external-connector-change"},{"title":"Reject an external connector change","openapi":"openapi.bundled.yaml POST /external-connectors/changes/{id}/reject","href":"/api-reference/endpoints/reject-external-connector-change"}]},{"group":"Business Signal Sources","pages":[{"title":"List business signal sources","openapi":"openapi.bundled.yaml GET /business-signal-sources","href":"/api-reference/endpoints/list-business-signal-sources"},{"title":"List business signal source changes","openapi":"openapi.bundled.yaml GET /business-signal-sources/changes","href":"/api-reference/endpoints/list-business-signal-source-changes"},{"title":"Propose registering or revoking a business signal source","openapi":"openapi.bundled.yaml POST /business-signal-sources/changes","href":"/api-reference/endpoints/propose-business-signal-source-change"},{"title":"Approve a business signal source change","openapi":"openapi.bundled.yaml POST /business-signal-sources/changes/{id}/approve","href":"/api-reference/endpoints/approve-business-signal-source-change"},{"title":"Reject a business signal source change","openapi":"openapi.bundled.yaml POST /business-signal-sources/changes/{id}/reject","href":"/api-reference/endpoints/reject-business-signal-source-change"}]},{"group":"Authority Grants","pages":[{"title":"List authority grants","openapi":"openapi.bundled.yaml GET /authority-grants","href":"/api-reference/endpoints/list-authority-grants"},{"title":"List authority grant changes","openapi":"openapi.bundled.yaml GET /authority-grants/changes","href":"/api-reference/endpoints/list-authority-grant-changes"},{"title":"Propose granting or revoking an agent's authority","openapi":"openapi.bundled.yaml POST /authority-grants/changes","href":"/api-reference/endpoints/propose-authority-grant-change"},{"title":"Approve an authority grant change","openapi":"openapi.bundled.yaml POST /authority-grants/changes/{id}/approve","href":"/api-reference/endpoints/approve-authority-grant-change"},{"title":"Reject an authority grant change","openapi":"openapi.bundled.yaml POST /authority-grants/changes/{id}/reject","href":"/api-reference/endpoints/reject-authority-grant-change"}]},{"group":"Sandbox","pages":[{"title":"Get a demo approval (sandbox only)","openapi":"openapi.bundled.yaml POST /sandbox/approvals","href":"/api-reference/endpoints/create-sandbox-approval"}]},{"group":"Kill Switch","pages":[{"title":"Trip the operator kill switch","openapi":"openapi.bundled.yaml POST /kill-switch/trip","href":"/api-reference/endpoints/trip-kill-switch"},{"title":"Reset the operator kill switch","openapi":"openapi.bundled.yaml POST /kill-switch/reset","href":"/api-reference/endpoints/reset-kill-switch"},{"title":"Read the kill switch state","openapi":"openapi.bundled.yaml GET /kill-switch/status","href":"/api-reference/endpoints/get-kill-switch-status"},{"title":"Record a kill switch probe result","openapi":"openapi.bundled.yaml POST /kill-switch/probes","href":"/api-reference/endpoints/record-kill-switch-probe"}]},{"group":"Refusal Records","pages":[{"title":"Verify a Refusal Record's signature","openapi":"openapi.bundled.yaml POST /refusal/verify","href":"/api-reference/endpoints/verify-refusal-record"},{"title":"Get a Refusal Record by transaction ID","openapi":"openapi.bundled.yaml GET /refusal/{businessTransactionId}","href":"/api-reference/endpoints/get-refusal-record"}]},{"group":"Execution Intents","pages":[{"title":"Verify an Execution Intent's signature","openapi":"openapi.bundled.yaml POST /execution-intents/verify","href":"/api-reference/endpoints/verify-execution-intent"},{"title":"List Execution Intents that never reached a signed Trust Record","openapi":"openapi.bundled.yaml GET /execution-intents/unfinalized","href":"/api-reference/endpoints/list-unfinalized-execution-intents"},{"title":"Get an Execution Intent and its status","openapi":"openapi.bundled.yaml GET /execution-intents/{businessTransactionId}","href":"/api-reference/endpoints/get-execution-intent"},{"title":"Rebuild the signed Trust Record for a released action","openapi":"openapi.bundled.yaml POST /execution-intents/{businessTransactionId}/finalize","href":"/api-reference/endpoints/finalize-execution-intent"},{"title":"Close an intent you reconciled by hand","description":"Closes an intent in state `PREPARED` or `ERRORED` after a person checked the target system, the repair for a `502` `EXECUTION_OUTCOME_UNKNOWN`.","openapi":"openapi.bundled.yaml POST /execution-intents/{businessTransactionId}/resolve","href":"/api-reference/endpoints/resolve-execution-intent"}]},{"group":"Audit","pages":[{"title":"Verify a signed caller-authentication audit event","openapi":"openapi.bundled.yaml POST /audit/verify","href":"/api-reference/endpoints/verify-audit-event"}]},{"group":"System","pages":[{"title":"Root","description":"Returns the service name and `UP`.","openapi":"openapi.bundled.yaml GET /","href":"/api-reference/endpoints/get-root"},{"title":"Health check","openapi":"openapi.bundled.yaml GET /health","href":"/api-reference/endpoints/get-health"},{"title":"Readiness check","openapi":"openapi.bundled.yaml GET /ready","href":"/api-reference/endpoints/get-ready"},{"title":"Get the OpenAPI spec","openapi":"openapi.bundled.yaml GET /openapi.yaml","href":"/api-reference/endpoints/get-open-api-spec"},{"title":"Get the OpenAPI spec, as JSON","openapi":"openapi.bundled.yaml GET /openapi.json","href":"/api-reference/endpoints/get-open-api-spec-json"},{"title":"Machine-readable SDK and discovery manifest","openapi":"openapi.bundled.yaml GET /api-manifest.json","href":"/api-reference/endpoints/get-api-manifest"},{"title":"Service version","openapi":"openapi.bundled.yaml GET /version","href":"/api-reference/endpoints/get-version"},{"title":"Fetch a public signing key for independent, offline verification","openapi":"openapi.bundled.yaml GET /keys/{keyId}","href":"/api-reference/endpoints/get-key"},{"title":"List every public signing key this deployment can currently produce","openapi":"openapi.bundled.yaml GET /.well-known/jwks.json","href":"/api-reference/endpoints/get-jwks"},{"title":"Get the authenticated caller's identity and resolved scope","openapi":"openapi.bundled.yaml GET /callers/me","href":"/api-reference/endpoints/get-caller-me"}]},{"group":"Handbook","pages":[{"title":"Download the Parmana Handbook (PDF)","openapi":"openapi.bundled.yaml GET /parmana-handbook.pdf","href":"/api-reference/endpoints/get-handbook-pdf"},{"title":"Capture an email address, then redirect straight to the handbook PDF","openapi":"openapi.bundled.yaml GET /handbook/download-leads","href":"/api-reference/endpoints/get-handbook-download-lead"},{"title":"Capture an email address before unlocking the handbook PDF download","openapi":"openapi.bundled.yaml POST /handbook/download-leads","href":"/api-reference/endpoints/create-handbook-download-lead"}]}]},{"tab":"Deploy and operate","pages":[{"title":"Deploy and operate","href":"/self-hosted/overview"}]},{"tab":"Reference","pages":[{"title":"Reference","href":"/reference/shared"}]},{"tab":"Build book","pages":[{"title":"Build book","href":"/build-book/overview"}]},{"tab":"Handbook","pages":[{"title":"Handbook","href":"/handbook/overview"}]}]},"basePath":"","title":"Verify a signed caller-authentication audit event - Parmana","buildId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","deploymentId":"dpl_9VVk5y1P8k1ATeJguVngy9Q3cmbD","dynamics":["10e4515597","c2aa737661","b0f84f53ff","a9bb46feb3","2b790eda92"],"chunks":["BannerMarkdown-DicSZcaX.js","dist-CIQkMg3R.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","clsx-ClVdStUn.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","OpenApiReferenceProvider-DX1Meug0.js","utils-B_OMIQVC.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-ChxhRPMa.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CuKvD8Iv.js","snippetPresets-C5d7p2hp.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","Page-BAvA99GL.js","ApiExamples-CfHcE8m4.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C1zZV314.js","shallow-CmQhqCJn.js","getApiPlaygroundDisplay-YRo9s1O7.js","CodeSnippet-RN1MTdfk.js","CodeSnippets-DKLPHxJA.js","getPastedJson-bz0M41mU.js","icon-CsmhpPrv.js","MethodPill-CNGsVE77.js","DuplicateIcon-DilfU_Z2.js","createIcon-BdsYzQck.js","DynamicMarkdown-CbqEDjbV.js","SectionHeading-O6hXpFCN.js","axios-vUo_bRtp.js","Markdown-nKm-uidQ.js","AssistantPageLink-ImrFS4Fy.js"]}