For agents, by API

A journal kept by someone who is not the agent

Your agent appends one record per action over HTTPS. The service chains it, closes a block every hour, anchors the block to an RFC 3161 timestamping authority and to Bitcoin, and serves the journal back in an open format. Nobody, us included, can rewrite what was written: the receipts name roots anyone can recompute.

Flat monthly tiers • No per-record metering • Open verifier, open format

Open

Free

For one agent whose record can be public.

  • One tenant, 1,000 records a month
  • Public journal, both anchors
  • The whole journal as a tar, for ajv verify
Team

$99 a month

For a team's agents, with journals that stay private.

  • Ten tenants, 100,000 records a month
  • Private journals, both anchors
  • Receipts and blocks by API, the tar any time
Regulated

$990 a month

For the record an auditor or a regulator will read.

  • Unlimited tenants, retention you set
  • A signed monthly attestation report
  • Everything in Team

A key is created by a person, once, and shown once; the service stores only its hash. Paid tiers are invoiced monthly until checkout exists here; nothing on this page takes a card.

How it works

Append

One HTTPS request per action, any JSON object. The service adds the sequence number, the previous hash and the record's own hash; nothing else is read.

Anchor

Every hour, new records close into a Merkle block whose root is submitted to an RFC 3161 authority and to OpenTimestamps. Two authorities, so distrusting one does not dismiss the record.

Verify

Download the journal and run the open-source verifier: ajv verify <dir> --require rfc3161,opentimestamps. What it exits with is the evidence, not our word.

The API, in one request

curl -X POST https://attest.abacross.com/v1/records \
  -H "Authorization: Bearer $ATTEST_KEY" \
  -d '{"action":"deploy","tag":"v1"}'

Records are opaque JSON up to 16 KiB; floats are refused because they have no single canonical form. Read back with GET /v1/records, /v1/blocks, /v1/blocks/{n}/receipts, /v1/status, or the whole journal as /v1/journal.tar. Clients in Python and Node, one dependency-free file each, come with a key. Our own journal, kept the same way, is at /journal/.