Intents & Provisioning Services
This document covers:
Intent submission and status endpoints (
/intents)WebAuthn authorization ceremony for intents
Institutional provisioning endpoints (
/institution-config)
Intents: Access and Auth
Base path:
endpoint.intents(default/intents)
Authorization:
When
intents.auth.enabled=true(default), endpoints requireAuthorization: Bearer <marketplace_jwt>.JWT checks:
issuer =
intents.auth.issuer(defaultmarketplace)audience =
intents.auth.audience(defaultblockchain-services)scope:
submit endpoints require
intents.auth.submit-scope(defaultintents:submit)status endpoints require
intents.auth.status-scope(defaultintents:status)
Intents: Endpoints
POST /intentsSubmits an intent directly.
Returns
IntentAckResponse(acceptedorrejected).
GET /intents/{requestId}Returns current intent execution state (
queued,in_progress,executed,failed,rejected).
POST /intents/authorizeStarts WebAuthn ceremony for an intent and returns:
sessionIdceremonyUrlrequestIdexpiresAt
GET /intents/authorize/status/{sessionId}Returns ceremony status (
PENDING,SUCCESS,FAILED).
GET /intents/authorize/ceremony/{sessionId}Serves the HTML ceremony page used by browser/passkey flow.
POST /intents/authorize/completeCompletes ceremony with signed WebAuthn assertion and executes the intent pipeline.
Uses
sessionIdas authorization context (no bearer token check in this endpoint by design).
Intent Submission Model
Main object: IntentSubmission.
Required top-level fields:
metasignature(EIP-712)samlAssertion(base64)webauthnCredentialIdwebauthnClientDataJSONwebauthnAuthenticatorDatawebauthnSignature
Payload variants:
actionPayloadfor non-reservation actionsreservationPayloadfor reservation actions
Action discriminator:
meta.actionmapped toIntentActionenum.
Validation Pipeline (IntentService)
Validate
metaand payload shape by action type.Validate SAML assertion and assertion hash consistency.
Enforce SAML replay protection.
Validate WebAuthn assertion (all actions except
REQUEST_FUNDS).Reject expired intents (
meta.expiresAt) and nonce replay.Verify EIP-712 signature (
Eip712IntentVerifier) and optional trusted signer policy (intent.trusted-signer).Persist and queue accepted intents.
ACK response:
accepted: intent queued for executionrejected: validation/signature/replay/expiry failure
Provisioning Endpoints (/institution-config)
/institution-config)These endpoints are localhost-restricted by LocalhostOnlyFilter.
GET /institution-config/statusPOST /institution-config/save-and-registerPOST /institution-config/retry-registrationPOST /institution-config/apply-provider-tokenPOST /institution-config/apply-consumer-token
Current recommended flow:
Apply provisioning token from Marketplace:
provider mode:
/apply-provider-tokenconsumer mode:
/apply-consumer-token
Service validates token against Marketplace JWKS.
Service persists config and attempts Marketplace registration.
Token request body:
Provisioning Token Validation
ProvisioningTokenService validates:
JWT signature using Marketplace JWKS endpoints
issuer and audience
replay protection via
jtirequired claims and URL/email sanity checks
Marketplace registration is executed by InstitutionRegistrationService using:
/api/institutions/registerProvider/api/institutions/registerConsumer
Key Configuration
Intents:
intents.auth.enabledintents.auth.issuerintents.auth.audienceintents.auth.submit-scopeintents.auth.status-scopeintent.domain.*intent.trusted-signer
Provisioning:
marketplace.base-urlpublic.base-urlprovider.*features.providers.registration.enabled
Last updated