live·action

Proof of Action

Secure your irreversible actions with human approval.

Proof of Action is live today — one of the 4 live proofs of the Proof Holdings verification API. Every action proof mints a signed ES256 bearer token you can verify offline.

Proofproof.holdings · verification api
ApprovalNº 2026-0087
requestfinance-bot requests sign-off — “Wire €12,400 to team.management?”
channelTelegram · E2E encrypted
verdictApproved14:02 UTC — the decision itself is signed
Minted· approved
action · ES256

What it proves

Proof of Action puts a human decision in front of any irreversible step. An agent or system requests approval, the designated person approves or denies on their own device — end-to-end encrypted — and the decision is recorded as a signed proof token: who approved what, when, over which channel.

Without Proof

“OK, send it” in a WhatsApp thread — sign-off nobody can prove later.

With Proof

Secure your irreversible actions with human approval.

How it works

  1. 1Create a HITL config pointing at the approver’s channel.
  2. 2Request a confirmation before the irreversible action runs.
  3. 3The human approves or denies — the decision itself is a signed proof token.

Start in minutes

import { Proof } from '@proof-holdings/sdk';

const proof = new Proof('pk_live_...');

const config = await proof.hitl.create({ channel: 'telegram', chat_id: '123456789' });

const confirmation = await proof.confirmations.create({
  hitl_id: config.id,
  message: 'Deploy v2.1.0 to production?',
  timeout_minutes: 30,
});

// Human taps Approve or Deny — the decision is a signed proof token

Endpoints

POST/api/v1/hitlCreate HITL config
GET/api/v1/hitlList HITL configs
GET/api/v1/hitl/:idGet a HITL config
PATCH/api/v1/hitl/:idUpdate a HITL config
DELETE/api/v1/hitl/:idArchive a HITL config
POST/api/v1/confirmationsRequest human approval
GET/api/v1/confirmations/:idGet approval status
GET/api/v1/confirmationsList confirmations
POST/api/v1/authorizationsAsk a person to allow approval requests on their channel
GET/api/v1/authorizationsList authorizations
GET/api/v1/authorizations/:idGet an authorization
DELETE/api/v1/authorizations/:idRevoke an authorization