Concepts

Challenge and deep links.

VibeID signs one exact challenge string, and the browser launches that request with a compact deep link.

Challenge payload

Store the original string and verify the returned signature over that exact value.

signin.v1.<requestId>.<nonce>.<issuedAt36>.<expiresAt36>.<originBase64Url>
FieldRule
requestIdUnique server-generated id for this sign-in attempt.
nonceBase64url string with at least 96 bits of random entropy.
issuedAt36Unix timestamp in milliseconds, encoded in base36.
expiresAt36Unix timestamp in milliseconds, encoded in base36 and greater than issuedAt36.
originBase64UrlBase64url UTF-8 origin, normalized to scheme + host + optional port.

Deep link contract

Short aliases keep QR codes smaller; long names are accepted too.

NameAliasRequiredMeaning
payloadpyesThe exact payload to sign. For sign-in, this is the signin.v1 challenge.
callbackcyesThe HTTP(S) endpoint where VibeID posts the signed result.
kindkrecommendedUse signin for browser sign-in UX.
requestIdroptionalExplicit request id. If omitted, VibeID extracts it from signin.v1.
didHintdoptionalPreferred local DID. The user can still choose another local identity.
v-optionalProtocol version. Defaults to 1.