FLASHY ID DELEGATED AUTHORITY PROFILEv0.3DRAFT2026-08-19editor: Flashy Group

Delegated authority across organizational boundaries

The wire format is standards-based and interoperable. The organizational semantics above it are ours. A proprietary format would make cross-organization verification impossible, which is the entire product — so there is no proprietary format.

1 · Wire format #

A compact JWS. The delegation chain travels in del, ordered root-first. Every link carries its own expiry; the effective expiry is the minimum across the chain.

assertion payload · decoded
{
  "iss": "flashyid.com",
  "sub": "agent:flashy-academy/ceo-agent",
  "act": { "kind": "agent", "org": "flashy-academy" },
  "del": [
    { "p": "human:michael-gord",   "iat": 1755561600 },
    { "p": "org:flashy-academy",   "iat": 1755561601 },
    { "p": "agent:ceo-agent",      "iat": 1755561602 }
  ],
  "scp": ["proposal.draft", "payment.execute"],
  "lim": { "spend_max": 5000, "currency": "USD", "approval_above": 1000 },
  "cnf": { "contract_authority": false },
  "exp": 1755993600,
  "jti": "01J9F2K7Q8"
}

2 · Scope registry #

Scopes are additive and never redefined. A scope’s meaning is fixed at registration; a narrowing change requires a new scope, not an edit. Registration is by pull request against this document, reviewed by the editor. Vendor-prefixed scopes (x-) are never verified across a boundary.

proposal.draftCompose a proposal. Commits the organization to nothing.Registered
payment.executeMove funds within the grant’s spend limit. Requires lim.spend_max.Registered
contract.signBind the organization. Requires cnf.contract_authority and a human co-signature.Reserved
identity.delegateMint a child grant. Attenuation is checked at issue time, not at use.Registered
data.readRead a named resource. Resource pattern travels in the grant, not the scope.Registered
x-*Vendor namespace. Never verified across an organizational boundary.Non-portable

The governed registry, with requirements and key history, lives at /registry/scopes.

3 · Standards position #

Conforms to

RFC 7515 (JWS), RFC 7517 (JWK), RFC 7519 (JWT) and RFC 8725 best practices. RS256 required; alg is never read from the header without a key match.

Tracks

OAuth 2.0 Token Exchange (RFC 8693) delegation semantics, and the emerging work on agent authorization in the IETF OAuth working group. Where that work lands on a chain representation, this profile will follow it and deprecate del.

Deliberately extends

Nothing in the existing specifications carries an ordered chain of principals with per-link attenuation and a revocation pointer. del, lim and cnf.contract_authority are ours. They are additive claims a conforming JWT verifier ignores safely.

4 · Refusal reasons #

Every refusal is named on the wire. A verifier that returns a boolean has thrown away the only information the caller needed — which of these it was, and therefore whether to retry, escalate to a human, or stop.

reasonMeaningRetry
bad_signatureThe signature does not verify against the named key.never
unknown_kidThe header names a key that is not in the current JWKS. Fail closed — never fall back to another key.refetch
expiredThe effective expiry, the minimum across the chain, is in the past.never
revokedA link in the chain was withdrawn. The reason carries which link, so the caller can tell a rotated agent from a withdrawn human.never
chain_widenedA grant claims more than its parent. The whole chain fails, not the offending link.never
out_of_mandateThe chain is valid and the requested action exceeds it — a limit, a missing scope, or a false constraint.escalate
malformedThe assertion is not a well-formed JWS, or del is not ordered root-first.never

5 · Changelog #

Every version, dated, with what changed on the wire. A verifier written against any listed version still returns the same answer for an assertion of that version.

v0.32026-08-19Draft · current

Added cnf.contract_authority as a named constraint, made del ordering normative (root-first, previously unspecified), and split the refusal reasons into the seven codes above. Assertions signed under v0.2 continue to verify unchanged.

v0.22026-07-14Superseded

Added lim for spend and approval thresholds. Verifiers were required to check it; issuers were not yet required to enforce it, and that asymmetry is still open.

v0.12026-06-02Superseded

First public draft. iss, sub, act, del, scp, exp, jti over RS256. No limits, no constraints, no refusal vocabulary.

6 · Not yet in the profile #

Roadmap APIs live here with a version marker, never in the docs.

v0.4 · Q4 2026Agent as an addressable entity. Today agentName is a string; the profile assumes a resolvable principal that does not yet exist in source.
v0.4 · Q4 2026lim semantics enforced server-side. Currently advisory — a verifier checks them, the issuer does not enforce them.
v0.5 · Q1 2027Policy claim. Server-side evaluation of organizational rules; today an agent supplies its own impact and LOW auto-approves.
v0.5 · Q1 2027Revocation propagation to cached assertions. Push, status list, or short expiry — the choice is open and the argument is on the mailing list.