How a platform can host the human-decision step of an oakallow approval inside its own product, so a shared customer approves agent actions in the tool they already use. The program is intentionally registered and scoped by authority so that an approval decided outside the oakallow dashboard still carries the same cryptographic execution-token minting, the same immutable audit trail, and the same governance controls as one decided natively.
A verified partner is a real legal entity that registers one or more named authorities. A customer opts an authority into their own organization, and from then on every approval in that org is mirrored to the partner over a signed, mutually-authenticated channel. The partner can present the decision in its own UI and write the answer back. oakallow still records the decision, still notifies the customer natively, and still holds the immutable log.
The program is for platforms that decide on behalf of other people's organizations. If you run a product your customers already log into, this is how their oakallow approvals surface there. The model has exactly three actors, and nothing crosses between them except the documented calls and webhooks. A partner hosts the decision surface; it never holds tokens, permissions, or the audit row.
Deciding inside your own org?You don't need this program. If you want to approve from your own Slack, your own dashboard, or any UI you build, your backend simply calls the standard decide endpoint with your API key. The Verified Partner Program exists for the harder case: deciding on behalf of organizations that are not yours, where the deciding party has to prove who it is first.
Runs the permission cascade, creates the approval, records the decision with replay protection and attribution, mints the run token, and holds the immutable audit log. The mechanisms that make a decision trustworthy live here.
Receives the approval, renders it in its own UI, routes it to the right reviewer, captures the decision, and posts it back. It is a decision surface and nothing more: no tokens, no permissions, no audit row.
Checks permission on every tool call, receives the decision, mints the run token, executes, and logs. Its code path is identical whether the human decided in oakallow's app or the partner's.
When a partner is active for an org, the partner hosts the human-decision step for that org while oakallow still notifies the customer natively and records everything. The partner is where the human decides; oakallow is where the decision counts.
A partner is verified once as a legal entity. Under that entity it registers as many customer-facing authorities as it needs. The legal entity is the trust anchor; the authority is what a customer actually opts into.
One verified record per company, anchored to a corporate domain the company proves it controls. This is the Primary Governing Authority: the entity that owns the corporate domain and accepts the program agreement. It does not appear in any customer-facing listing on its own.
Named integrations registered under the legal entity. Each has its own display name, callback domain, and dedicated technical and security contacts, and each goes through its own domain and contact verification. A customer opts into an authority, so a single company can run several distinct integrations with separate trust boundaries.
Verification proves control, not just identity. At the parent-partner level the applicant attests they are authorized to register the company, then proves control of the corporate domain it claims. Each authority under it then proves control of its own separate domain. Domain control is something we can actually prove, so it is the basis of the program, with the partner attestation putting accountability for the claim on the record.
There is no public partner directory. A customer only ever sees an authority they have been pointed to, and authority assignments stay private to the customer's organization.
Verification only makes an authority eligible. Nothing flows until a customer enables it on an organization, and enabling is what mints the integration secret. No enabled integration means no secret, which means no approvals are ever delivered to the authority. The secret is the precondition for the whole program, not a detail of it.
An owner or admin enables an authority on one of their organizations from the Verified-Partner Integrations section and supplies the authority's callback URL. Enabling generates a per-integration secret, shown exactly once and stored only as a hash. That secret is the key the authority uses to verify that every callback genuinely came from oakallow. Each organization-and-authority pair is its own integration with its own secret, so a leak is contained to one relationship.
The customer is always in control. An integration can be active, paused, or revoked from the same page; pausing stops delivery, and revoking is permanent, so re-enabling later mints a brand-new secret. The authority never writes to this record. It is the customer's switch, not the authority's.
oakallow still notifies the customer natively and keeps the record. When a partner is active for the org, the partner hosts the human-decision step and is sent the same approval over a signed, mutually-authenticated channel.
This is where verification and runtime meet. Every external decision is gated on a server-stored value, the request hash, that only a verified partner who actually received the callback can produce. Verification builds the chain; the runtime checks enforce it.
In practice that chain has two halves: the callback going out is signed and mutually authenticated, and the decision coming back must clear a fixed list of deterministic checks before oakallow records anything.
The outbound callback presents an oakallow client certificate over mutually-authenticated TLS. A partner that pins our published certificate authority can reject any forged source at the TLS layer, before a byte of the body is read. Callback URLs are HTTPS-only and screened against internal addresses to prevent server-side request forgery.
The exact callback body is signed with an HMAC keyed on the integration secret. The partner re-derives the same key from the secret it saved at enable-time and verifies the signature, so a tampered or spoofed body is rejected even if it reaches the endpoint. The secret itself is only ever stored as a hash.
Every decision the partner posts back runs the same check list, in order. Any failure returns a deliberately vague error to the caller while the real reason is logged privately. The decision is recorded only if all of them pass.
Only after every check passes does oakallow record the decision, labeled with the platform and source it came from, and fire the confirmation back. The partner record can be suspended or revoked centrally at any time, and the customer keeps the native record no matter what the partner does.
You can verify your integration end to end without spending anything and without standing up a sandbox. Two surfaces cover the parts partners most often get wrong: confirming a request is well formed, and getting the callback cryptography exactly right.
POST to /v1/permissions/check/dry-runwith your API key. It resolves your org's real policy and returns the same verdict shape as the live check (allowed, requires_approval, or disabled), tagged dry_run: true. It creates no approval, writes nothing, and is not billed, so you can confirm your request shape and see how your rules resolve as often as you like. It requires a valid key, so it is scoped to your own org, never open to anonymous traffic. Creating real approvals end to end is metered like any production call.
We publish fixed sample inputs with the correct request_hash and the correct callback HMAC signature, computed with the exact algorithms oakallow uses. Run your own code against them on your own machine, with no calls to us and no account, and confirm you produce the same values. This pins down the two easy mistakes before they ever hit a live callback.
The two non-obvious details the vectors lock in:
The full program details, including the application flow and the agreement, live in the FAQ. Verification starts from an account on your corporate domain.