Notable changes, fixes, and new features on the AgenticBoxes platform — newest first.
Every webhook POST now carries an X-Boxes-Signature header
— t=<unix>,v1=<hmac>, an HMAC-SHA256 over the
timestamp and the exact body, keyed by a per-account secret. Your
receiver can confirm a delivery genuinely came from us and reject
replays. Fetch your signing secret and the scheme from the new
GET /account/webhook, and rotate it any time with
POST /account/webhook/secret/rotate. Callback webhook URLs
must now be https://. Existing receivers that ignore the
header keep working unchanged — verifying is opt-in.
Two things. Custom signatures —
PUT /boxes/{id}/signature sets a per-box signature,
appended to every message sent from that box. And you can now
remove the "Sent by agenticboxes.email by an agent" trailer:
POST /account/trailer opts out — you then pay a small
per-send surcharge until it's paid off, or
POST /account/trailer/buyout prepays the rest in one go.
Your custom signature stays either way; opting out only drops our line.
GET /account/credit/balance reports your trailer status.
When AgenticBoxes ships new or changed endpoints, a
platform.updated event now goes out to every account — in
the /events feed and pushed to your callback webhook. It
carries the new OpenAPI version and the skill / spec URLs, so your agent
re-pulls its skill and openapi.yaml instead of running on a
stale copy. Just watch for it in your event stream.
You decide when to be warned. PUT /account/credit/alert-thresholds
sets two thresholds — an early first alert and an urgent
second alert — to whatever balances suit your burn rate. The
low_balance event fires when a charge crosses your balance
below either, tagged alert: first or alert: second.
GET /account/credit/balance now also reports a
balance_state of ok / low /
critical.
Credit is now self-service. GET /account/credit/balance
returns your prepaid balance, a low-balance flag, and an estimate of how
many more emails it covers; GET /account/credit/usage
returns a metered-usage breakdown by event type (windowable with
since/before). And a new low_balance
event fires — to your event feed and your callback webhook — the moment a
charge drops your balance below its threshold, so an agent can top up
before sends start failing.
Every event the platform emits for your account — mail.received,
support.answered, domain.ready, reputation
changes and more — is now appended to one ordered per-account stream.
Drain it by polling GET /events?since=<cursor>. An
agent that can't host a callback webhook no longer misses anything:
webhooks become an optional push layer over the very same stream.
A new domain mode, byo_delegated: you own the domain, but
rather than editing DNS records yourself you delegate its nameservers
to a Route 53 zone we create and run. Sign up with
domain_intent.mode = "byo_delegated"; we hand you the
nameservers (a domain.delegation_required event), you point
your registrar at them once, and DKIM/SPF/DMARC stay managed for you —
$1/month name service, same as a registered domain. The existing
byo_manual mode, where you keep hosting your own DNS, is
unchanged.
Attach an opaque context object to a send
(POST /messages/send) — anything you need to route the
conversation later, such as a chat thread id. When a reply to that
message arrives, the platform echoes the original context
onto the inbound message, correlated by the In-Reply-To
header. Route a reply back to its origin with no mapping table of your
own.
A support question is no longer one-shot. Post follow-ups with
POST /support/questions/{id}/replies, and
GET /support/questions/{id} returns the full back-and-forth.
The support.answered event still fires when we reply.
For a bring-your-own domain where you host your own DNS, the
MX/SPF/DKIM/DMARC records to add at your registrar arrive as a
domain.dns_required event — fetch them any time with
GET /events?type=domain.dns_required.
GET /domain/dns serves only managed zones, and its 409
response now points you to the event feed instead of leaving you stuck.
The agent API now answers on api.agenticboxes.email — one
branded domain for everything an agent touches. Point a runtime at it
and it self-bootstraps: GET /.well-known/agentic.json
returns a discovery manifest (drop-in skills, the OpenAPI spec, free
signup, pricing), and unauthenticated calls return a
getting_started pointer to it. The skills, docs, and
manifest all use the new base URL. An OpenClaw skill is live too —
openclaw skills install agenticboxes-email.
The agenticboxes-email agent skill (v1.2.0) now lists every
endpoint — including support questions
(POST /support/questions) and feature requests
(POST /feature-requests) — with guidance on when an agent
should reach for them. Earlier versions of the skill didn't cover those
endpoints, so an agent couldn't discover them from the skill alone. The
skill is also explicit now that support and feature requests go through
the API only — never email.
Received messages fetched via GET /messages?include=body and
GET /messages/{id} now return the full decrypted body,
parsed headers, and an accurate size_bytes. Previously an
inbound message could come back with an empty body and unreadable
headers.