@reclaimprotocol/client 0.1.29 → 0.1.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/README.md +255 -234
  2. package/lib/api.d.ts +2 -0
  3. package/lib/api.js +2 -0
  4. package/lib/client.js +2 -0
  5. package/lib/enckeys.d.ts +1 -1
  6. package/lib/enckeys.js +2 -2
  7. package/lib/encoding.d.ts +4 -0
  8. package/lib/encoding.js +10 -0
  9. package/lib/feature-flags.d.ts +9 -0
  10. package/lib/feature-flags.js +19 -0
  11. package/lib/index.d.ts +4 -4
  12. package/lib/index.js +4 -4
  13. package/lib/jwks.d.ts +8 -8
  14. package/lib/jwks.js +38 -17
  15. package/lib/launch/destination.d.ts +14 -0
  16. package/lib/launch/destination.js +89 -0
  17. package/lib/launch/device.d.ts +30 -0
  18. package/lib/launch/device.js +168 -0
  19. package/lib/launch/environment.d.ts +224 -0
  20. package/lib/launch/environment.js +98 -0
  21. package/lib/launch/errors.d.ts +20 -0
  22. package/lib/launch/errors.js +25 -0
  23. package/lib/launch/extension.d.ts +42 -0
  24. package/lib/launch/extension.js +72 -0
  25. package/lib/launch/flow.d.ts +82 -0
  26. package/lib/launch/flow.js +222 -0
  27. package/lib/launch/index.d.ts +16 -0
  28. package/lib/launch/index.js +12 -0
  29. package/lib/launch/mobile.d.ts +77 -0
  30. package/lib/launch/mobile.js +124 -0
  31. package/lib/launch/modal.d.ts +50 -0
  32. package/lib/launch/modal.js +258 -0
  33. package/lib/launch/options.d.ts +74 -0
  34. package/lib/launch/options.js +20 -0
  35. package/lib/launch/portal.d.ts +28 -0
  36. package/lib/launch/portal.js +68 -0
  37. package/lib/launch/qr.d.ts +5 -0
  38. package/lib/launch/qr.js +28 -0
  39. package/lib/launch/target.d.ts +46 -0
  40. package/lib/launch/target.js +128 -0
  41. package/lib/launch/vendor/qrcodegen.d.ts +134 -0
  42. package/lib/launch/vendor/qrcodegen.js +822 -0
  43. package/lib/legacy-proof.d.ts +2 -0
  44. package/lib/legacy-proof.js +37 -7
  45. package/lib/proof-hash.d.ts +5 -5
  46. package/lib/proof-hash.js +1 -1
  47. package/lib/proof-recipe.d.ts +3 -3
  48. package/lib/proof-recipe.js +1 -1
  49. package/lib/proof-types.d.ts +35 -8
  50. package/lib/reclaim.d.ts +81 -70
  51. package/lib/reclaim.js +79 -130
  52. package/lib/request-proof.d.ts +60 -0
  53. package/lib/request-proof.js +241 -0
  54. package/lib/result.d.ts +46 -38
  55. package/lib/result.js +160 -100
  56. package/lib/routes.gen.d.ts +76 -28
  57. package/lib/routes.gen.js +24 -11
  58. package/lib/tee-binding.d.ts +1 -1
  59. package/lib/types/openapi.d.ts +1 -0
  60. package/lib/types/openapi.gen.d.ts +1598 -485
  61. package/lib/types/openapi.gen.js +5 -0
  62. package/lib/verification-clients.d.ts +28 -14
  63. package/lib/verification-clients.js +31 -11
  64. package/lib/verify-attestor-tee.d.ts +19 -2
  65. package/lib/verify-attestor-tee.js +40 -4
  66. package/lib/verify-tee.d.ts +10 -1
  67. package/lib/verify-tee.js +34 -10
  68. package/package.json +5 -1
  69. package/src/api.ts +9 -0
  70. package/src/client.ts +2 -0
  71. package/src/enckeys.ts +2 -2
  72. package/src/encoding.ts +12 -0
  73. package/src/feature-flags.ts +39 -0
  74. package/src/index.ts +13 -14
  75. package/src/jwks.ts +52 -30
  76. package/src/launch/destination.ts +111 -0
  77. package/src/launch/device.ts +242 -0
  78. package/src/launch/environment.ts +337 -0
  79. package/src/launch/errors.ts +49 -0
  80. package/src/launch/extension.ts +124 -0
  81. package/src/launch/flow.ts +369 -0
  82. package/src/launch/index.ts +42 -0
  83. package/src/launch/mobile.ts +184 -0
  84. package/src/launch/modal.ts +378 -0
  85. package/src/launch/options.ts +99 -0
  86. package/src/launch/portal.ts +104 -0
  87. package/src/launch/qr.ts +37 -0
  88. package/src/launch/target.ts +150 -0
  89. package/src/launch/vendor/qrcodegen.ts +1034 -0
  90. package/src/proof-hash.ts +6 -6
  91. package/src/proof-recipe.ts +3 -3
  92. package/src/proof-types.ts +36 -8
  93. package/src/reclaim.ts +185 -218
  94. package/src/{legacy-proof.ts → request-proof.ts} +81 -36
  95. package/src/result.ts +238 -172
  96. package/src/routes.gen.ts +24 -11
  97. package/src/tee-binding.ts +1 -1
  98. package/src/types/openapi.gen.ts +1603 -485
  99. package/src/types/openapi.ts +3 -1
  100. package/src/verification-clients.ts +33 -19
  101. package/src/verify-attestor-tee.ts +66 -8
  102. package/src/verify-tee.ts +44 -13
  103. package/lib/api-client.d.ts +0 -31
  104. package/lib/api-client.js +0 -112
  105. package/lib/api-consts.d.ts +0 -4
  106. package/lib/api-consts.js +0 -4
  107. package/lib/api-errors.d.ts +0 -13
  108. package/lib/api-errors.js +0 -30
  109. package/lib/eip712.d.ts +0 -20
  110. package/lib/eip712.js +0 -108
@@ -261,27 +261,27 @@ export interface paths {
261
261
  patch?: never;
262
262
  trace?: never;
263
263
  };
264
- "/site/{domain}/ai-provider": {
264
+ "/discover/teach": {
265
265
  parameters: {
266
266
  query?: never;
267
267
  header?: never;
268
268
  path?: never;
269
269
  cookie?: never;
270
270
  };
271
- get?: never;
272
- put?: never;
273
271
  /**
274
- * Author an AI (llm) provider and go to its build screen
275
- * @description Creates an `llm`-verification provider under an organization the signed-in member owns (their personal org by default), seeded with an extraction prompt for the selected/missing data points (and carrying the working response matches from the resolved structured providers). If `fromProviderId` is an editable draft the viewer owns, it versions THAT instead. Returns the build page's AI dialog body (the editable prompt + "Try with AI"). HTML / HTMX fragment.
272
+ * “Teach our agent” instructions for a missing website / data point
273
+ * @description Returns the "Teach our agent" panel shown when a website or data point a user wants does not exist yet: steps to install the Reclaim MCP server plus a ready-to-copy prompt, templated with the requested `domain` and (optionally) `dataPoint`, that instructs an agent to author the missing provider. HTML / HTMX only (a dialog fragment).
276
274
  */
277
- post: operations["SiteAiProvider"];
275
+ get: operations["DiscoverTeachAgent"];
276
+ put?: never;
277
+ post?: never;
278
278
  delete?: never;
279
279
  options?: never;
280
280
  head?: never;
281
281
  patch?: never;
282
282
  trace?: never;
283
283
  };
284
- "/site/{domain}/try-ai": {
284
+ "/discover/agent-wizard": {
285
285
  parameters: {
286
286
  query?: never;
287
287
  header?: never;
@@ -291,30 +291,10 @@ export interface paths {
291
291
  get?: never;
292
292
  put?: never;
293
293
  /**
294
- * Mint a SANDBOX test session for an AI (llm) provider
295
- * @description Mints a sandbox verification session for the given AI provider's draft and opens it in the verification client. An edited `prompt` in the body is saved as a new draft build first (the "edit prompt / try again" loop). Requires a signed-in member.
296
- */
297
- post: operations["SiteTryAi"];
298
- delete?: never;
299
- options?: never;
300
- head?: never;
301
- patch?: never;
302
- trace?: never;
303
- };
304
- "/discover/teach": {
305
- parameters: {
306
- query?: never;
307
- header?: never;
308
- path?: never;
309
- cookie?: never;
310
- };
311
- /**
312
- * “Teach our agent” instructions for a missing website / data point
313
- * @description Returns the "Teach our agent" panel shown when a website or data point a user wants does not exist yet: steps to install the Reclaim MCP server plus a ready-to-copy prompt, templated with the requested `domain` and (optionally) `dataPoint`, that instructs an agent to author the missing provider. HTML / HTMX only (a dialog fragment).
294
+ * Setup and prompt for the coding agent picked in the wizard
295
+ * @description Returns the last step of the "Build with an AI coding agent" wizard for the picked `agent`: how to attach the Reclaim MCP server, and the `basePrompt` with the optional `building` description appended. HTML / HTMX only (a fragment swapped into the open wizard).
314
296
  */
315
- get: operations["DiscoverTeachAgent"];
316
- put?: never;
317
- post?: never;
297
+ post: operations["DiscoverAgentWizard"];
318
298
  delete?: never;
319
299
  options?: never;
320
300
  head?: never;
@@ -352,7 +332,7 @@ export interface paths {
352
332
  };
353
333
  /**
354
334
  * List the verifiable data points on a website
355
- * @description The data points existing providers can prove on a website — the menu to pick from before `GET /discover/resolve`. Optionally filter by `q`.
335
+ * @description The data points existing providers can prove on a website — the menu to pick from before discover_resolve. Optionally filter by `q`.
356
336
  */
357
337
  get: operations["DiscoverDataPoints"];
358
338
  put?: never;
@@ -509,7 +489,7 @@ export interface paths {
509
489
  };
510
490
  /**
511
491
  * Pending review queue (admin-only)
512
- * @description Admin only. Lists all provider versions currently awaiting review (branch = 'in_review'). Use DecideProviderVersionReview to approve or reject each version.
492
+ * @description Admin only. Lists all provider versions currently awaiting review (branch = 'in_review'). Use decide_provider_version_review to approve or reject each version.
513
493
  */
514
494
  get: operations["AdminReviews"];
515
495
  put?: never;
@@ -529,7 +509,7 @@ export interface paths {
529
509
  };
530
510
  /**
531
511
  * Explore verification sessions (admin-only)
532
- * @description Admin only. Search verification sessions across all organizations — filter by `sessionId` (prefix match, at least 5 characters), `providerId`, `claimantClientId`, `orgId` (all exact match), `status`, and a `createdAfter`/`createdBefore` time range. Rows link to the org-scoped session detail page (admins can open any org's pages). Capped at 100, newest first.
512
+ * @description Admin only. Search verification sessions across all organizations — filter by `sessionId` (prefix match, at least 5 characters), `providerId` (id or slug), `claimantClientId`, `orgId` (all exact match), `status`, and a `createdAfter`/`createdBefore` time range. Rows link to the org-scoped session detail page (admins can open any org's pages). Newest first, 50 per page, with opaque cursor pagination.
533
513
  */
534
514
  get: operations["AdminSessions"];
535
515
  put?: never;
@@ -540,6 +520,26 @@ export interface paths {
540
520
  patch?: never;
541
521
  trace?: never;
542
522
  };
523
+ "/admin/analytics": {
524
+ parameters: {
525
+ query?: never;
526
+ header?: never;
527
+ path?: never;
528
+ cookie?: never;
529
+ };
530
+ /**
531
+ * Usage, session, and revenue analytics (admin-only)
532
+ * @description Admin only. Aggregates across every organization over a date window: session outcomes by UTC day, device category, and claimant country; demand per provider, money in by month, and per-org consumption against the plan allowance (including closed periods, which the org-scoped usage endpoint never returns). Defaults to the last 30 days; narrow to one org with `orgId`.
533
+ */
534
+ get: operations["AdminAnalytics"];
535
+ put?: never;
536
+ post?: never;
537
+ delete?: never;
538
+ options?: never;
539
+ head?: never;
540
+ patch?: never;
541
+ trace?: never;
542
+ };
543
543
  "/admin/callback-dlq": {
544
544
  parameters: {
545
545
  query?: never;
@@ -865,7 +865,7 @@ export interface paths {
865
865
  patch?: never;
866
866
  trace?: never;
867
867
  };
868
- "/admin/verification-clients": {
868
+ "/admin/feature-flags": {
869
869
  parameters: {
870
870
  query?: never;
871
871
  header?: never;
@@ -873,23 +873,23 @@ export interface paths {
873
873
  cookie?: never;
874
874
  };
875
875
  /**
876
- * Registered verification clients (admin-only)
877
- * @description Admin only. The registry of first-party callers (app SDK, web portals, zkFetch) allowed to drive verification sessions, each with its own token and quota pool.
876
+ * Verification Client feature flags (admin-only)
877
+ * @description Lists the current Builder-mode Verification Client flags and their ordered targeting rules. Only Reclaim staff can read or change this control plane. Verification Clients receive only the immutable, resolved snapshot stored on their session.
878
878
  */
879
- get: operations["AdminVerificationClients"];
879
+ get: operations["AdminFeatureFlags"];
880
880
  put?: never;
881
881
  /**
882
- * Register a verification client (admin-only)
883
- * @description Admin only. Registers a Verification Client. The returned client UUID is the Builder-mode identity sent as `x-reclaim-vc-id` and is bound to sessions selected by this client's URL. Token fields in this response are retained only for legacy-client compatibility and are not used by Builder mode.
882
+ * Create a Verification Client feature flag (admin-only)
883
+ * @description Creates one typed flag and its complete ordered rule set. The change becomes available to newly created sessions immediately and creates an immutable audit revision. Existing session snapshots don't change.
884
884
  */
885
- post: operations["CreateVerificationClient"];
885
+ post: operations["CreateFeatureFlag"];
886
886
  delete?: never;
887
887
  options?: never;
888
888
  head?: never;
889
889
  patch?: never;
890
890
  trace?: never;
891
891
  };
892
- "/admin/verification-clients/{clientId}/tokens": {
892
+ "/admin/feature-flags/{flagKey}": {
893
893
  parameters: {
894
894
  query?: never;
895
895
  header?: never;
@@ -897,33 +897,57 @@ export interface paths {
897
897
  cookie?: never;
898
898
  };
899
899
  get?: never;
900
- put?: never;
901
900
  /**
902
- * Issue a legacy verification-client token (admin)
903
- * @description Legacy compatibility endpoint. Builder-mode clients use the registered UUID in `x-reclaim-vc-id` and do not need this token. Existing legacy clients may continue to rotate their credentials without affecting Builder-mode sessions.
901
+ * Replace a Verification Client feature flag (admin-only)
902
+ * @description Atomically replaces the definition and complete ordered rule set, increments the flag version, and records an immutable audit revision. Archive a flag to omit it from future session snapshots. Existing snapshots remain unchanged.
904
903
  */
905
- post: operations["IssueVerificationClientToken"];
904
+ put: operations["UpdateFeatureFlag"];
905
+ post?: never;
906
906
  delete?: never;
907
907
  options?: never;
908
908
  head?: never;
909
909
  patch?: never;
910
910
  trace?: never;
911
911
  };
912
- "/admin/verification-clients/{clientId}/tokens/{tokenId}": {
912
+ "/admin/feature-flags/{flagKey}/revisions": {
913
913
  parameters: {
914
914
  query?: never;
915
915
  header?: never;
916
916
  path?: never;
917
917
  cookie?: never;
918
918
  };
919
- get?: never;
919
+ /**
920
+ * Feature flag revision history (admin-only)
921
+ * @description Returns immutable snapshots newest first. The history is retained even after a flag is archived and is never served to Verification Clients.
922
+ */
923
+ get: operations["ListFeatureFlagRevisions"];
920
924
  put?: never;
921
925
  post?: never;
926
+ delete?: never;
927
+ options?: never;
928
+ head?: never;
929
+ patch?: never;
930
+ trace?: never;
931
+ };
932
+ "/admin/verification-clients": {
933
+ parameters: {
934
+ query?: never;
935
+ header?: never;
936
+ path?: never;
937
+ cookie?: never;
938
+ };
939
+ /**
940
+ * Registered verification clients (admin-only)
941
+ * @description Admin only. The registry of claimant-facing Verification Clients allowed to drive verification sessions. Builder identifies a client by its registered launch URL and assigns its quota pool.
942
+ */
943
+ get: operations["AdminVerificationClients"];
944
+ put?: never;
922
945
  /**
923
- * Revoke one legacy verification-client token (admin-only)
924
- * @description Legacy compatibility endpoint. Revokes one legacy token; this does not change the registered client's Builder-mode UUID or any session bound to that UUID.
946
+ * Register a verification client (admin-only)
947
+ * @description Admin only. Registers a Verification Client. The returned client UUID is the Builder-mode identity sent as `x-reclaim-vc-id` and is bound to sessions selected by this client's URL. Builder signs every result; Verification Clients don't have credentials or signing keys.
925
948
  */
926
- delete: operations["RevokeVerificationClientToken"];
949
+ post: operations["CreateVerificationClient"];
950
+ delete?: never;
927
951
  options?: never;
928
952
  head?: never;
929
953
  patch?: never;
@@ -939,7 +963,7 @@ export interface paths {
939
963
  get?: never;
940
964
  /**
941
965
  * Update a verification client (admin-only)
942
- * @description Admin only. Updates the client's quota pool, claimant-facing base URL, exact trusted JWS `issuer`, or registered `jwksUri`. The issuer and JWKS URL are separate from the claimant URL. Consumers must use the registered issuer and JWKS URL, never values supplied in a result. Omitted fields keep their current values.
966
+ * @description Admin only. Updates the client's quota pool or claimant-facing base URL. Omitted fields keep their current values.
943
967
  */
944
968
  put: operations["UpdateVerificationClient"];
945
969
  post?: never;
@@ -949,27 +973,27 @@ export interface paths {
949
973
  patch?: never;
950
974
  trace?: never;
951
975
  };
952
- "/admin/verification-clients/{clientId}/keys": {
976
+ "/admin/site-banners": {
953
977
  parameters: {
954
978
  query?: never;
955
979
  header?: never;
956
980
  path?: never;
957
981
  cookie?: never;
958
982
  };
959
- get?: never;
960
- put?: never;
961
983
  /**
962
- * Register a signing key for a verification client (admin-only)
963
- * @description Admin only. Registers the PUBLIC half of the client's ES256K signing keypair — the private key never leaves the client. The key's ETH address becomes the JWS `kid` and is published in the builder's `/.well-known/jwks.json`, so consumers can verify the client's result signatures. A client may hold several active keys (zero-downtime rotation).
984
+ * Site-wide top banners editor (admin-only)
985
+ * @description Admin only. The announcement bar and scrolling ticker shown above/below the dashboard header on every non-claimant-facing page — never on a verification or share page. Returns the raw admin-authored HTML source (not the rendered subset): this is the editor's own read, and must round-trip the exact stored source, or every save would re-encode and progressively corrupt the content. There is no public equivalent of this endpoint — Builder renders these banners server-side when composing the dashboard layout.
964
986
  */
965
- post: operations["AddVerificationClientKey"];
987
+ get: operations["AdminSiteBanners"];
988
+ put?: never;
989
+ post?: never;
966
990
  delete?: never;
967
991
  options?: never;
968
992
  head?: never;
969
993
  patch?: never;
970
994
  trace?: never;
971
995
  };
972
- "/admin/verification-clients/{clientId}/keys/{keyId}": {
996
+ "/admin/announcement-bar": {
973
997
  parameters: {
974
998
  query?: never;
975
999
  header?: never;
@@ -977,13 +1001,33 @@ export interface paths {
977
1001
  cookie?: never;
978
1002
  };
979
1003
  get?: never;
980
- put?: never;
1004
+ /**
1005
+ * Save the announcement bar (admin-only)
1006
+ * @description Full replacement of the singleton announcement bar row. Disabled by default; saving does not itself enable it — `enabled` is just another field in the replacement. `linkUrl`, when set, must be an `https:` URL: the whole bar becomes a clickable link.
1007
+ */
1008
+ put: operations["UpdateAnnouncementBar"];
981
1009
  post?: never;
1010
+ delete?: never;
1011
+ options?: never;
1012
+ head?: never;
1013
+ patch?: never;
1014
+ trace?: never;
1015
+ };
1016
+ "/admin/scrolling-banner": {
1017
+ parameters: {
1018
+ query?: never;
1019
+ header?: never;
1020
+ path?: never;
1021
+ cookie?: never;
1022
+ };
1023
+ get?: never;
982
1024
  /**
983
- * Revoke one verification-client signing key (admin-only)
984
- * @description Admin only. Revokes a single signing key by id; its kid drops out of the aggregated JWKS immediately while the client's other keys keep working.
1025
+ * Save the scrolling ticker (admin-only)
1026
+ * @description Full replacement of the singleton scrolling-ticker row. An enabled ticker with zero `items` renders nothing on the dashboard — it does not show an empty coloured strip.
985
1027
  */
986
- delete: operations["RevokeVerificationClientKey"];
1028
+ put: operations["UpdateScrollingBanner"];
1029
+ post?: never;
1030
+ delete?: never;
987
1031
  options?: never;
988
1032
  head?: never;
989
1033
  patch?: never;
@@ -1000,7 +1044,7 @@ export interface paths {
1000
1044
  put?: never;
1001
1045
  /**
1002
1046
  * Transfer a provider to a different workspace
1003
- * @description Admin-only. Moves the provider's `orgId` to the supplied workspace; preserves slug, versions, members. SQL function `builder.transfer_provider` enforces the admin gate and target existence atomically.
1047
+ * @description Admin-only. Moves a provider to a different organization, preserving its slug, versions, and members. Fails if the target organization does not exist.
1004
1048
  */
1005
1049
  post: operations["TransferProvider"];
1006
1050
  delete?: never;
@@ -1046,6 +1090,57 @@ export interface paths {
1046
1090
  patch?: never;
1047
1091
  trace?: never;
1048
1092
  };
1093
+ "/share/{client}": {
1094
+ parameters: {
1095
+ query?: never;
1096
+ header?: never;
1097
+ path?: never;
1098
+ cookie?: never;
1099
+ };
1100
+ /**
1101
+ * Uniform claimant-facing share route for a Verification Client
1102
+ * @description One `{origin}/share/{client}` shape for all six built-in Verification Clients' registered `uri` (see `register_verification_client` / `builtin-clients.ts`'s `clientUrl()`) — an admin table with one consistent scheme instead of a mix of real pages and bare attribution labels. What each branch actually does differs, because the six clients are not alike:
1103
+ * - `builder` — `302`s to `/v/{sessionId}` (preserving `api`/`diag`).
1104
+ * Builder's own remote-browser page is unchanged; this is one extra
1105
+ * redirect hop in front of it, accepted for registry uniformity.
1106
+ * - `verifier-app` — the QR / App Clip / deep-link / store-fallback
1107
+ * launcher page (what `GET /s` served before this route existed).
1108
+ * The session id lives in the QUERY, not the path:
1109
+ * `ReclaimVerificationLink.fromUri` (reclaim-inapp-sdk
1110
+ * `lib/src/data/verification_mode.dart`) requires a `sessionId` query
1111
+ * parameter and the app reads this URL off the clipboard after a
1112
+ * deferred install, so a path-form id would pass its first gate and
1113
+ * throw at the second. Renders instantly with no DB round trip — its
1114
+ * client script imports `@reclaimprotocol/client/launch` and runs the
1115
+ * same device-detection + App Clip / deep-link / QR launcher any
1116
+ * consumer's own page would.
1117
+ * - `portals` — `302`s to the portal (`?api=2&sessionId=…` appended),
1118
+ * the same computation a consumer's own page would run through the
1119
+ * launcher, done server-side instead.
1120
+ * - `reclaim-browser-extension` — a handoff page: probes for the
1121
+ * extension via `postMessage` and starts the verification in it.
1122
+ * Terminal state is generic ("submitted, close this tab") — this page
1123
+ * cannot poll for the real outcome, which still only arrives at the
1124
+ * consumer's callback.
1125
+ * - `inapp-sdk` — a static informational page. This URL is never
1126
+ * fetched by a real integration (the add-to-app module and in-app SDK
1127
+ * read `api`/`sessionId`/`diag` off the query string as an opaque
1128
+ * carrier, never the path/host), so this exists only so a stray GET
1129
+ * doesn't 404.
1130
+ * - `zkfetch` — a static informational page. zkFetch has no claimant
1131
+ * step; nothing ever redirects a browser here by design.
1132
+ *
1133
+ * Sets `Referrer-Policy: no-referrer`, so a `sessionId` never rides along in a `Referer` header to wherever a client eventually redirects.
1134
+ */
1135
+ get: operations["SharePage"];
1136
+ put?: never;
1137
+ post?: never;
1138
+ delete?: never;
1139
+ options?: never;
1140
+ head?: never;
1141
+ patch?: never;
1142
+ trace?: never;
1143
+ };
1049
1144
  "/v/{sessionId}": {
1050
1145
  parameters: {
1051
1146
  query?: never;
@@ -1199,7 +1294,7 @@ export interface paths {
1199
1294
  };
1200
1295
  /**
1201
1296
  * JWKS for verifying signed verification results
1202
- * @description JSON Web Key Set (RFC 7517) exposing the public keys that sign verification result JWS payloads (ES256K / secp256k1). Consumers fetch this to verify a delivered result. `kid` is the signer's ETH address. Result keys carry a namespaced purpose and Verification Client owner. The top-level `x-reclaim-attestors` extension lists trusted EIP-191 attestor signer addresses; an address is a public-key hash, not a JWK. Aggregates the in-process Verification Client signing key (`VC_SIGNING_PRIVATE_KEY`) with every registered verification client's active signing keys, so results signed by the builder or by any registered client verify against this one endpoint.
1297
+ * @description JSON Web Key Set (RFC 7517) exposing the public keys that sign verification result JWS payloads (ES256K / secp256k1). Consumers fetch this to verify a delivered result. `kid` is the signer's ETH address. Result keys carry a namespaced Builder-managed purpose. The top-level `x-reclaim-attestors` extension lists trusted EIP-191 attestor signer addresses; an address is a public-key hash, not a JWK. The top-level `x-reclaim-attestor-image-digests` extension lists the trusted Confidential Space attestor container images. The Reclaim extensions are application-specific JWK Set members allowed by RFC 7517 section 5; generic JWKS consumers ignore members they don't know. Publishes Builder's managed result-signing key (`BUILDER_SIGNING_PRIVATE_KEY`). Claimant-facing Verification Clients never hold result-signing keys.
1203
1298
  */
1204
1299
  get: operations["JwksJson"];
1205
1300
  put?: never;
@@ -1210,6 +1305,46 @@ export interface paths {
1210
1305
  patch?: never;
1211
1306
  trace?: never;
1212
1307
  };
1308
+ "/.well-known/apple-app-site-association": {
1309
+ parameters: {
1310
+ query?: never;
1311
+ header?: never;
1312
+ path?: never;
1313
+ cookie?: never;
1314
+ };
1315
+ /**
1316
+ * Apple App Site Association for universal links
1317
+ * @description Apple's file (deliberately no `.json` extension — Apple's CDN requires exactly this path) letting the Reclaim Verifier app and its App Clip claim `/s` universal links under this origin. Apple's CDN fetches it directly over HTTPS, unauthenticated, and never follows a redirect. The app ids are configurable (`APPLE_APP_ID`, `APPLE_APP_CLIP_ID`) so a sandbox Builder on another origin can publish its own, or none. Only a domain the shipped app actually lists in its entitlements (`applinks:` / `appclips:`) can ever claim a link this way, whatever this document says.
1318
+ */
1319
+ get: operations["AppleAppSiteAssociation"];
1320
+ put?: never;
1321
+ post?: never;
1322
+ delete?: never;
1323
+ options?: never;
1324
+ head?: never;
1325
+ patch?: never;
1326
+ trace?: never;
1327
+ };
1328
+ "/.well-known/assetlinks.json": {
1329
+ parameters: {
1330
+ query?: never;
1331
+ header?: never;
1332
+ path?: never;
1333
+ cookie?: never;
1334
+ };
1335
+ /**
1336
+ * Android Digital Asset Links for app links
1337
+ * @description Digital Asset Links file Android's Package Manager fetches over HTTPS to verify the Reclaim Verifier app's `autoVerify` intent filter for this host (path `/s`). The package name and signing-certificate fingerprints are configurable (`ANDROID_PACKAGE_NAME`, `ANDROID_SIGNING_CERT_FINGERPRINTS`) so a sandbox Builder on another origin can publish its own, or none. Only a domain the shipped app's manifest actually declares can ever claim a link this way, whatever this document says.
1338
+ */
1339
+ get: operations["AssetLinksJson"];
1340
+ put?: never;
1341
+ post?: never;
1342
+ delete?: never;
1343
+ options?: never;
1344
+ head?: never;
1345
+ patch?: never;
1346
+ trace?: never;
1347
+ };
1213
1348
  "/openapi.yaml": {
1214
1349
  parameters: {
1215
1350
  query?: never;
@@ -2042,7 +2177,7 @@ export interface paths {
2042
2177
  put?: never;
2043
2178
  /**
2044
2179
  * Create a provider contribution campaign
2045
- * @description Create a draft public-contribution campaign. A campaign stays private until its requirements are versioned and a maintainer opens it.
2180
+ * @description Create a draft public-contribution campaign. A campaign stays private until its requirements are versioned and a maintainer opens it. A provider has at most one campaign; creating a second returns 409.
2046
2181
  */
2047
2182
  post: operations["CreateProviderContributionCampaign"];
2048
2183
  delete?: never;
@@ -2106,7 +2241,7 @@ export interface paths {
2106
2241
  put?: never;
2107
2242
  /**
2108
2243
  * Add a contribution review comment
2109
- * @description Add an append-only maintainer comment to the review history.
2244
+ * @description Add an append-only comment to the review history. Comments default to `PUBLIC` visibility and cannot contain links, email addresses, long numbers, identifiers, tokens, or credentials.
2110
2245
  */
2111
2246
  post: operations["AddProviderContributionComment"];
2112
2247
  delete?: never;
@@ -2473,6 +2608,26 @@ export interface paths {
2473
2608
  patch?: never;
2474
2609
  trace?: never;
2475
2610
  };
2611
+ "/orgs/{orgId}/providers/used": {
2612
+ parameters: {
2613
+ query?: never;
2614
+ header?: never;
2615
+ path?: never;
2616
+ cookie?: never;
2617
+ };
2618
+ /**
2619
+ * List the providers an organization uses
2620
+ * @description Returns the providers with at least one verification session in the organization, ordered by session count then most recent use, one page at a time. Optionally filter by `q`. Caller must be an active member of the org or present its org token. Opaque cursor pagination.
2621
+ */
2622
+ get: operations["ListOrgUsedProviders"];
2623
+ put?: never;
2624
+ post?: never;
2625
+ delete?: never;
2626
+ options?: never;
2627
+ head?: never;
2628
+ patch?: never;
2629
+ trace?: never;
2630
+ };
2476
2631
  "/orgs/{orgId}/sessions": {
2477
2632
  parameters: {
2478
2633
  query?: never;
@@ -2482,7 +2637,7 @@ export interface paths {
2482
2637
  };
2483
2638
  /**
2484
2639
  * List an organization's verification sessions
2485
- * @description Returns verification sessions created under the organization, newest first. Optionally filter by `sessionId` (prefix match, at least 5 characters), `providerId`, `status`, `resolvedVersion`, `claimantClientId`, and a `createdAfter`/`createdBefore` time range. Caller must be an active member of the org. Opaque cursor pagination.
2640
+ * @description Returns verification sessions created under the organization, newest first. Optionally filter by `sessionId` (prefix match, at least 5 characters), `providerId` (id or slug), `status`, `resolvedVersion`, `claimantClientId`, and a `createdAfter`/`createdBefore` time range. Caller must be an active member of the org. Opaque cursor pagination.
2486
2641
  *
2487
2642
  * Note: `status` filters on the stored column. A session that has passed `expiresAt` but has not yet been swept is reported as `expired` in its body while still stored as `pending`, so `status=expired` may not match such sessions until the sweep runs.
2488
2643
  */
@@ -2515,6 +2670,26 @@ export interface paths {
2515
2670
  patch?: never;
2516
2671
  trace?: never;
2517
2672
  };
2673
+ "/orgs/{orgId}/sessions/{sessionId}/retry-callback": {
2674
+ parameters: {
2675
+ query?: never;
2676
+ header?: never;
2677
+ path?: never;
2678
+ cookie?: never;
2679
+ };
2680
+ get?: never;
2681
+ put?: never;
2682
+ /**
2683
+ * Retry this session's failed callback deliveries
2684
+ * @description Re-enqueues every callback delivery for this session that hasn't succeeded, including ones already dead-lettered. The caller must be an active **OWNER** of the organization that owns the session — re-driving a delivery re-sends consumer data to the subscription's callback URL, so it isn't offered to every member who can read the page. Do this once the callback endpoint answers 2xx again; retrying while it's still failing only walks the delivery back through its retry schedule. Delivery is idempotent — an already-delivered row is skipped, so a repeated retry can't double-send. Returns to the session page so the deliveries list reflects the re-enqueued rows.
2685
+ */
2686
+ post: operations["RetryOrgSessionCallback"];
2687
+ delete?: never;
2688
+ options?: never;
2689
+ head?: never;
2690
+ patch?: never;
2691
+ trace?: never;
2692
+ };
2518
2693
  "/orgs/{orgId}/verification-funnel": {
2519
2694
  parameters: {
2520
2695
  query?: never;
@@ -2535,6 +2710,26 @@ export interface paths {
2535
2710
  patch?: never;
2536
2711
  trace?: never;
2537
2712
  };
2713
+ "/orgs/{orgId}/verification-analytics": {
2714
+ parameters: {
2715
+ query?: never;
2716
+ header?: never;
2717
+ path?: never;
2718
+ cookie?: never;
2719
+ };
2720
+ /**
2721
+ * Verification outcomes by day, device, and country
2722
+ * @description Organization-scoped creation cohorts in UTC. Outcomes are current at query time. Unknown device and country values have their own buckets.
2723
+ */
2724
+ get: operations["GetOrgVerificationAnalytics"];
2725
+ put?: never;
2726
+ post?: never;
2727
+ delete?: never;
2728
+ options?: never;
2729
+ head?: never;
2730
+ patch?: never;
2731
+ trace?: never;
2732
+ };
2538
2733
  "/verifications/sessions": {
2539
2734
  parameters: {
2540
2735
  query?: never;
@@ -2580,9 +2775,9 @@ export interface paths {
2580
2775
  };
2581
2776
  /**
2582
2777
  * Get a verification session
2583
- * @description Returns the session. Authenticated by the consumer's `OrgToken` (or the
2584
- * session-bound Verification Client id); the resolved org must match the
2585
- * session's.
2778
+ * @description Returns the session to its consumer. The `OrgToken` must resolve to the
2779
+ * session's organization. Claimant-facing Verification Clients use the
2780
+ * session-bound `/bootstrap` endpoint instead.
2586
2781
  *
2587
2782
  * Reading `status`:
2588
2783
  * - `pending` — created, not yet finished; the end-user can still
@@ -2619,7 +2814,7 @@ export interface paths {
2619
2814
  };
2620
2815
  /**
2621
2816
  * Get the resolved provider recipes for a session
2622
- * @description Returns the session's resolved provider versions' recipes (`initialUrl` + `requests` per provider), in run order — what the Verification Client needs to run the session (each provider sequentially in one browser session). Authorized for the Verification Client (`x-reclaim-vc-id`) or the session creator (authenticated by the consumer's `OrgToken`; the resolved org must match the session), so it works regardless of the provider's visibility (unlike `GetProvider`, which 404s on PRIVATE providers for non-members).
2817
+ * @description Returns the session's resolved provider versions' recipes (`initialUrl` + `requests` per provider), in run order. The consumer's `OrgToken` must resolve to the session's organization. Claimant-facing Verification Clients use `/bootstrap`, which returns the session and recipes together.
2623
2818
  */
2624
2819
  get: operations["GetVerificationRecipe"];
2625
2820
  put?: never;
@@ -2630,6 +2825,88 @@ export interface paths {
2630
2825
  patch?: never;
2631
2826
  trace?: never;
2632
2827
  };
2828
+ "/verifications/sessions/{sessionId}/bootstrap": {
2829
+ parameters: {
2830
+ query?: never;
2831
+ header?: never;
2832
+ path?: never;
2833
+ cookie?: never;
2834
+ };
2835
+ /**
2836
+ * Bootstrap a Builder-mode Verification Client
2837
+ * @description Returns the immutable session snapshot and its resolved provider recipes in one request. This is the entry point for claimant-facing `api=2` clients. It is served directly by Builder; legacy clients keep using the legacy backend. The registered `x-reclaim-vc-id` must match the client selected when the session was created.
2838
+ */
2839
+ get: operations["BootstrapVerificationClient"];
2840
+ put?: never;
2841
+ post?: never;
2842
+ delete?: never;
2843
+ options?: never;
2844
+ head?: never;
2845
+ patch?: never;
2846
+ trace?: never;
2847
+ };
2848
+ "/verifications/sessions/{sessionId}/runtime-config": {
2849
+ parameters: {
2850
+ query?: never;
2851
+ header?: never;
2852
+ path?: never;
2853
+ cookie?: never;
2854
+ };
2855
+ get?: never;
2856
+ put?: never;
2857
+ /**
2858
+ * Report client inputs and read the session's feature configuration
2859
+ * @description Binds the inputs a Verification Client only learns at runtime — the claimant it is serving, and its own build — and returns this session's feature configuration.
2860
+ * Call it once, after bootstrap, when the claimant is actually in front of the client. Feature flag rules may target a client version or roll out to a percentage of claimants; neither can be evaluated when the session is created, because neither exists yet.
2861
+ * Both inputs are first-write-wins, and the configuration is recomputed only when one of them actually changes. Calling again with the same inputs returns the stored document unchanged, so this is safe to retry and a flag edited in the meantime cannot alter a verification already under way. The registered `x-reclaim-vc-id` must match the client selected when the session was created.
2862
+ */
2863
+ post: operations["ResolveVerificationRuntimeConfig"];
2864
+ delete?: never;
2865
+ options?: never;
2866
+ head?: never;
2867
+ patch?: never;
2868
+ trace?: never;
2869
+ };
2870
+ "/verifications/sessions/{sessionId}/attestor-auth": {
2871
+ parameters: {
2872
+ query?: never;
2873
+ header?: never;
2874
+ path?: never;
2875
+ cookie?: never;
2876
+ };
2877
+ get?: never;
2878
+ put?: never;
2879
+ /**
2880
+ * Create session-bound attestor authorization
2881
+ * @description Creates the legacy-compatible attestor authorization for this Builder session when `ATTESTOR_AUTH_PRIVATE_KEY` is configured. The request accepts no application secret or provider signature. An empty response means attestor authorization is disabled for this deployment.
2882
+ */
2883
+ post: operations["CreateVerificationAttestorAuth"];
2884
+ delete?: never;
2885
+ options?: never;
2886
+ head?: never;
2887
+ patch?: never;
2888
+ trace?: never;
2889
+ };
2890
+ "/verifications/sessions/{sessionId}/results": {
2891
+ parameters: {
2892
+ query?: never;
2893
+ header?: never;
2894
+ path?: never;
2895
+ cookie?: never;
2896
+ };
2897
+ get?: never;
2898
+ put?: never;
2899
+ /**
2900
+ * Submit exact proofs as a managed Builder result
2901
+ * @description Accepts exact `Proof` objects from a claimant-facing `api=2` client. Builder atomically records the first terminal outcome, checks it against the submitted status, signs the outer Builder JWS with its managed key, optionally encrypts it for matching callback subscriptions, and enqueues delivery. Retrying the same terminal outcome is idempotent. This is the only result-submission endpoint; Verification Clients never receive signing or encryption keys.
2902
+ */
2903
+ post: operations["SubmitVerificationClientResult"];
2904
+ delete?: never;
2905
+ options?: never;
2906
+ head?: never;
2907
+ patch?: never;
2908
+ trace?: never;
2909
+ };
2633
2910
  "/verifications/sessions/{sessionId}/tee-nonce": {
2634
2911
  parameters: {
2635
2912
  query?: never;
@@ -2674,9 +2951,8 @@ export interface paths {
2674
2951
  };
2675
2952
  /**
2676
2953
  * Get the event log for a session
2677
- * @description Returns the append-only event log. Readable by the Verification Client
2678
- * (`x-reclaim-vc-id`) or the session creator (authenticated by the consumer's
2679
- * `OrgToken`; the resolved org must match the session).
2954
+ * @description Returns the append-only event log to the session creator. The
2955
+ * consumer's `OrgToken` must resolve to the session's organization.
2680
2956
  *
2681
2957
  * This log is the primary tool for diagnosing a stuck or failed session.
2682
2958
  * A healthy run proceeds through this lifecycle (in order):
@@ -2684,8 +2960,9 @@ export interface paths {
2684
2960
  * `session_pending` → `verification_client_opened` →
2685
2961
  * `verification_client_ready` → `request_matched` →
2686
2962
  * `request_claim_created` → `request_claim_completed` → terminal
2687
- * (`verification_success` | `verification_rejected` | `verification_error`),
2688
- * or `session_expired` if `expiresAt` passes first.
2963
+ * (`verification_success` | `verification_rejected` |
2964
+ * `verification_error` | `verification_cancelled`), or
2965
+ * `session_expired` if `expiresAt` passes first.
2689
2966
  *
2690
2967
  * Read the gaps to locate where the flow stalled:
2691
2968
  * - no `verification_client_opened` → the end-user never opened the link.
@@ -2730,7 +3007,7 @@ export interface paths {
2730
3007
  head?: never;
2731
3008
  /**
2732
3009
  * Update claimant details
2733
- * @description Updates the session's latest diagnostic claimant and device snapshot. The Builder captures the request's Reclaim client headers, HTTP user agent, and peer IP separately from client-reported values. These details never affect proof validity. The x-reclaim-vc-id must match the registered Verification Client selected at session creation.
3010
+ * @description Updates the session's latest diagnostic claimant and device snapshot. The Builder captures the request's Reclaim client headers, HTTP user agent, and peer IP separately from client-reported values. These details never affect proof validity. The x-reclaim-vc-id must match the registered Verification Client selected at session creation. `claimantDetails.network` (the claimant's IP addresses) is stored only when the session's `diagnostics` field is true — see ClaimantDetails.network.
2734
3011
  */
2735
3012
  patch: operations["PatchVerificationClaimant"];
2736
3013
  trace?: never;
@@ -2750,8 +3027,8 @@ export interface paths {
2750
3027
  * (or the agent) answer "did my callback arrive, and if not, why?"
2751
3028
  * without org-dashboard access. Only meaningful after the session
2752
3029
  * reaches a terminal status (no deliveries exist before then). Auth
2753
- * mirrors the events GET: the session-bound Verification Client id, or the
2754
- * consumer's `OrgToken` (the resolved org must match the session).
3030
+ * requires the consumer's `OrgToken`; the resolved organization must
3031
+ * match the session.
2755
3032
  *
2756
3033
  * Reading `deliveryStatus` per entry:
2757
3034
  * - `delivered` — the callback POST succeeded; nothing to do.
@@ -2774,7 +3051,7 @@ export interface paths {
2774
3051
  patch?: never;
2775
3052
  trace?: never;
2776
3053
  };
2777
- "/verifications/sessions/{sessionId}/callback-keys": {
3054
+ "/verifications/sessions/{sessionId}/result": {
2778
3055
  parameters: {
2779
3056
  query?: never;
2780
3057
  header?: never;
@@ -2782,10 +3059,10 @@ export interface paths {
2782
3059
  cookie?: never;
2783
3060
  };
2784
3061
  /**
2785
- * List callback encryption keys for a session
2786
- * @description Used by the Verification Client (x-reclaim-vc-id) after the terminal event: returns the session org's callback subscriptions that subscribe to that terminal event. Each item carries the org's `publicKeyJwk` (secp256k1) to ECIES-encrypt the result to when the org's `canEncryptResult` is enabled, or none (deliver plaintext).
3062
+ * Get the stored encrypted result(s) for a session
3063
+ * @description Returns the stored Builder-signed result payloads for this session — one item per callback subscription. Readable only by the consumer that created the session. The consumer's `OrgToken` must resolve to the session's organization. A pull-based companion to push delivery: when the organization enables encryption, Builder returns an ECIES ciphertext (base64url) that the holder of the matching private key decrypts client-side, else plaintext. Empty `items` until the session reaches a terminal state and a result has been submitted. Treat every returned payload as untrusted until `verifyResultFull` succeeds with the Builder issuer and JWKS URL.
2787
3064
  */
2788
- get: operations["ListSessionCallbackKeys"];
3065
+ get: operations["GetVerificationResult"];
2789
3066
  put?: never;
2790
3067
  post?: never;
2791
3068
  delete?: never;
@@ -2794,31 +3071,7 @@ export interface paths {
2794
3071
  patch?: never;
2795
3072
  trace?: never;
2796
3073
  };
2797
- "/verifications/sessions/{sessionId}/result": {
2798
- parameters: {
2799
- query?: never;
2800
- header?: never;
2801
- path?: never;
2802
- cookie?: never;
2803
- };
2804
- /**
2805
- * Get the stored encrypted result(s) for a session
2806
- * @description Returns the stored result payload(s) the Verification Client stored for this session — one item per callback subscription. Readable by the Verification Client (x-reclaim-vc-id) or the consumer who created the session (authenticated by the consumer's `OrgToken`; the resolved org must match). A pull-based companion to the push delivery: when the org has an encryption credential the Builder relays an ECIES ciphertext (base64url) that the holder of the matching private key decrypts client-side, else plaintext. Empty `items` until the session reaches a terminal state and a result has been submitted. Treat every returned payload as untrusted until `verifyResultFull` succeeds with the session's registered issuer and JWKS URL.
2807
- */
2808
- get: operations["GetVerificationResult"];
2809
- put?: never;
2810
- /**
2811
- * Submit the signed, encrypted verification result
2812
- * @description Used by the Verification Client (x-reclaim-vc-id) to submit the result after a terminal event. The VC signs the JWS and, when the org's `canEncryptResult` is enabled, ECIES-encrypts it to the org's eth public key (from the callback-keys endpoint); it submits one payload per subscription. The Builder stores each payload, enqueues it for the delivery worker (retry → DLQ), and never sees the plaintext. The Verification Client does not contact the Consumer.
2813
- */
2814
- post: operations["SubmitVerificationResult"];
2815
- delete?: never;
2816
- options?: never;
2817
- head?: never;
2818
- patch?: never;
2819
- trace?: never;
2820
- };
2821
- "/verifications/sessions/{sessionId}/retry-callback": {
3074
+ "/verifications/sessions/{sessionId}/retry-callback": {
2822
3075
  parameters: {
2823
3076
  query?: never;
2824
3077
  header?: never;
@@ -2878,6 +3131,52 @@ export interface paths {
2878
3131
  patch?: never;
2879
3132
  trace?: never;
2880
3133
  };
3134
+ "/fetch/authorizations": {
3135
+ parameters: {
3136
+ query?: never;
3137
+ header?: never;
3138
+ path?: never;
3139
+ cookie?: never;
3140
+ };
3141
+ get?: never;
3142
+ put?: never;
3143
+ /**
3144
+ * Authorize a zkFetch call
3145
+ * @description Mints a short-lived attestor authorization for a zkFetch caller and
3146
+ * charges the organization's `ZKFETCH` quota pool for it. Authenticated
3147
+ * by the consumer's `OrgToken`. Builder does not perform the fetch —
3148
+ * the caller opens its own attestor connection with the returned
3149
+ * token, fetches, and proves, exactly as `@reclaimprotocol/zk-fetch`
3150
+ * does today; Builder never sees the request beyond `host`.
3151
+ *
3152
+ * curl -X POST $BASE/fetch/authorizations \
3153
+ * -H "Authorization: Bearer $ORG_TOKEN" \
3154
+ * -H 'Content-Type: application/json' \
3155
+ * -d '{"host":"api.github.com"}'
3156
+ *
3157
+ * The quota deduction runs BEFORE anything is minted, so an org that
3158
+ * has exhausted its `ZKFETCH` pool is refused (`402`/`429`) and never
3159
+ * receives a usable token.
3160
+ *
3161
+ * `host` is recorded for observability only — the minted token is
3162
+ * **not** restricted to it and today authorizes a proof against any
3163
+ * host, exactly like every other Builder-issued attestor token. Host
3164
+ * enforcement, if it ships, will be a server-side change rather than a
3165
+ * breaking one.
3166
+ *
3167
+ * `expiresAt` is always about ten seconds after issuance. The attestor
3168
+ * checks expiry only once, at the auth handshake — never again for the
3169
+ * life of the connection — so this window only has to cover Builder
3170
+ * issuing the token and the caller opening its attestor connection; the
3171
+ * fetch and proof that follow are unaffected however long they take.
3172
+ */
3173
+ post: operations["CreateFetchAuthorization"];
3174
+ delete?: never;
3175
+ options?: never;
3176
+ head?: never;
3177
+ patch?: never;
3178
+ trace?: never;
3179
+ };
2881
3180
  }
2882
3181
  export interface webhooks {
2883
3182
  verificationResult: {
@@ -2965,6 +3264,10 @@ export interface components {
2965
3264
  ProviderID: string;
2966
3265
  /** Format: uuid */
2967
3266
  OrgID: string;
3267
+ /** @description A verification client id used as a filter. Hyphens are ignored. */
3268
+ VerificationClientIDFilter: string;
3269
+ /** @description An organization id used as a filter. Hyphens are ignored, so it matches with or without them; an id that matches no organization returns nothing. */
3270
+ OrgIDFilter: string;
2968
3271
  /** Format: uuid */
2969
3272
  ThemeID: string;
2970
3273
  /**
@@ -2999,13 +3302,29 @@ export interface components {
2999
3302
  readonly apiUrl?: string;
3000
3303
  expiresAt: components["schemas"]["Timestamp"];
3001
3304
  };
3305
+ FetchAuthorizationRequest: {
3306
+ /**
3307
+ * Format: hostname
3308
+ * @description Host the caller intends to fetch from, for example `api.github.com`. Recorded for observability only — see `POST /fetch/authorizations`.
3309
+ */
3310
+ host: string;
3311
+ };
3312
+ /** @description A short-lived attestor authorization for one zkFetch call. */
3313
+ FetchAuthorization: {
3314
+ /**
3315
+ * Format: byte
3316
+ * @description Base64-encoded legacy attestor authorization — the same form `POST /verifications/sessions/{sessionId}/attestor-auth` returns. Decode it back into the native `AuthenticationRequest` to open the attestor connection.
3317
+ */
3318
+ token: string;
3319
+ expiresAt: components["schemas"]["Timestamp"];
3320
+ };
3002
3321
  /**
3003
3322
  * Format: uuid
3004
3323
  * @description Stable id for a callback subscription.
3005
3324
  */
3006
3325
  SubscriptionID: string;
3007
3326
  /** @description Browser claimant snapshot produced by the built-in Verification Client. */
3008
- ReportClaimantRequest: components["schemas"]["ClaimantDetails"];
3327
+ ReportClaimantRequest: components["schemas"]["ClaimantDetailsRequest"];
3009
3328
  /**
3010
3329
  * @description Live-derived operating mode of an organization.
3011
3330
  *
@@ -3140,6 +3459,10 @@ export interface components {
3140
3459
  * @description Email the invite was sent to. Stable for the lifetime of the row; it is the natural identifier of the invitee before they have a `userId`.
3141
3460
  */
3142
3461
  email: string;
3462
+ /** @description The member's name. Absent while the invite is `PENDING` for an unregistered email. */
3463
+ name?: string;
3464
+ /** @description Up to two capital letters from the name, or from the email when there is no name. */
3465
+ initials: string;
3143
3466
  role: components["schemas"]["OrganizationMemberRole"];
3144
3467
  /**
3145
3468
  * @description - `PENDING`: invite issued, not yet accepted.
@@ -3628,7 +3951,7 @@ export interface components {
3628
3951
  */
3629
3952
  QuotaPool: "VERIFICATION" | "ZKFETCH";
3630
3953
  /**
3631
- * @description A plan's config for one pool. Synced from Stripe; `overageRate` + `stripeMeterId` are display-only (Stripe rates the actual charge).
3954
+ * @description A plan's config for one pool. Synced from Stripe. `overageRate` and `stripeMeterId` are display-only (Stripe rates the actual charge); `stripeOveragePriceId` is load-bearing — it is the subscription item that makes the rating happen.
3632
3955
  * @example {
3633
3956
  * "pool": "VERIFICATION",
3634
3957
  * "includedLimit": 2000,
@@ -3651,6 +3974,8 @@ export interface components {
3651
3974
  /** @description Per-unit overuse charge (from Stripe); absent until priced. */
3652
3975
  overageRate?: number;
3653
3976
  stripeMeterId?: string;
3977
+ /** @description The pool's metered Price. Every subscription for this plan carries it as an item — without it Stripe has nothing to rate the pool's usage against, so overage serves without ever billing. */
3978
+ stripeOveragePriceId?: string;
3654
3979
  };
3655
3980
  /** @description Editable pool config for the plan editor. Rate + meter are authored as the pool's metered Price in Stripe, so they aren't set here. */
3656
3981
  PlanPoolInput: {
@@ -3667,6 +3992,10 @@ export interface components {
3667
3992
  pool: components["schemas"]["QuotaPool"];
3668
3993
  used: number;
3669
3994
  includedLimit: number;
3995
+ /** @description Included uses left this period; never below zero. */
3996
+ remaining: number;
3997
+ /** @description Share of `includedLimit` used, rounded down and capped at 100. */
3998
+ percentUsed: number;
3670
3999
  /** @description Effective additional uses allowed after a plan payment fails. */
3671
4000
  paymentFailureAllowance: number;
3672
4001
  /** @description Effective additional overage uses allowed after credits run out. */
@@ -3706,6 +4035,8 @@ export interface components {
3706
4035
  /** @description Number of periodUnit per cycle. */
3707
4036
  periodCount?: number;
3708
4037
  billingTiming: components["schemas"]["BillingTiming"];
4038
+ /** @description Smallest prepaid credit top-up an org on this plan may buy, in the plan's currency. Overage is funded from credit, so the floor keeps a top-up worth more than the fee on it. Absent = no minimum. */
4039
+ minCreditPurchase?: number;
3709
4040
  /** @description Contact-only lead tier — shown on the pricing page but not self-serve checkoutable; admins assign and bill it. Enterprise uses this. */
3710
4041
  contactOnly?: boolean;
3711
4042
  /**
@@ -3736,6 +4067,8 @@ export interface components {
3736
4067
  visibility?: components["schemas"]["EntityVisibility"];
3737
4068
  status?: components["schemas"]["EntityStatus"];
3738
4069
  billingTiming?: components["schemas"]["BillingTiming"];
4070
+ /** @description Smallest prepaid credit top-up an org on this plan may buy, in the plan's currency. Overage is funded from credit, so the floor keeps a top-up worth more than the fee on it. Absent = no minimum. */
4071
+ minCreditPurchase?: number;
3739
4072
  /** @description Contact-only lead tier — shown but not self-serve checkoutable. */
3740
4073
  contactOnly?: boolean;
3741
4074
  /**
@@ -3755,6 +4088,8 @@ export interface components {
3755
4088
  pools: components["schemas"]["PlanPoolInput"][];
3756
4089
  visibility?: components["schemas"]["EntityVisibility"];
3757
4090
  billingTiming?: components["schemas"]["BillingTiming"];
4091
+ /** @description Smallest prepaid credit top-up an org on this plan may buy, in the plan's currency. Overage is funded from credit, so the floor keeps a top-up worth more than the fee on it. Absent = no minimum. */
4092
+ minCreditPurchase?: number;
3758
4093
  contactOnly?: boolean;
3759
4094
  /** Format: uuid */
3760
4095
  orgId?: string;
@@ -3764,6 +4099,74 @@ export interface components {
3764
4099
  ctaUrl?: string;
3765
4100
  accentColor?: string;
3766
4101
  };
4102
+ /** @description One end of a date window: either a calendar date (`2026-09-01`, read as UTC midnight) or a full ISO date-time. The date-only form is what a native `<input type="date">` submits, so `format: date-time` alone would reject every filter the dashboard's own form sends. */
4103
+ DateWindowBound: string;
4104
+ /** @description Cross-org aggregates for the admin analytics page, over the requested window. */
4105
+ AdminAnalytics: {
4106
+ /**
4107
+ * Format: date-time
4108
+ * @description Window start, inclusive — the resolved value, not the input.
4109
+ */
4110
+ from: string;
4111
+ /**
4112
+ * Format: date-time
4113
+ * @description Window end, exclusive.
4114
+ */
4115
+ to: string;
4116
+ orgId?: components["schemas"]["OrgID"];
4117
+ /** @description Session outcomes over the window. */
4118
+ sessions: {
4119
+ total: number;
4120
+ succeeded: number;
4121
+ /** @description Still open — excluded from the success-rate denominator, since a session created a minute ago is not a failure. */
4122
+ pending: number;
4123
+ /** @description `rejected`, `error`, `cancelled`, or `expired`. */
4124
+ failed: number;
4125
+ /** @description Distinct orgs that started at least one session. */
4126
+ activeOrgs: number;
4127
+ };
4128
+ /** @description Demand per provider, busiest first. A session requesting several providers counts once under each, so these totals sum to more than `sessions.total`. */
4129
+ byProvider: {
4130
+ /** Format: uuid */
4131
+ providerId: string;
4132
+ providerTitle: string;
4133
+ total: number;
4134
+ succeeded: number;
4135
+ failed: number;
4136
+ }[];
4137
+ verifications: components["schemas"]["VerificationAnalytics"];
4138
+ /** @description Money in by calendar month, newest first. One row per (month, currency) — currencies are never summed together. */
4139
+ revenue: {
4140
+ /** @description The calendar month in UTC (`2026-09`). Deliberately not a timestamp: a month is a bucket, and shipping an instant invites it to be re-read in another timezone and land in the month next door. */
4141
+ month: string;
4142
+ currency: string;
4143
+ paid: number;
4144
+ /** @description Stored positive (the table forbids negatives) and subtracted to reach `net`. */
4145
+ refunded: number;
4146
+ /** @description paid − refunded; may be negative in a refund-heavy month. */
4147
+ net: number;
4148
+ planPaid?: number;
4149
+ creditsPaid?: number;
4150
+ txCount: number;
4151
+ }[];
4152
+ /** @description Per-org consumption per billing period, heaviest first. Includes closed periods. A period is listed when it OVERLAPS the window, and its counters cover the whole period, not just the overlap. */
4153
+ usage: {
4154
+ orgId: components["schemas"]["OrgID"];
4155
+ orgName: string;
4156
+ planName: string;
4157
+ /** Format: date-time */
4158
+ periodStart: string;
4159
+ /** Format: date-time */
4160
+ periodEnd: string;
4161
+ /** @description This is the org's currently open period. */
4162
+ isActive: boolean;
4163
+ pools: {
4164
+ pool: components["schemas"]["QuotaPool"];
4165
+ used: number;
4166
+ includedLimit: number;
4167
+ }[];
4168
+ }[];
4169
+ };
3767
4170
  /** @description The org's consumption this billing period against its plan's allowances, per pool. */
3768
4171
  OrgUsage: {
3769
4172
  orgId: components["schemas"]["OrgID"];
@@ -3771,6 +4174,7 @@ export interface components {
3771
4174
  planId: string;
3772
4175
  /** @description Plan display name. */
3773
4176
  plan?: string;
4177
+ planTerms?: components["schemas"]["PlanSnapshot"];
3774
4178
  pools: components["schemas"]["OrgPoolUsage"][];
3775
4179
  /** Format: date-time */
3776
4180
  periodStart: string;
@@ -3784,6 +4188,8 @@ export interface components {
3784
4188
  /** @description Credit left to spend. Floors at zero — once empty, the per-pool credit-exhaustion allowance governs overage access, and anything consumed past zero settles on the next Stripe invoice. */
3785
4189
  remaining: number;
3786
4190
  currency: string;
4191
+ /** @description Smallest top-up this org's plan allows, in the same currency. Enforced by the credit checkout; absent = no minimum. */
4192
+ minPurchase?: number;
3787
4193
  /** @description Spent since the last sync with Stripe. May exceed the synced balance while a credit-exhaustion allowance remains; the excess appears on the next invoice. */
3788
4194
  unbilledSpend?: number;
3789
4195
  /** @description Remaining incident allowances, reported separately per pool. */
@@ -3934,26 +4340,185 @@ export interface components {
3934
4340
  periodEnd?: string;
3935
4341
  note?: string;
3936
4342
  };
3937
- /** @description Legacy metadata for one live token of a verification client. Never includes the plaintext secret — only its display `last4`. Same shape as `OrgTokenMeta`: `createMetadata` (issuer + timestamp) plus a flat `lastUsedAt`. */
3938
- VerificationClientTokenMeta: {
4343
+ /**
4344
+ * @description The stored and returned JSON type of a feature flag value.
4345
+ * @enum {string}
4346
+ */
4347
+ FeatureFlagValueType: "BOOLEAN" | "STRING" | "NUMBER" | "JSON";
4348
+ /** @description A native JSON value. The value must match `valueType`. The admin form may send a string representation of a boolean, number, object, or array; Builder normalizes it before storage. JSON values are limited to 32 KiB after normalization. */
4349
+ FeatureFlagInputValue: boolean | string | number | {
4350
+ [key: string]: unknown;
4351
+ } | unknown[];
4352
+ /** @description One first-match rule. Every supplied selector is an AND condition. A provider selector scopes the rule to that provider's turn rather than to the whole session — see `providerId`. At least one selector or rollout percentage is required. */
4353
+ VerificationFeatureFlagRuleInput: {
4354
+ /** @description Lower numbers run first. Priorities are unique within a flag. */
4355
+ priority: number;
4356
+ description?: string;
4357
+ value: components["schemas"]["FeatureFlagInputValue"];
4358
+ /** Format: uuid */
4359
+ verificationClientId?: string;
4360
+ organizationId?: components["schemas"]["OrgID"];
4361
+ /** @description Matches while this provider is the one being verified. The value lands in `providerValues[providerId]`, not in the session-wide `values`, so it does not leak to the session's other providers. */
4362
+ providerId?: components["schemas"]["ProviderID"];
4363
+ /** @description Requires providerId and matches only that exact resolved version. */
4364
+ resolvedVersion?: string;
4365
+ /** @description Matches only this exact Verification Client build, as the client reports itself. The value is self-asserted and unauthenticated, so use it to steer a rollout, never as a security gate. A rule using it matches nothing until the client reports its version. */
4366
+ clientVersion?: string;
4367
+ /** @description Matches the normalized operating system reported in ordinary claimant details, such as android, ios, windows, macos, linux, or fuchsia. Matching is case-insensitive. The value is self-reported and unauthenticated, so use it to steer a rollout, never as a security gate. The rule does not match until claimant details report an operating system; diagnostics mode is not required. */
4368
+ operatingSystem?: string;
4369
+ /** @description Deterministic percentage keyed by flag key and CLAIMANT, so a claimant stays in the same cohort across retries and new sessions. A rule using it matches nothing until a claimant is known. Combining it with other selectors rolls out only within that matching group. */
4370
+ rolloutPercentage?: number;
4371
+ };
4372
+ VerificationFeatureFlagRule: components["schemas"]["VerificationFeatureFlagRuleInput"] & {
3939
4373
  /** Format: uuid */
3940
4374
  id: string;
3941
- last4?: string;
3942
- label?: string;
4375
+ createdAt: components["schemas"]["Timestamp"];
4376
+ };
4377
+ /** @description Current or historical admin configuration for one typed Builder-mode feature flag. Changes create a new immutable version; session snapshots contain only resolved values and evaluation metadata. */
4378
+ VerificationFeatureFlag: {
4379
+ key: string;
4380
+ description: string;
4381
+ valueType: components["schemas"]["FeatureFlagValueType"];
4382
+ defaultValue: components["schemas"]["FeatureFlagInputValue"];
4383
+ /** @description ACTIVE includes the flag in new session runtimeConfig snapshots. ARCHIVED means deprecated: Builder omits it from new sessions while existing immutable session snapshots remain unchanged. */
4384
+ status: components["schemas"]["EntityStatus"];
4385
+ version: number;
4386
+ rules: components["schemas"]["VerificationFeatureFlagRule"][];
3943
4387
  createMetadata: components["schemas"]["ActorMetadata"];
3944
- /** Format: date-time */
3945
- lastUsedAt?: string;
4388
+ updateMetadata: components["schemas"]["ActorMetadata"];
3946
4389
  };
3947
- /** @description Metadata for one active signing key of a verification client — the public half only. `ethAddress` is the JWS `kid` published in the builder's `/.well-known/jwks.json`. */
3948
- VerificationClientKeyMeta: {
4390
+ /** @description One immutable, globally ordered feature flag revision. */
4391
+ VerificationFeatureFlagRevision: {
4392
+ globalRevision: number;
4393
+ flagVersion: number;
4394
+ changedAt: components["schemas"]["Timestamp"];
3949
4395
  /** Format: uuid */
3950
- id: string;
3951
- ethAddress: string;
3952
- label?: string;
3953
- /** Format: date-time */
3954
- createdAt: string;
4396
+ changedBy?: string;
4397
+ flag: components["schemas"]["VerificationFeatureFlag"];
4398
+ };
4399
+ CreateVerificationFeatureFlagRequest: {
4400
+ key: string;
4401
+ description: string;
4402
+ valueType: components["schemas"]["FeatureFlagValueType"];
4403
+ defaultValue: components["schemas"]["FeatureFlagInputValue"];
4404
+ /** @description Omit to create the flag as deprecated. Use ACTIVE only after every enabled first-party client supports the flag. */
4405
+ status?: components["schemas"]["EntityStatus"];
4406
+ rules?: components["schemas"]["VerificationFeatureFlagRuleInput"][];
4407
+ };
4408
+ /** @description Complete replacement used to create the next immutable flag version. Send every field and the full desired rule set. */
4409
+ UpdateVerificationFeatureFlagRequest: {
4410
+ description: string;
4411
+ valueType: components["schemas"]["FeatureFlagValueType"];
4412
+ defaultValue: components["schemas"]["FeatureFlagInputValue"];
4413
+ /** @description Set ARCHIVED to deprecate the flag. It is then omitted from new session snapshots without changing existing sessions. */
4414
+ status: components["schemas"]["EntityStatus"];
4415
+ rules: components["schemas"]["VerificationFeatureFlagRuleInput"][];
4416
+ };
4417
+ /**
4418
+ * @description Which side of the dashboard header the strip renders on. Either strip can take either position, independently of the other.
4419
+ * @enum {string}
4420
+ */
4421
+ BannerPosition: "above_header" | "below_header";
4422
+ /** @description The two site-wide top banners, as raw admin-authored HTML — this is the admin editor's shape. Used only by the dashboard's own layout and the admin editor; there is no public equivalent. */
4423
+ SiteBanners: {
4424
+ announcement: components["schemas"]["AnnouncementBar"];
4425
+ ticker: components["schemas"]["ScrollingBanner"];
4426
+ };
4427
+ /** @description A static, centered, one-line strip. Same shape for the admin GET (raw HTML) and the PUT request/response — the client always sends the complete object, so there's no partial-update case to reason about. */
4428
+ AnnouncementBar: {
4429
+ /** @description Both banners default to disabled; saving doesn't change this. */
4430
+ enabled: boolean;
4431
+ /** @description Raw HTML source. Only `<strong>`, `<em>`, `<u>`, `<br>`, and `<a href="https://…">` survive rendering — every other tag or attribute (a `<script>`, an `onclick`, a non-`https:` link) is escaped to inert text on the dashboard. This field is always the raw, unrendered source the admin typed. */
4432
+ message: string;
4433
+ /** @description When set, the whole bar becomes a clickable link. Must be an `https:` URL — checked by the route (not `format: uri` here), since an empty submitted value is normalized to null rather than rejected as a malformed URI. Null means plain text, no link. */
4434
+ linkUrl: string | null;
4435
+ position: components["schemas"]["BannerPosition"];
4436
+ /** @description Hex color, for example "#00443D". */
4437
+ bgColor: string;
4438
+ /** @description Hex color, for example "#FFFFFF". */
4439
+ textColor: string;
4440
+ paddingTop: number;
4441
+ paddingBottom: number;
4442
+ };
4443
+ /** @description An auto-scrolling marquee of short messages. Same shape for the admin GET (raw HTML) and the PUT request/response. */
4444
+ ScrollingBanner: {
4445
+ /** @description An enabled ticker with zero items renders nothing on the dashboard — not an empty coloured strip. */
4446
+ enabled: boolean;
4447
+ /** @description Short raw-HTML messages (same allowed tags as AnnouncementBar.message), looped/repeated continuously. May be empty. */
4448
+ items: string[];
4449
+ position: components["schemas"]["BannerPosition"];
4450
+ /** @description Hex color, for example "#0B1F1C". */
4451
+ bgColor: string;
4452
+ /** @description Hex color, for example "#FFFFFF". */
4453
+ textColor: string;
4454
+ /** @description Seconds per scroll loop; lower is faster. */
4455
+ speedSeconds: number;
4456
+ paddingTop: number;
4457
+ paddingBottom: number;
4458
+ };
4459
+ /** @description `ScrollingBanner` as an HTML form posts it: `items` is one message per line instead of an array. */
4460
+ ScrollingBannerForm: {
4461
+ enabled: boolean;
4462
+ /** @description One raw-HTML message per line; at most 20 lines. */
4463
+ items: string;
4464
+ position: components["schemas"]["BannerPosition"];
4465
+ bgColor: string;
4466
+ textColor: string;
4467
+ speedSeconds: number;
4468
+ paddingTop: number;
4469
+ paddingBottom: number;
4470
+ };
4471
+ VerificationFeatureFlagEvaluation: {
4472
+ flagVersion: number;
4473
+ /** @enum {string} */
4474
+ source: "DEFAULT" | "RULE";
4475
+ /** Format: uuid */
4476
+ ruleId?: string;
4477
+ rulePriority?: number;
4478
+ };
4479
+ /** @description Runtime inputs a Verification Client reports about itself and the claimant it is serving. Both request fields are optional: send whichever the client actually knows. The operating system is derived from ordinary claimant details. Sending neither simply returns the stored configuration. */
4480
+ ResolveVerificationRuntimeConfigRequest: {
4481
+ /**
4482
+ * Format: uuid
4483
+ * @description The claimant's stable, client-generated id — the same value reported to PatchVerificationClaimant. It is the subject a percentage rollout buckets on, which is what keeps a claimant in one cohort across retries and new sessions. First write wins.
4484
+ */
4485
+ claimantClientId?: string;
4486
+ /** @description The Verification Client's own build, for rules targeting a specific version. Self-asserted and unauthenticated. First write wins. */
4487
+ clientVersion?: string;
4488
+ };
4489
+ /** @description Builder-mode feature configuration for one session. Resolved when the session is created, then recomputed whenever a Verification Client first reports an input the flags depend on — a claimant id, its own version, or the claimant operating system. It is otherwise left alone, so editing a flag does not change a session after its known inputs have settled. Verification Clients use `values`; `evaluations` and `revision` make a session reproducible and diagnosable. Feature flags never replace proof, issuer, JWKS, attestor, TEE, or session-binding validation. */
4490
+ VerificationRuntimeConfig: {
4491
+ /** @constant */
4492
+ schemaVersion: 1;
4493
+ revision: number;
4494
+ resolvedAt: components["schemas"]["Timestamp"];
4495
+ /** @description The client-reported inputs this document was resolved against. Absent fields were unknown at the time, so any rule depending on them did not match. Reported so a client can tell whether the configuration already reflects what it knows. */
4496
+ inputs?: {
4497
+ /** Format: uuid */
4498
+ claimantClientId?: string;
4499
+ clientVersion?: string;
4500
+ /** @description Normalized from ordinary claimant details. This is available whether or not diagnostics mode is enabled. */
4501
+ operatingSystem?: string;
4502
+ };
4503
+ /** @description The session-wide answer, resolved as though no single provider were in play. A rule scoped to a provider never contributes here. */
4504
+ values: {
4505
+ [key: string]: unknown;
4506
+ };
4507
+ /**
4508
+ * @description Per-provider differences, keyed by provider id. Holds only the flags whose answer changes once that provider is the one being verified, so read `providerValues[currentProviderId]?.[key]` first and fall back to `values[key]`.
4509
+ * This is what makes a provider selector mean "this provider" rather than "the session contains this provider". The map is empty when no provider-specific rule changes the baseline; ignoring it altogether yields the session-wide baseline.
4510
+ */
4511
+ providerValues?: {
4512
+ [key: string]: {
4513
+ [key: string]: unknown;
4514
+ };
4515
+ };
4516
+ /** @description Why each flag resolved as it did, for the session-wide baseline. Provider overrides are not broken out here; `providerValues` says what changed, and the flag's rules say why. */
4517
+ evaluations: {
4518
+ [key: string]: components["schemas"]["VerificationFeatureFlagEvaluation"];
4519
+ };
3955
4520
  };
3956
- /** @description A registered first-party caller (app SDK, web portal, zkFetch) allowed to drive verification sessions. Builder mode identifies it by this UUID and binds that identity to each session. The `tokens` fields are legacy compatibility metadata; Builder mode does not use them. The client may also hold active signing keys (`keys` — public halves; their kids are published in the builder's aggregated JWKS). */
4521
+ /** @description A registered claimant-facing client. Builder identifies it by UUID, binds it to each selected session, and signs every result itself. */
3957
4522
  VerificationClient: {
3958
4523
  /** Format: uuid */
3959
4524
  id: string;
@@ -3961,31 +4526,12 @@ export interface components {
3961
4526
  pool: components["schemas"]["QuotaPool"];
3962
4527
  /**
3963
4528
  * Format: uri
3964
- * @description The claimant-facing base URL. This can be a web URL, app link, or deep link and is separate from the cryptographic issuer.
4529
+ * @description The claimant-facing web or app-link URL.
3965
4530
  */
3966
4531
  uri?: string;
3967
- /**
3968
- * Format: uri
3969
- * @description Exact trusted JWS `iss` value registered for this client. Consumers must match signed results against this value before loading JWKS.
3970
- */
3971
- issuer: string;
3972
- /**
3973
- * Format: uri
3974
- * @description Registered JWKS URL for consumer-side result verification. For Builder-managed signing keys this is normally the Builder's aggregated `/.well-known/jwks.json`; a client may instead register a self-hosted URL. The Builder never fetches or proxies this URL.
3975
- */
3976
- jwksUri?: string;
3977
- activeTokenCount: number;
3978
- tokens: components["schemas"]["VerificationClientTokenMeta"][];
3979
- activeKeyCount: number;
3980
- keys: components["schemas"]["VerificationClientKeyMeta"][];
3981
4532
  createMetadata?: components["schemas"]["ActorMetadata"];
3982
4533
  updateMetadata?: components["schemas"]["ActorMetadata"];
3983
4534
  };
3984
- /** @description Legacy compatibility response from register / issue-token endpoints. Builder-mode callers use the registered client's UUID, not this token. */
3985
- VerificationClientWithToken: {
3986
- client: components["schemas"]["VerificationClient"];
3987
- token: string;
3988
- };
3989
4535
  CreateVerificationClientRequest: {
3990
4536
  /** @description Lowercase handle (letters, digits, hyphens), for example, `web-portal`. */
3991
4537
  name: string;
@@ -3997,28 +4543,12 @@ export interface components {
3997
4543
  pool: "VERIFICATION" | "ZKFETCH";
3998
4544
  /** @description Base URL claimants are directed to. A verification request's `verificationClientUrl` must exactly equal this. The returned `verificationUrl` contains the session id and `api=2`; a dual-mode client uses that query value to select Builder mode. */
3999
4545
  uri: string;
4000
- /** @description Exact JWS issuer for signed results. Set this separately when the claimant-facing URL is an app link or contains a session placeholder. Consumers compare it with the JWS header before using the registered JWKS URL. For compatibility, omission defaults to `uri`. */
4001
- issuer?: string;
4002
- /** @description Optional registered JWKS URL for consumers. Use the Builder's aggregated endpoint for Builder-managed keys, or a self-hosted endpoint when the client manages its own signing keys. */
4003
- jwksUri?: string;
4004
4546
  };
4005
4547
  /** @description Fields to change on a registered client. Omitted fields keep their current values. */
4006
4548
  UpdateVerificationClientRequest: {
4007
4549
  pool?: components["schemas"]["QuotaPool"];
4008
4550
  /** @description Claimant-facing base URL. A verification request must exactly equal this value. */
4009
4551
  uri?: string;
4010
- /** @description Exact trusted JWS `iss` value; separate from `uri` and `jwksUri`. */
4011
- issuer?: string;
4012
- /** @description Registered JWKS URL for consumers; never derive it from a signed payload. */
4013
- jwksUri?: string;
4014
- };
4015
- /** @description The PUBLIC half of the client's ES256K signing keypair, as an uncompressed hex public key or a JWK. Exactly one of `publicKey` / `publicKeyJwk` is required; the private key never leaves the client. */
4016
- AddVerificationClientKeyRequest: {
4017
- /** @description Uncompressed secp256k1 public key (65 bytes, hex). */
4018
- publicKey?: string;
4019
- publicKeyJwk?: components["schemas"]["JwkSecp256k1Public"];
4020
- /** @description A human note to tell keys apart (for example, "prod-eu"). */
4021
- label?: string;
4022
4552
  };
4023
4553
  /** @description The email of an existing user to grant staff (any domain). */
4024
4554
  AddStaffMemberRequest: {
@@ -4042,11 +4572,6 @@ export interface components {
4042
4572
  StaffList: {
4043
4573
  items: components["schemas"]["StaffMember"][];
4044
4574
  };
4045
- /** @description Legacy compatibility metadata for a token. Builder-mode clients use their registered UUID in `x-reclaim-vc-id` instead. */
4046
- IssueVerificationClientTokenRequest: {
4047
- /** @description A human note to tell tokens apart (for example, "prod-eu"). */
4048
- label?: string;
4049
- };
4050
4575
  ProviderVersionRef: {
4051
4576
  major: number;
4052
4577
  minor: number;
@@ -4318,6 +4843,20 @@ export interface components {
4318
4843
  /** @description Read-only pre-resolved SEO surface. The server applies the documented override chain (`seo.*Override` → row value → `seoSuggestions.*`) and exposes the result here so HTML renderers, JSON-LD, sitemap, and OG cards read one source. */
4319
4844
  effectiveSeo: components["schemas"]["ProviderEffectiveSeo"];
4320
4845
  };
4846
+ /**
4847
+ * @description How reliably runs produced a proof over the last 30 days: `healthy` from 70%, `degraded` from 40%, otherwise `failing`. Absent until there are enough runs to judge.
4848
+ * @enum {string}
4849
+ */
4850
+ ProviderHealth: "healthy" | "degraded" | "failing";
4851
+ OrgUsedProvider: {
4852
+ id: components["schemas"]["ProviderID"];
4853
+ name: string;
4854
+ domain: string;
4855
+ slug: string;
4856
+ /** @description Sessions in the organization that ran this provider. */
4857
+ sessions: number;
4858
+ lastUsedAt: components["schemas"]["Timestamp"];
4859
+ };
4321
4860
  /**
4322
4861
  * @description Card-shape projection of a `Provider` used by catalog listings (`GET /providers`, `Organization.providers`). Differs from `Provider` in three ways:
4323
4862
  *
@@ -4368,6 +4907,11 @@ export interface components {
4368
4907
  * @description Avatar URL of the owning organization, if set.
4369
4908
  */
4370
4909
  orgIconUrl?: string;
4910
+ /** @description Percent of runs over the last 30 days that produced a proof. Absent until the provider has 5 runs. */
4911
+ readonly successRate?: number;
4912
+ readonly health?: components["schemas"]["ProviderHealth"];
4913
+ /** @description Provider score from 0 to 100, from recent proofs, organizations using it, and how recently it was updated. See `Provider score` in the docs for the criteria. */
4914
+ readonly score?: number;
4371
4915
  readonly createMetadata: components["schemas"]["ActorMetadata"];
4372
4916
  readonly updateMetadata: components["schemas"]["ActorMetadata"];
4373
4917
  };
@@ -4399,6 +4943,14 @@ export interface components {
4399
4943
  dataPoints: string[];
4400
4944
  /** @description Number of providers backing this website that the caller can see. */
4401
4945
  providerCount: number;
4946
+ /** @description The tags most of this website's providers carry. */
4947
+ tags?: components["schemas"]["Tag"][];
4948
+ /** @description Highest `successRate` among the website's providers. Absent until one has enough runs. */
4949
+ bestSuccessRate?: number;
4950
+ /** @description `failing` when none of the rated providers is healthy or degraded, `degraded` when some are not healthy, otherwise `healthy`. */
4951
+ health?: components["schemas"]["ProviderHealth"];
4952
+ /** @description Number of rated providers that are degraded or failing. */
4953
+ unhealthyProviderCount?: number;
4402
4954
  };
4403
4955
  /** @description Body for `POST /site/{domain}/try`. Only the verification `context` (values for the resolved providers' `requiredContext` inputs). The selection (dataPoints / mode / pins) travels in the query string. */
4404
4956
  SiteBuildTryBody: {
@@ -4407,22 +4959,16 @@ export interface components {
4407
4959
  [key: string]: string;
4408
4960
  };
4409
4961
  orgId?: components["schemas"]["OrgID"];
4410
- };
4411
- /** @description Body for `POST /site/{domain}/ai-provider`. `orgId` is optional: which owned organization the AI provider is authored under (defaults to the member's personal organization, or their first owned org). `url` is required only when `domain` has no existing catalog data — the build page's confirm-URL step supplies it, and the draft is scaffolded under whatever domain that URL actually resolves to (which may differ from `domain`), not the unconfirmed search text the build page was first opened with. */
4412
- SiteAiProviderBody: {
4413
- orgId?: components["schemas"]["OrgID"];
4414
- /** @description Confirmed website URL, for a domain with no existing catalog data. Verified reachable before anything is created. */
4415
- url?: string;
4962
+ /**
4963
+ * @description Built-in Verification Client that runs the sandbox session. Defaults to `portals`. `inapp-sdk` and `zkfetch` are not offered: neither has a browser flow to try.
4964
+ * @enum {string}
4965
+ */
4966
+ verificationClient?: "portals" | "verifier-app" | "reclaim-browser-extension" | "builder";
4416
4967
  };
4417
4968
  /** @description Body for `PUT /users/{userId}/org-limit`. An integer sets the limit; `null` (JSON) or an empty string (form) restores the default (3). */
4418
4969
  AdminSetUserOrgLimitBody: {
4419
4970
  limit?: number | string | null;
4420
4971
  };
4421
- /** @description Body for `POST /site/{domain}/try-ai`. An optional edited extraction prompt, saved as a new draft build before the sandbox session is minted. */
4422
- SiteTryAiBody: {
4423
- /** @description The edited extraction prompt for the AI provider. Gated by the prompt guard before it is stored (see docs/prompt-guard.md); the length here documents the same ceiling the guard enforces. */
4424
- prompt?: string;
4425
- };
4426
4972
  /** @description Selects one failed provider from the source session. The server treats this only as selection input and re-derives authorization, failure, version, organization, and prompt. */
4427
4973
  CreateFixWithAiSessionRequest: {
4428
4974
  providerId: components["schemas"]["ProviderID"];
@@ -4435,6 +4981,10 @@ export interface components {
4435
4981
  description?: string;
4436
4982
  /** @description Number of visible providers on the domain that expose this data point. */
4437
4983
  providerCount: number;
4984
+ /** @description `PUBLIC` when any public provider exposes this data point, else `PRIVATE`. */
4985
+ visibility?: components["schemas"]["EntityVisibility"];
4986
+ /** @description The best health among the providers that expose it. */
4987
+ health?: components["schemas"]["ProviderHealth"];
4438
4988
  /** @description Slug of one provider that exposes this data point. */
4439
4989
  exampleProviderSlug?: string;
4440
4990
  /** @description One entry per provider that exposes this data point — how it proves it. Two providers may be byte-identical here; they are still separate, separately pinnable sources (see the `pins` parameter). */
@@ -4505,6 +5055,46 @@ export interface components {
4505
5055
  /** @description User-agent used for iOS verification. */
4506
5056
  ios?: components["schemas"]["UserAgentString"];
4507
5057
  };
5058
+ /** @description Copies one same-origin, script-readable cookie into a request header. The cookie value stays inside the verification client's browser. */
5059
+ BrowserRequestCookieHeader: {
5060
+ name: string;
5061
+ cookieName: string;
5062
+ };
5063
+ /** @description A portal-only, provider-declared HTTP action for `window.Reclaim.browserRequest`. The claimant page supplies only the action id and declared primitive inputs; the recipe controls the HTTPS origin, request template, and returned fields. Other Verification Clients currently ignore this field. */
5064
+ BrowserRequestAction: {
5065
+ id: string;
5066
+ /** Format: uri */
5067
+ origin: string;
5068
+ /** @description Origin-relative fallback path. */
5069
+ path: string;
5070
+ /** @description Optional origin-relative path/query template. Declared inputs use `{{name}}` and are URL-encoded. */
5071
+ pathTemplate?: string;
5072
+ /** @enum {string} */
5073
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
5074
+ /**
5075
+ * @description `fetch` is the default. `navigate` supports GET only and performs a top-level navigation in the action's isolated browser page.
5076
+ * @enum {string}
5077
+ */
5078
+ transport?: "fetch" | "navigate";
5079
+ /** @description Browser User-Agent applied to the isolated action page before its first navigation. Use only when the target origin requires a specific browser identity. */
5080
+ userAgent?: string;
5081
+ /** @description Remove Chromium's automatic Origin header from a fetch action. Unsupported for navigate actions. */
5082
+ omitOriginHeader?: boolean;
5083
+ headers?: {
5084
+ [key: string]: string;
5085
+ };
5086
+ /** @description Header values may interpolate declared `{{name}}` inputs. */
5087
+ headersTemplate?: {
5088
+ [key: string]: string;
5089
+ };
5090
+ /** @description JSON template whose `{{name}}` inputs are inserted as JSON literals. The rendered body is limited again at execution time. */
5091
+ bodyTemplate?: string;
5092
+ cookieValueHeader?: components["schemas"]["BrowserRequestCookieHeader"];
5093
+ /** @description Return the bounded raw response body. */
5094
+ includeBody?: boolean;
5095
+ inputKeys?: string[];
5096
+ responseFields?: string[];
5097
+ };
4508
5098
  /** @description Settings used by the web-based verification client. */
4509
5099
  ProviderWebSettings: {
4510
5100
  /**
@@ -4515,6 +5105,8 @@ export interface components {
4515
5105
  clientOptions?: components["schemas"]["ClientOptions"];
4516
5106
  /** @description JavaScript snippets injected into the page which runs before every page load. `window.Reclaim.` APIs are available to these scripts to request actions to the client like claim creation. */
4517
5107
  jsUserScripts?: string;
5108
+ /** @description Portal-only authenticated browser actions available to `jsUserScripts` through `window.Reclaim.browserRequest`. */
5109
+ browserRequestActions?: components["schemas"]["BrowserRequestAction"][];
4518
5110
  };
4519
5111
  /** @description Optional JSON Schema describing the `context` a Consumer must supply when creating a verification session for this provider version. Only needed when the recipe expects Consumer-supplied values: those are referenced as `{{context.<key>}}` in recipe requests. Bare `{{parameterName}}` placeholders are normally provider parameters extracted from claimant traffic. For old DevTools recipes, Builder-mode Verification Clients seed a missing bare `parameterName` from a same-named scalar session context field when the recipe doesn't use `{{context.parameterName}}`; an explicit parameter always wins. New recipes should use the explicit `{{context.<key>}}` form. Bare parameters need no declaration here. Builder-owned `reclaimSessionId` and `attestationNonce` remain context-only. The Builder validates `CreateVerificationSessionRequest.context` against this schema and rejects the request (400) on mismatch. Extra context fields are always allowed regardless of the schema (a root-level `additionalProperties: false` is ignored). Empty/absent accepts any context. */
4520
5112
  ProviderRequiredContext: {
@@ -4797,7 +5389,7 @@ export interface components {
4797
5389
  /** @enum {string} */
4798
5390
  ContributionCampaignStatus: "DRAFT" | "OPEN" | "PAUSED" | "CLOSED";
4799
5391
  /** @enum {string} */
4800
- ContributionAttemptStatus: "CREATED" | "ACTIVE" | "PROPOSED" | "COMPLETED" | "FAILED" | "CANCELLED" | "STALE";
5392
+ ContributionAttemptStatus: "CREATED" | "ACTIVE" | "PROPOSED" | "COMPLETED" | "FAILED" | "REJECTED" | "CANCELLED" | "STALE";
4801
5393
  /** @enum {string} */
4802
5394
  ContributionSensitivity: "PUBLIC" | "PERSONAL" | "SENSITIVE";
4803
5395
  ContributionRequirement: {
@@ -4807,7 +5399,7 @@ export interface components {
4807
5399
  sensitivity?: components["schemas"]["ContributionSensitivity"];
4808
5400
  requiredClaims?: string[];
4809
5401
  requiredOutputs?: string[];
4810
- };
5402
+ } | unknown | unknown;
4811
5403
  ContributionRequirements: {
4812
5404
  fields: components["schemas"]["ContributionRequirement"][];
4813
5405
  };
@@ -4905,13 +5497,17 @@ export interface components {
4905
5497
  consentText: string;
4906
5498
  /** Format: uri */
4907
5499
  initialUrl: string;
4908
- allowedHosts?: string[];
4909
- allowedPathPrefixes?: string[];
5500
+ /** @description Hosts volunteers may reach. A browser form sends one string with one host per line or comma separated. */
5501
+ allowedHosts?: string[] | string;
5502
+ /** @description Path prefixes volunteers may visit. A browser form sends one string with one path per line or comma separated. */
5503
+ allowedPathPrefixes?: string[] | string;
4910
5504
  fieldKey: string;
4911
5505
  fieldTitle: string;
4912
5506
  fieldDescription?: string;
4913
- requiredClaims?: string[];
4914
- requiredOutputs?: string[];
5507
+ /** @description Claim names the proof must output. A browser form sends one string with one name per line or comma separated. */
5508
+ requiredClaims?: string[] | string;
5509
+ /** @description Extra output names the proof must produce. A browser form sends one string with one name per line or comma separated. */
5510
+ requiredOutputs?: string[] | string;
4915
5511
  sensitivity?: components["schemas"]["ContributionSensitivity"];
4916
5512
  };
4917
5513
  UpdateContributionCampaignRequest: components["schemas"]["CreateContributionCampaignRequest"];
@@ -5070,6 +5666,47 @@ export interface components {
5070
5666
  verificationsRemaining: number;
5071
5667
  resetsAt: components["schemas"]["Timestamp"];
5072
5668
  };
5669
+ VerificationAnalytics: {
5670
+ /** Format: date-time */
5671
+ from: string;
5672
+ /** Format: date-time */
5673
+ to: string;
5674
+ byDay: components["schemas"]["VerificationAnalyticsRow"][];
5675
+ byDevice: components["schemas"]["VerificationAnalyticsRow"][];
5676
+ byCountry: components["schemas"]["VerificationAnalyticsRow"][];
5677
+ byBrowser: components["schemas"]["VerificationAnalyticsRow"][];
5678
+ byOs: components["schemas"]["VerificationAnalyticsRow"][];
5679
+ /** @description The busiest providers. A session requesting several providers counts once under each. */
5680
+ byProvider: components["schemas"]["VerificationAnalyticsRow"][];
5681
+ zkfetch?: components["schemas"]["ZkfetchAnalytics"];
5682
+ };
5683
+ /** @description zkFetch calls in the window. Left out of the report when it is scoped to a provider, since zkFetch calls have none. */
5684
+ ZkfetchAnalytics: {
5685
+ total: number;
5686
+ /** @description Distinct hosts called, including those past `byHost`. */
5687
+ hosts: number;
5688
+ /** @description An active billing period grants a zkFetch allowance (any organization, when the report covers all of them). */
5689
+ hasAllowance: boolean;
5690
+ /** @description Every UTC day of the window, empty days included. */
5691
+ byDay: components["schemas"]["ZkfetchAnalyticsRow"][];
5692
+ /** @description The busiest hosts, lowercased. */
5693
+ byHost: components["schemas"]["ZkfetchAnalyticsRow"][];
5694
+ };
5695
+ ZkfetchAnalyticsRow: {
5696
+ /** @description UTC date or host. */
5697
+ bucket: string;
5698
+ total: number;
5699
+ };
5700
+ VerificationAnalyticsRow: {
5701
+ /** @description UTC date, device category, ISO country code, browser, OS, provider id, or unknown. */
5702
+ bucket: string;
5703
+ /** @description Provider title, on `byProvider` rows only. */
5704
+ title?: string;
5705
+ total: number;
5706
+ succeeded: number;
5707
+ pending: number;
5708
+ failed: number;
5709
+ };
5073
5710
  VerificationFunnel: {
5074
5711
  /** @enum {string} */
5075
5712
  mode: "SESSION" | "PROVIDER";
@@ -5092,6 +5729,33 @@ export interface components {
5092
5729
  /** @description Optional absolute or Builder-hosted image URL. */
5093
5730
  logoUrl?: string;
5094
5731
  };
5732
+ /** @description One immutable provider recipe resolved when the verification session was created. Version resolution never happens in a Verification Client. */
5733
+ VerificationRecipe: {
5734
+ providerId: components["schemas"]["ProviderID"];
5735
+ provider: components["schemas"]["VerificationBrand"];
5736
+ resolvedVersion: string;
5737
+ /** Format: uri */
5738
+ initialUrl: string;
5739
+ /** @description Legacy-only preference. Builder clients always run the structured recipe and never enable AI or manual verification from this value. */
5740
+ preferAiAgent: boolean;
5741
+ geoLocation?: string;
5742
+ jsUserScripts?: string;
5743
+ clientOptions?: components["schemas"]["ClientOptions"];
5744
+ requests: components["schemas"]["RequestSelection"][];
5745
+ allowedJsRequests?: components["schemas"]["RequestSelectionTemplate"][];
5746
+ /** @description Portal-only authenticated actions copied from this immutable version's web settings. */
5747
+ browserRequestActions?: components["schemas"]["BrowserRequestAction"][];
5748
+ };
5749
+ VerificationRecipeList: {
5750
+ /** @description One recipe per session provider, in run order. */
5751
+ recipes: components["schemas"]["VerificationRecipe"][];
5752
+ };
5753
+ VerificationClientBootstrap: {
5754
+ session: components["schemas"]["VerificationSession"];
5755
+ recipes: components["schemas"]["VerificationRecipe"][];
5756
+ /** @description Builder-mode feature configuration for this session, as resolved so far. Bootstrap reads the client's version from the `reclaim-api-client` header. A client that later learns a claimant id should call ResolveVerificationRuntimeConfig, which binds that input and returns the recomputed configuration. A client that does not send the header can report its version there too. Absent only for sessions created before this capability. */
5757
+ runtimeConfig?: components["schemas"]["VerificationRuntimeConfig"];
5758
+ };
5095
5759
  /** @description A single verification a Consumer requests from an end-user. Created via the consumer's `OrgToken`; the org must already have at least one callback subscription. The result is submitted by the Verification Client and delivered by the Builder. */
5096
5760
  VerificationSession: {
5097
5761
  /**
@@ -5110,6 +5774,8 @@ export interface components {
5110
5774
  * @description Set by the Verification Client once the claimant opens the link.
5111
5775
  */
5112
5776
  claimantClientId?: string | null;
5777
+ /** @description The Verification Client build that served this session, read from the `reclaim-api-client` header it reported at bootstrap. Absent until a client has identified itself, and for clients that send no such header. Self-asserted, so treat it as diagnostic: it answers "which build was this?" and never authenticates anything. */
5778
+ clientVersion?: string;
5113
5779
  claimantDetails?: components["schemas"]["ClaimantDetails"];
5114
5780
  claimantDetailsUpdatedAt?: components["schemas"]["Timestamp"];
5115
5781
  /** @description Theme selected and snapshotted when this session was created. */
@@ -5122,7 +5788,11 @@ export interface components {
5122
5788
  teeNonceBoundAt?: components["schemas"]["Timestamp"];
5123
5789
  /** @description Legacy-only preference echoed for compatibility. Builder-mode clients run the structured recipe and do not enable AI or manual verification. */
5124
5790
  preferAiAgent?: boolean;
5125
- /** @description Consumer context, validated against the provider version's required parameters. The Builder injects `reclaimSessionId` after validation. */
5791
+ /** @description Whether this session was created with diagnostic mode enabled (see CreateVerificationSessionRequest.diagnostics). Set once at creation and never changes afterward. Gates whether Builder records claimant IP addresses and how much detail diagnostic events carry; the `diag` parameter on `verificationUrl` mirrors this value and is not itself authoritative. */
5792
+ diagnostics: boolean;
5793
+ /** @description Per-session redirect targets, echoed back unchanged (see CreateVerificationSessionRequest.launchOptions). Absent when never set. */
5794
+ launchOptions?: components["schemas"]["VerificationLaunchOptions"];
5795
+ /** @description Consumer context, validated against the provider version's required parameters. Verification Clients resolve scalar values as `{{context.key}}`, then `{{context_key}}`, then `{{key}}`; explicit parameters win. The Builder injects `reclaimSessionId` after validation. */
5126
5796
  context: {
5127
5797
  [key: string]: unknown;
5128
5798
  };
@@ -5140,16 +5810,6 @@ export interface components {
5140
5810
  * @description Id of the registered verification client whose base URL was used (see `verification_clients`).
5141
5811
  */
5142
5812
  verificationClientId: string;
5143
- /**
5144
- * Format: uri
5145
- * @description Registered JWS issuer for this session. Consumers compare the signed result's `iss` with this value.
5146
- */
5147
- verificationClientIssuer: string;
5148
- /**
5149
- * Format: uri
5150
- * @description Registered JWKS URL for this session's Verification Client. Use this trusted value instead of constructing a URL from result data.
5151
- */
5152
- verificationClientJwksUrl: string;
5153
5813
  /** @description Ready-to-share URL: the registered base URL with the session id attached by the Builder — substituted into a `{sessionId}` placeholder, or appended as a `?sessionId=…` query parameter. It always includes `api=2`, which selects Builder mode in dual-mode Verification Clients. The Consumer may append its own redirect query fields before opening the URL for the claimant; the Builder does not store or execute those redirects. */
5154
5814
  verificationUrl: string;
5155
5815
  createdAt: components["schemas"]["Timestamp"];
@@ -5175,13 +5835,13 @@ export interface components {
5175
5835
  };
5176
5836
  /** @description Body for `POST /verifications/sessions`. Authenticated by the consumer's `OrgToken`. Carries no callback URLs — they come from the org's callback subscriptions. The one shared `context` is validated against every provider's `requiredContext`. */
5177
5837
  CreateVerificationSessionRequest: {
5178
- /** @description Providers to verify, in run order. The Verification Client runs each sequentially in one browser session and submits one combined result; all are required. */
5838
+ /** @description Providers to verify, in run order. The Verification Client runs each sequentially in one browser session and submits one combined result; all are required. Provider version constraints are resolved only while this request is created; clients receive the exact immutable resolved versions and never resolve them again. */
5179
5839
  providers: components["schemas"]["SessionProviderInput"][];
5180
- /** @description Consumer context, shared by all providers. Validated against EACH resolved provider version's `requiredContext` JSON Schema (a 400 is returned on mismatch); extra fields are always allowed. Recipe requests reference these values as `{{context.<key>}}`. To support old DevTools recipes, Builder-mode Verification Clients also use a same-named scalar context value to seed a missing bare `{{key}}` when the recipe doesn't use `{{context.key}}`; an explicit parameter takes precedence. Echoed back (plus `reclaimSessionId`) in the result. Builder-owned `reclaimSessionId` and `attestationNonce` remain context-only. */
5840
+ /** @description Consumer context, shared by all providers. Validated against EACH resolved provider version's `requiredContext` JSON Schema (a 400 is returned on mismatch); extra fields are always allowed. Recipe requests resolve scalar values as `{{context.key}}`, then `{{context_key}}`, then `{{key}}`. A lower-priority alias is used only when the recipe doesn't use a higher-priority spelling; an explicit parameter takes precedence. Echoed back (plus `reclaimSessionId`) in the result. Builder-owned `reclaimSessionId` and `attestationNonce` remain context-only. */
5181
5841
  context: {
5182
5842
  [key: string]: unknown;
5183
5843
  };
5184
- /** @description Optional. Must exactly equal the base URL of a registered verification client (see the `verification_clients` registry / `/admin/verification-clients`). Omit to use the default (`builder`) client. The Builder resolves and stores the registered client UUID, then returns the ready-to-share `verificationUrl` with the session id and `api=2`. A URL that is not a registered client's base is rejected with 400. Consumers append any client-owned redirect parameters after receiving the URL; Builder does not manage them. */
5844
+ /** @description Optional. Must exactly equal the base URL of a registered verification client (see the `verification_clients` registry / `/admin/verification-clients`). Omit to use the default (`portals`) client. The Builder resolves and stores the registered client UUID, then returns the ready-to-share `verificationUrl` with the session id and `api=2`. A URL that is not a registered client's base is rejected with 400. Consumers append any client-owned redirect parameters after receiving the URL; Builder does not manage them. */
5185
5845
  verificationClientUrl?: string;
5186
5846
  /** @description Optional active theme owned by the organization. When omitted, Builder snapshots the organization's most recently updated active theme. If the organization has no active theme, the Verification Client uses its default presentation. */
5187
5847
  themeId?: components["schemas"]["ThemeID"];
@@ -5189,6 +5849,37 @@ export interface components {
5189
5849
  preferredLocale?: string;
5190
5850
  /** @description Legacy-only preference. Builder mode runs the structured recipe and does not enable AI or manual verification. Omit this field for Builder-mode sessions; dual-mode clients may continue to interpret it only on their legacy path. */
5191
5851
  preferAiAgent?: boolean;
5852
+ /** @description Optional; omit or send false for a normal session. Opts this session into diagnostic mode. A diagnostic session records more event detail, including personal data such as the claimant's IP addresses (see ClaimantDetails.network). Builder appends `diag=1` to the returned `verificationUrl` for a diagnostic session and strips any `diag` value the Consumer's own `verificationClientUrl` carries, so this field — not the URL — is the only way to turn diagnostics on. Treat a diagnostic verification URL as sensitive, and don't hand it to a claimant by default. */
5853
+ diagnostics?: boolean;
5854
+ /** @description Optional. Where a Verification Client sends the claimant's browser at the end of this session's flow — see VerificationLaunchOptions. Builder validates and stores this at creation (rejecting a non-`https:` URL with 400 here, rather than storing it and failing later); it never reads, redirects to, or executes it itself. A Verification Client reads it back off the session (verificationUrl.launchOptions, or BootstrapVerificationClient.session.launchOptions) and performs the redirect itself, exactly as `reclaim-js-sdk` and the portal already do for a query-string `redirectUrl` today — this is the same feature, sourced from the session instead of the URL. */
5855
+ launchOptions?: components["schemas"]["VerificationLaunchOptions"];
5856
+ };
5857
+ /** @description Where a Verification Client sends the claimant's browser at the end of a flow. Builder stores these on the session and returns them unchanged (see VerificationSession.launchOptions / BootstrapVerificationClient) — it never reads them itself, never redirects a claimant to them, and never executes them; only the Verification Client that renders the flow does. Vocabulary matches `reclaim-js-sdk`'s `VerificationRequest` and `reclaim-portal`'s `parseVerificationLaunch`: `redirectUrl`/`redirectUrlOptions` on success, `cancelRedirectUrl`/`cancelRedirectUrlOptions` on cancellation. `https:` only — `javascript:`, `data:`, and any other scheme are rejected with 400 at session creation. */
5858
+ VerificationLaunchOptions: {
5859
+ /**
5860
+ * Format: uri
5861
+ * @description Where to send the claimant after a successful verification.
5862
+ */
5863
+ redirectUrl?: string;
5864
+ /** @description How to perform `redirectUrl`'s redirect. */
5865
+ redirectUrlOptions?: components["schemas"]["VerificationLaunchRedirectOptions"];
5866
+ /**
5867
+ * Format: uri
5868
+ * @description Where to send the claimant after a cancelled verification.
5869
+ */
5870
+ cancelRedirectUrl?: string;
5871
+ /** @description How to perform `cancelRedirectUrl`'s redirect. */
5872
+ cancelRedirectUrlOptions?: components["schemas"]["VerificationLaunchRedirectOptions"];
5873
+ };
5874
+ /** @description How a Verification Client performs a launch-options redirect — a plain GET (default) or a form POST/GET carrying extra fields. Matches `reclaim-portal`'s `HttpRedirectionOptions`. */
5875
+ VerificationLaunchRedirectOptions: {
5876
+ /** @enum {string} */
5877
+ method?: "GET" | "POST";
5878
+ body?: components["schemas"]["VerificationLaunchRedirectFormEntry"][];
5879
+ };
5880
+ VerificationLaunchRedirectFormEntry: {
5881
+ name: string;
5882
+ value: string;
5192
5883
  };
5193
5884
  /** @description Exact legacy TEE nonce inputs. Builder stores this unchanged in the session context after it verifies the signed binding request. */
5194
5885
  AttestationNonceData: {
@@ -5211,8 +5902,8 @@ export interface components {
5211
5902
  /** @description EIP-191 65-byte secp256k1 signature, encoded as 0x-prefixed hex. */
5212
5903
  signature: string;
5213
5904
  };
5214
- /** @description Latest diagnostic claimant and device snapshot. Values are best-effort and never participate in proof verification. */
5215
- ClaimantDetails: {
5905
+ /** @description Client-reported claimant and device snapshot. Values are best-effort and never participate in proof verification. Operating-system details are retained in normal mode; only the network object requires diagnostics. Server-observed values are added by Builder and cannot be supplied by the claimant. */
5906
+ ClaimantDetailsRequest: {
5216
5907
  /**
5217
5908
  * Format: uuid
5218
5909
  * @description Verification Client installation identifier. The Builder also stores it in the session's dedicated claimantClientId field.
@@ -5227,16 +5918,55 @@ export interface components {
5227
5918
  [key: string]: unknown;
5228
5919
  };
5229
5920
  device?: {
5921
+ /** @enum {string} */
5922
+ category?: "desktop" | "mobile" | "tablet" | "unknown";
5923
+ } & {
5230
5924
  [key: string]: unknown;
5231
5925
  };
5232
5926
  operatingSystem?: {
5233
5927
  [key: string]: unknown;
5234
5928
  };
5235
- browser?: {
5929
+ browser?: components["schemas"]["ClaimantBrowser"];
5930
+ viewport?: components["schemas"]["ClaimantDimensions"];
5931
+ display?: components["schemas"]["ClaimantDimensions"];
5932
+ /** @description The claimant's own IP address, self-reported. Builder stores it only when the session's `diagnostics` field is true; it drops this object otherwise, regardless of what a Verification Client sends. */
5933
+ network?: {
5934
+ reportedPublicIp?: string;
5935
+ };
5936
+ metadata?: {
5937
+ [key: string]: unknown;
5938
+ };
5939
+ };
5940
+ /** @description Latest claimant and device snapshot populated by Builder. Values are best-effort and never participate in proof verification. Operating-system details are available in normal mode; network details require diagnostics. */
5941
+ ClaimantDetails: {
5942
+ /**
5943
+ * Format: uuid
5944
+ * @description Verification Client installation identifier. The Builder also stores it in the session's dedicated claimantClientId field.
5945
+ */
5946
+ claimantClientId: string;
5947
+ claimantId?: string;
5948
+ collectedAt?: components["schemas"]["Timestamp"];
5949
+ apiClient?: string;
5950
+ locale?: string;
5951
+ httpUserAgent?: string;
5952
+ /** @description Claimant country from Builder's trusted CDN country header, when available. */
5953
+ countryCode?: string;
5954
+ client?: {
5955
+ [key: string]: unknown;
5956
+ };
5957
+ device?: {
5958
+ /** @enum {string} */
5959
+ category?: "desktop" | "mobile" | "tablet" | "unknown";
5960
+ } & {
5961
+ [key: string]: unknown;
5962
+ };
5963
+ operatingSystem?: {
5236
5964
  [key: string]: unknown;
5237
5965
  };
5966
+ browser?: components["schemas"]["ClaimantBrowser"];
5238
5967
  viewport?: components["schemas"]["ClaimantDimensions"];
5239
5968
  display?: components["schemas"]["ClaimantDimensions"];
5969
+ /** @description The claimant's IP addresses: `reportedPublicIp` as the Verification Client observed it, `serverObservedIp` as Builder's own request peer address. Present only when the session's `diagnostics` field is true; a non-diagnostic session never carries this object, even if a Verification Client sent one. */
5240
5970
  network?: {
5241
5971
  reportedPublicIp?: string;
5242
5972
  serverObservedIp?: string;
@@ -5245,13 +5975,39 @@ export interface components {
5245
5975
  [key: string]: unknown;
5246
5976
  };
5247
5977
  };
5978
+ ClaimantBrowser: {
5979
+ name?: string;
5980
+ version?: string;
5981
+ userAgent?: string;
5982
+ userAgentData?: components["schemas"]["ClaimantUserAgentData"];
5983
+ } & {
5984
+ [key: string]: unknown;
5985
+ };
5986
+ /** @description Best-effort User-Agent Client Hints returned by the claimant browser. Browsers can omit or reduce any value for privacy or compatibility. */
5987
+ ClaimantUserAgentData: {
5988
+ architecture?: string;
5989
+ bitness?: string;
5990
+ brands?: components["schemas"]["UserAgentBrandVersion"][];
5991
+ formFactors?: string[];
5992
+ fullVersionList?: components["schemas"]["UserAgentBrandVersion"][];
5993
+ mobile?: boolean;
5994
+ model?: string;
5995
+ platform?: string;
5996
+ platformVersion?: string;
5997
+ uaFullVersion?: string;
5998
+ wow64?: boolean;
5999
+ };
6000
+ UserAgentBrandVersion: {
6001
+ brand: string;
6002
+ version: string;
6003
+ };
5248
6004
  ClaimantDimensions: {
5249
6005
  width: number;
5250
6006
  height: number;
5251
6007
  /** @enum {string} */
5252
6008
  unit: "css-px" | "logical-px" | "physical-px";
5253
6009
  };
5254
- PatchVerificationClaimantRequest: components["schemas"]["ClaimantDetails"];
6010
+ PatchVerificationClaimantRequest: components["schemas"]["ClaimantDetailsRequest"];
5255
6011
  /** @description Body for `POST /verifications/sessions/{sessionId}/events`. Status ping only — never carries the proof (use the result endpoint for that). */
5256
6012
  ReportEventRequest: {
5257
6013
  event: components["schemas"]["VerificationEvent"];
@@ -5282,7 +6038,7 @@ export interface components {
5282
6038
  receivedAt: components["schemas"]["Timestamp"];
5283
6039
  createdAt: components["schemas"]["Timestamp"];
5284
6040
  };
5285
- /** @description RFC 7515 JWS in General (or Flattened) JSON serialization. The signed verification result produced by the Verification Client — this is what the `data` field of a `VerificationResultDelivery` decrypts to. Signed ES256K (RFC 8812) over SHA-256 of `<protected>.<payload>`. Verify it with the Verification Client's registered issuer and JWKS URL; never derive a JWKS URL from JWS data. Its decoded payload is `VerificationResultPayload`. */
6041
+ /** @description RFC 7515 JWS in General (or Flattened) JSON serialization. The signed verification result produced by Builder — this is what the `data` field of a `VerificationResultDelivery` decrypts to. Signed ES256K (RFC 8812) over SHA-256 of `<protected>.<payload>`. Verify it with Builder's issuer and JWKS URL; never derive a JWKS URL from JWS data. Its decoded payload is `VerificationResultPayload`. */
5286
6042
  Jws: {
5287
6043
  /** @description base64url-encoded JSON payload. */
5288
6044
  payload: string;
@@ -5306,8 +6062,30 @@ export interface components {
5306
6062
  /** @description Payload interpreted per `event`. Terminal result events: the signed result — an **ECIES ciphertext** (base64url, secp256k1 + AES-256-GCM) wrapping the signed JWS when the org's `canEncryptResult` is enabled (decrypt with the matching eth private key to recover the inner JWS), else the JWS directly; the inner JWS parses as the `Jws` schema with payload `VerificationResultPayload`. Non-terminal events: plaintext JSON `{ event, eventData }` (unsigned). */
5307
6063
  data: string;
5308
6064
  };
5309
- /** @description Exact `Proof` object emitted by a legacy Reclaim Verification Client. The Verification Client must preserve this object without renaming, wrapping, or dropping fields. Consumers pass it directly to `@reclaimprotocol/client` `verifyProof`, normally through `verifyResultFull`. Do not trust any proof field until verification succeeds. */
5310
- LegacyProof: {
6065
+ /** @description A claimant-facing Verification Client's terminal result. Proofs retain the exact `Proof` shape; Builder signs only the outer result. */
6066
+ SubmitVerificationClientResultRequest: {
6067
+ /** @enum {string} */
6068
+ status: "success" | "rejected" | "error" | "cancelled";
6069
+ results: components["schemas"]["VerificationClientProviderResult"][];
6070
+ problem?: components["schemas"]["Problem"] | null;
6071
+ };
6072
+ VerificationClientProviderResult: {
6073
+ providerId: components["schemas"]["ProviderID"];
6074
+ resolvedVersion: string;
6075
+ requests: components["schemas"]["VerificationClientRequestResult"][];
6076
+ };
6077
+ VerificationClientRequestResult: {
6078
+ requestId?: string;
6079
+ url?: string;
6080
+ /** @enum {string} */
6081
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
6082
+ proof: components["schemas"]["ReclaimRequestProof"];
6083
+ extractedParameters?: {
6084
+ [key: string]: unknown;
6085
+ };
6086
+ };
6087
+ /** @description Exact `Proof` object for one verified request within a provider, emitted by every Reclaim Verification Client — the in-app SDK, the browser extension, portals, and Builder's own client. The Verification Client must preserve this object without renaming, wrapping, or dropping fields. Consumers pass it directly to `@reclaimprotocol/client` `verifyRequestProof`, normally through `verifyResultFull`. Do not trust any proof field until verification succeeds. */
6088
+ ReclaimRequestProof: {
5311
6089
  identifier: string;
5312
6090
  claimData: {
5313
6091
  provider: string;
@@ -5321,30 +6099,36 @@ export interface components {
5321
6099
  epoch: number;
5322
6100
  };
5323
6101
  signatures: string[];
5324
- witnesses: ({
6102
+ witnesses: {
5325
6103
  id: string;
5326
6104
  url: string;
6105
+ /** @description How this witness attested the claim. Every verification client emits the same envelope so consumers branch on `type` rather than on which client produced the proof. The attestor address and claim signature are always present and always checked; `type` selects what extra evidence, if any, comes with them. */
5327
6106
  claimAttestation?: {
5328
- [key: string]: unknown;
6107
+ /**
6108
+ * @description `embedded-attestor` — the in-app SDK and the browser extension, whose attestor signs the claim and may return its own `attestation_report`. `confidential-space` — portals, whose browser runtime signs inside a GCP Confidential Space and returns `tee_attestation`. Every client sets this explicitly.
6109
+ * @enum {string}
6110
+ */
6111
+ type: "embedded-attestor" | "confidential-space";
6112
+ attestor_address: string;
6113
+ claim_signature: string;
6114
+ /** @description `embedded-attestor` only, and optional even then: the attestor's own Confidential Space attestation as an RS256 JWT. Attestors in production sign claims without returning one. */
6115
+ attestation_report?: string;
6116
+ /** @description `confidential-space` only: the runtime's TEE attestation, the same payload legacy proofs carry in the proof's top-level `teeAttestation`. Bound to the claim through `context.attestationNonce`. Preserve it exactly. */
6117
+ tee_attestation?: unknown;
5329
6118
  };
5330
- } & {
5331
- [key: string]: unknown;
5332
- })[];
5333
- /** @description Extraction values carried by the proof. Consumers trust only the values returned by `verifyProof` after successful verification. */
6119
+ }[];
6120
+ /** @description Extraction values carried by the proof. Consumers trust only the values returned by `verifyRequestProof` after successful verification. */
5334
6121
  extractedParameterValues: unknown;
5335
6122
  /** @description Provider-supplied data. This field isn't verified. */
5336
6123
  publicData?: unknown;
5337
6124
  /** Format: int64 */
5338
6125
  taskId?: number;
5339
- teeAttestation?: {
5340
- [key: string]: unknown;
5341
- };
5342
- } & {
5343
- [key: string]: unknown;
6126
+ /** @description Legacy TEE attestation payload. Clients preserve this value exactly; historical proofs may encode it as an object or a JSON string. */
6127
+ teeAttestation?: unknown;
5344
6128
  };
5345
- /** @description The decoded payload of a signature-verified delivered result (the JWS itself is the `Jws` schema, signed ES256K by a key at the registered Verification Client JWKS URL). Consumers must compare `iss` with the registered issuer and use the separately registered JWKS URL; never derive a fetch URL from payload data. Consumers must also check `reclaimSessionId` against the session they created and `verification_session.status` for the outcome. `results` is present on success; `problem` (RFC 9457 shape) is set when the run failed. */
6129
+ /** @description The decoded payload of a signature-verified delivered result (the JWS itself is the `Jws` schema, signed ES256K by Builder's key). Consumers must compare `iss` with their configured Builder origin and fetch the key from that origin's `/.well-known/jwks.json`; never derive a network destination from signed payload data. Consumers must also check `reclaimSessionId` against the session they created and `verification_session.status` for the outcome. `results` is present on success; `problem` (RFC 9457 shape) is set when the run failed. */
5346
6130
  VerificationResultPayload: {
5347
- /** @description Verification Client issuer URL. Compare this value with the registered issuer before fetching the separately registered JWKS. */
6131
+ /** @description Builder issuer URL. Compare this with the configured Builder origin. */
5348
6132
  iss: string;
5349
6133
  /** @description The session id (same as `reclaimSessionId`). */
5350
6134
  sub: string;
@@ -5361,10 +6145,10 @@ export interface components {
5361
6145
  reclaimSessionId: components["schemas"]["SessionID"];
5362
6146
  verification_session: {
5363
6147
  /** @enum {string} */
5364
- status: "success" | "rejected" | "error";
6148
+ status: "success" | "rejected" | "error" | "cancelled";
5365
6149
  /**
5366
6150
  * Format: uuid
5367
- * @description Registered Verification Client that signed this result. Use it to resolve the trusted issuer and JWKS configuration.
6151
+ * @description Registered claimant-facing Verification Client that produced the proofs. Builder signs the result.
5368
6152
  */
5369
6153
  verification_client_id: string;
5370
6154
  /** @description The providers verified in this session, in run order. */
@@ -5391,7 +6175,7 @@ export interface components {
5391
6175
  request_id?: string;
5392
6176
  url?: string;
5393
6177
  method?: string;
5394
- /** @description Signed-envelope diagnostic copy. Don't trust this copy; use the data returned by `verifyProof`. */
6178
+ /** @description Signed-envelope diagnostic copy. Don't trust this copy; use the data returned by `verifyRequestProof`. */
5395
6179
  extracted_parameters?: {
5396
6180
  [key: string]: unknown;
5397
6181
  };
@@ -5399,7 +6183,7 @@ export interface components {
5399
6183
  content_hash?: string;
5400
6184
  identifier?: string;
5401
6185
  owner?: string;
5402
- proof: components["schemas"]["LegacyProof"];
6186
+ proof: components["schemas"]["ReclaimRequestProof"];
5403
6187
  } & {
5404
6188
  [key: string]: unknown;
5405
6189
  })[];
@@ -5413,24 +6197,6 @@ export interface components {
5413
6197
  } & {
5414
6198
  [key: string]: unknown;
5415
6199
  };
5416
- /** @description A callback subscription's delivery key, returned to the Verification Client. When `publicKeyJwk` is present the VC ECIES-encrypts the result for that org (its `canEncryptResult` is enabled); when absent the VC submits the plaintext signed JWS. */
5417
- CallbackKey: {
5418
- /** Format: uuid */
5419
- subscriptionId: string;
5420
- /** @description The org's secp256k1 (eth) public JWK to ECIES-encrypt the result to. Absent ⇒ deliver plaintext. */
5421
- publicKeyJwk?: components["schemas"]["JwkSecp256k1Public"];
5422
- };
5423
- /** @description One result payload for one callback subscription. The Verification Client signs the JWS and, when the org's `canEncryptResult` is enabled, ECIES-encrypts it to the org's eth public key; otherwise it submits the plaintext JWS. Either way the payload is carried in `payload` and the Builder stores + delivers it as a blind relay. */
5424
- CallbackDelivery: {
5425
- /** Format: uuid */
5426
- subscriptionId: string;
5427
- /** @description The signed result payload, as raw text — an ECIES ciphertext (base64url) when the org's `canEncryptResult` is enabled, otherwise the plaintext JWS JSON. Same raw form the callback envelope's `data` carries. */
5428
- payload: string;
5429
- };
5430
- /** @description Body for `POST /verifications/sessions/{sessionId}/result`. The Verification Client signs the JWS, encrypts it per callback subscription (keys fetched from the callback-keys endpoint), and submits one ciphertext per subscription. The Builder stores + delivers them; it never sees the plaintext result. */
5431
- SubmitVerificationResultRequest: {
5432
- deliveries: components["schemas"]["CallbackDelivery"][];
5433
- };
5434
6200
  /** @description Diagnostic state of one callback delivery (one per subscription × terminal event). Never carries the payload — use `GetVerificationResult` to pull the stored ciphertext. */
5435
6201
  VerificationDelivery: {
5436
6202
  subscriptionId: components["schemas"]["SubscriptionID"];
@@ -5511,6 +6277,8 @@ export interface components {
5511
6277
  };
5512
6278
  };
5513
6279
  parameters: {
6280
+ /** @description Stable feature flag key. */
6281
+ FeatureFlagKey: string;
5514
6282
  /** @description Exact canonical provider version, for example `1.4.2` or `1.4.3-fixed.1`. A prerelease build never falls back to another row. */
5515
6283
  ProviderVersionPath: string;
5516
6284
  /**
@@ -5809,14 +6577,8 @@ export interface operations {
5809
6577
  SiteBuild: {
5810
6578
  parameters: {
5811
6579
  query?: {
5812
- /** @description Selected data-point names. Repeat to pass several. Optional only so the "Build it with AI" entry can open the build page with just a missing `dataPoint`; the normal flow always passes ≥1. */
6580
+ /** @description Selected data-point names. Repeat to pass several. Without any, the page redirects back to the site page to pick some. */
5813
6581
  dataPoints?: string[];
5814
- /** @description When set, auto-opens the "Try with AI" dialog on load (the "Build it with AI" entry from the explore page). */
5815
- ai?: string;
5816
- /** @description Provider id that an AI authoring run just built and proved. Renders the build page in its "already built and verified" state — the provider and its data points instead of another Try. Ignored unless it names a provider the viewer can see on this domain with a live trunk version. */
5817
- aiBuilt?: components["schemas"]["ProviderID"];
5818
- /** @description A specific missing data point to seed the AI prompt with. */
5819
- dataPoint?: string;
5820
6582
  mode?: components["schemas"]["ResolveMode"];
5821
6583
  /** @description Source pins: `pins[<dataPoint>]=<providerId>`. Pins the provider that must prove that data point; a pinned provider is taken first and is never pruned. Omit (or send empty) for Auto. A comma-separated list is also accepted — the first id that covers the point wins. */
5822
6584
  pins?: {
@@ -5985,106 +6747,47 @@ export interface operations {
5985
6747
  default: components["responses"]["ProblemResponse"];
5986
6748
  };
5987
6749
  };
5988
- SiteAiProvider: {
6750
+ DiscoverTeachAgent: {
5989
6751
  parameters: {
5990
6752
  query?: {
5991
- /** @description A specific missing data point to name in the prompt. */
6753
+ /** @description Website the user wanted to verify data from. */
6754
+ domain?: string;
6755
+ /** @description Specific data point the user could not find. */
5992
6756
  dataPoint?: string;
5993
- /** @description A failed sandbox session whose error seeds the prompt. */
5994
- sessionId?: components["schemas"]["SessionID"];
5995
- /** @description A provider to version (when owned + editable) instead of creating one. */
5996
- fromProviderId?: components["schemas"]["ProviderID"];
5997
- dataPoints?: string[];
5998
- mode?: components["schemas"]["ResolveMode"];
5999
- provided?: string[];
6000
- /** @description Source pins: `pins[<dataPoint>]=<providerId>`. Pins the provider that must prove that data point; a pinned provider is taken first and is never pruned. Omit (or send empty) for Auto. A comma-separated list is also accepted — the first id that covers the point wins. */
6001
- pins?: {
6002
- [key: string]: string;
6003
- };
6004
- exclude?: components["schemas"]["ProviderID"][];
6005
6757
  };
6006
6758
  header?: never;
6007
- path: {
6008
- domain: string;
6009
- };
6759
+ path?: never;
6010
6760
  cookie?: never;
6011
6761
  };
6012
- /** @description Optional: which owned organization to author the provider under. */
6013
- requestBody?: {
6014
- content: {
6015
- "application/x-www-form-urlencoded": components["schemas"]["SiteAiProviderBody"];
6016
- "application/json": components["schemas"]["SiteAiProviderBody"];
6017
- };
6018
- };
6762
+ requestBody?: never;
6019
6763
  responses: {
6020
- /** @description The AI dialog body (editable prompt + Try with AI). */
6021
- 200: {
6022
- headers: {
6023
- [name: string]: unknown;
6024
- };
6025
- content: {
6026
- "text/html": components["schemas"]["HtmlContent"];
6027
- };
6028
- };
6764
+ 200: components["responses"]["HTMLResponse"];
6029
6765
  default: components["responses"]["ProblemResponse"];
6030
6766
  };
6031
6767
  };
6032
- SiteTryAi: {
6768
+ DiscoverAgentWizard: {
6033
6769
  parameters: {
6034
- query: {
6035
- /** @description The AI provider to try. */
6036
- providerId: components["schemas"]["ProviderID"];
6037
- /** @description Which owned organization the sandbox session runs under (defaults to the member's personal organization, or their first owned org). Must own the provider. */
6038
- orgId?: components["schemas"]["OrgID"];
6039
- };
6770
+ query?: never;
6040
6771
  header?: never;
6041
- path: {
6042
- domain: string;
6043
- };
6772
+ path?: never;
6044
6773
  cookie?: never;
6045
6774
  };
6046
- /** @description An optional edited extraction prompt to save before trying. */
6047
- requestBody?: {
6775
+ requestBody: {
6048
6776
  content: {
6049
- "application/x-www-form-urlencoded": components["schemas"]["SiteTryAiBody"];
6050
- "application/json": components["schemas"]["SiteTryAiBody"];
6051
- };
6052
- };
6053
- responses: {
6054
- /** @description Session created. */
6055
- 201: {
6056
- headers: {
6057
- [name: string]: unknown;
6058
- };
6059
- content: {
6060
- "application/json": components["schemas"]["VerificationSession"];
6061
- };
6062
- };
6063
- /** @description Sandbox verification quota exceeded. */
6064
- 429: {
6065
- headers: {
6066
- [name: string]: unknown;
6067
- };
6068
- content: {
6069
- "application/problem+json": components["schemas"]["Problem"];
6777
+ "application/x-www-form-urlencoded": {
6778
+ /** @description The wizard's ready-to-paste task prompt. */
6779
+ basePrompt: string;
6780
+ /** @description Prefix of the wizard's element ids, so copy targets stay unique. */
6781
+ idPrefix: string;
6782
+ /** @description Picked coding agent; unknown values fall back to the first. */
6783
+ agent?: string;
6784
+ /** @description What the user is building, appended to the prompt. */
6785
+ building?: string;
6786
+ /** @description Label for `building` in the prompt. Defaults to "What I'm building". */
6787
+ lead?: string;
6070
6788
  };
6071
6789
  };
6072
- default: components["responses"]["ProblemResponse"];
6073
- };
6074
- };
6075
- DiscoverTeachAgent: {
6076
- parameters: {
6077
- query?: {
6078
- /** @description Website the user wanted to verify data from. */
6079
- domain?: string;
6080
- /** @description Specific data point the user could not find. */
6081
- dataPoint?: string;
6082
- };
6083
- header?: never;
6084
- path?: never;
6085
- cookie?: never;
6086
6790
  };
6087
- requestBody?: never;
6088
6791
  responses: {
6089
6792
  200: components["responses"]["HTMLResponse"];
6090
6793
  default: components["responses"]["ProblemResponse"];
@@ -6097,6 +6800,7 @@ export interface operations {
6097
6800
  domain: string;
6098
6801
  /** @description Selected data-point names. Repeat to pass several. */
6099
6802
  dataPoints: string[];
6803
+ /** @description Provider-selection strategy. See `ResolveMode`. */
6100
6804
  mode?: components["schemas"]["ResolveMode"];
6101
6805
  };
6102
6806
  header?: never;
@@ -6249,7 +6953,7 @@ export interface operations {
6249
6953
  AdminProviders: {
6250
6954
  parameters: {
6251
6955
  query?: {
6252
- /** @description Free-text search on title, domain, or slug. */
6956
+ /** @description Free-text search on title, domain, slug, or provider id (hyphens optional). */
6253
6957
  q?: string;
6254
6958
  visibility?: components["schemas"]["EntityVisibility"];
6255
6959
  status?: components["schemas"]["EntityStatus"];
@@ -6324,8 +7028,10 @@ export interface operations {
6324
7028
  AdminOrgs: {
6325
7029
  parameters: {
6326
7030
  query?: {
6327
- /** @description Matches workspace name or any member's email. */
7031
+ /** @description Matches workspace name, organization id (hyphens optional), or any member's email. */
6328
7032
  q?: string;
7033
+ /** @description Opaque cursor returned as `nextPageCursor` on a prior response. Pass it back as-is to fetch the next page; omit on the first request. Clients must not parse, modify, or fabricate cursors — the server reserves the encoding. */
7034
+ cursor?: string;
6329
7035
  };
6330
7036
  header?: never;
6331
7037
  path?: never;
@@ -6355,6 +7061,7 @@ export interface operations {
6355
7061
  /** Format: date-time */
6356
7062
  updatedAt?: string;
6357
7063
  }[];
7064
+ nextPageCursor?: string;
6358
7065
  };
6359
7066
  };
6360
7067
  };
@@ -6364,6 +7071,7 @@ export interface operations {
6364
7071
  AdminUsers: {
6365
7072
  parameters: {
6366
7073
  query?: {
7074
+ /** @description Matches email, name, user id, or personal organization id (hyphens optional in ids). */
6367
7075
  q?: string;
6368
7076
  };
6369
7077
  header?: never;
@@ -6421,19 +7129,25 @@ export interface operations {
6421
7129
  AdminSessions: {
6422
7130
  parameters: {
6423
7131
  query?: {
6424
- /** @description Only return sessions whose id starts with this value (matched at least 5 characters). */
7132
+ /** @description Only return sessions whose id starts with this value, ignoring hyphens and case. Ignored under 5 characters. A full id matches exactly. */
6425
7133
  sessionId?: string;
6426
- /** @description Only return sessions for this exact provider id. */
7134
+ /** @description Only return sessions for this exact provider id (hyphens optional) or slug. */
6427
7135
  providerId?: string;
6428
- /** @description Only return the session matching this claimant client id. */
7136
+ /** @description Only return sessions created through this verification client. Hyphens are optional; an id that matches no client returns nothing. */
7137
+ verificationClientId?: components["schemas"]["VerificationClientIDFilter"];
7138
+ /** @description Only return sessions that ran a provider whose name, domain, slug, or id contains this text (an id matches with or without hyphens). Matches at most 50 providers. */
7139
+ providerSearch?: string;
7140
+ /** @description Only return the session matching this claimant client id (hyphens optional). */
6429
7141
  claimantClientId?: string;
6430
- /** @description Only return sessions belonging to this exact organization id. */
7142
+ /** @description Only return sessions belonging to this exact organization id (hyphens optional). */
6431
7143
  orgId?: string;
6432
7144
  status?: components["schemas"]["VerificationStatus"];
6433
7145
  /** @description Only return sessions created at or after this time (inclusive). */
6434
7146
  createdAfter?: string;
6435
7147
  /** @description Only return sessions created at or before this time (inclusive). */
6436
7148
  createdBefore?: string;
7149
+ /** @description Opaque cursor returned as `nextPageCursor` on a prior response. Pass it back as-is to fetch the next page; omit on the first request. */
7150
+ cursor?: string;
6437
7151
  };
6438
7152
  header?: never;
6439
7153
  path?: never;
@@ -6450,6 +7164,7 @@ export interface operations {
6450
7164
  "text/html": components["schemas"]["HtmlContent"];
6451
7165
  "application/json": {
6452
7166
  items: components["schemas"]["VerificationSession"][];
7167
+ nextPageCursor?: string;
6453
7168
  };
6454
7169
  };
6455
7170
  };
@@ -6457,6 +7172,45 @@ export interface operations {
6457
7172
  default: components["responses"]["ProblemResponse"];
6458
7173
  };
6459
7174
  };
7175
+ AdminAnalytics: {
7176
+ parameters: {
7177
+ query?: {
7178
+ /** @description Restrict every section to this organization. */
7179
+ orgId?: components["schemas"]["OrgIDFilter"];
7180
+ /** @description Only count sessions that ran a provider whose name, domain, slug, or id contains this text (an id matches with or without hyphens). Matches at most 50 providers. Applies to the session and verification sections, not revenue or usage. */
7181
+ providerSearch?: string;
7182
+ /** @description Only count sessions created through this verification client. Applies to the session and verification sections, not revenue or usage. The zkFetch section is left out unless this is the zkfetch client. Hyphens are optional; an id that matches no client returns nothing. */
7183
+ verificationClientId?: components["schemas"]["VerificationClientIDFilter"];
7184
+ /** @description Window start, inclusive. Defaults to 30 days before `to`. */
7185
+ from?: components["schemas"]["DateWindowBound"];
7186
+ /** @description Window end, exclusive. Defaults to now. */
7187
+ to?: components["schemas"]["DateWindowBound"];
7188
+ /** @description Set to `csv` to download one section as a spreadsheet instead of rendering the page. Pair it with `section`. A CSV export returns up to 1000 rows, where the page shows only the leading rows of each ranked section. */
7189
+ format?: "csv";
7190
+ /** @description Which section `format=csv` exports. Each section has its own columns, so one download holds one section. Defaults to `providers`. */
7191
+ section?: "providers" | "revenue" | "usage";
7192
+ };
7193
+ header?: never;
7194
+ path?: never;
7195
+ cookie?: never;
7196
+ };
7197
+ requestBody?: never;
7198
+ responses: {
7199
+ /** @description Ok */
7200
+ 200: {
7201
+ headers: {
7202
+ [name: string]: unknown;
7203
+ };
7204
+ content: {
7205
+ "text/html": components["schemas"]["HtmlContent"];
7206
+ "application/json": components["schemas"]["AdminAnalytics"];
7207
+ "text/csv": string;
7208
+ };
7209
+ };
7210
+ 403: components["responses"]["ForbiddenResponse"];
7211
+ default: components["responses"]["ProblemResponse"];
7212
+ };
7213
+ };
6460
7214
  AdminCallbackDlq: {
6461
7215
  parameters: {
6462
7216
  query?: never;
@@ -6485,6 +7239,7 @@ export interface operations {
6485
7239
  AdminThemes: {
6486
7240
  parameters: {
6487
7241
  query?: {
7242
+ /** @description Matches theme label, organization name, theme id, or organization id (hyphens optional in ids). */
6488
7243
  q?: string;
6489
7244
  };
6490
7245
  header?: never;
@@ -6638,9 +7393,9 @@ export interface operations {
6638
7393
  AdminBillingTransactions: {
6639
7394
  parameters: {
6640
7395
  query?: {
6641
- orgId?: components["schemas"]["OrgID"];
6642
- from?: string;
6643
- to?: string;
7396
+ orgId?: components["schemas"]["OrgIDFilter"];
7397
+ from?: components["schemas"]["DateWindowBound"];
7398
+ to?: components["schemas"]["DateWindowBound"];
6644
7399
  limit?: number;
6645
7400
  offset?: number;
6646
7401
  };
@@ -6967,7 +7722,7 @@ export interface operations {
6967
7722
  default: components["responses"]["ProblemResponse"];
6968
7723
  };
6969
7724
  };
6970
- AdminVerificationClients: {
7725
+ AdminFeatureFlags: {
6971
7726
  parameters: {
6972
7727
  query?: never;
6973
7728
  header?: never;
@@ -6976,7 +7731,7 @@ export interface operations {
6976
7731
  };
6977
7732
  requestBody?: never;
6978
7733
  responses: {
6979
- /** @description Ok */
7734
+ /** @description Current feature flags */
6980
7735
  200: {
6981
7736
  headers: {
6982
7737
  [name: string]: unknown;
@@ -6984,7 +7739,7 @@ export interface operations {
6984
7739
  content: {
6985
7740
  "text/html": string;
6986
7741
  "application/json": {
6987
- items: components["schemas"]["VerificationClient"][];
7742
+ items: components["schemas"]["VerificationFeatureFlag"][];
6988
7743
  };
6989
7744
  };
6990
7745
  };
@@ -6992,7 +7747,7 @@ export interface operations {
6992
7747
  default: components["responses"]["ProblemResponse"];
6993
7748
  };
6994
7749
  };
6995
- CreateVerificationClient: {
7750
+ CreateFeatureFlag: {
6996
7751
  parameters: {
6997
7752
  query?: never;
6998
7753
  header?: never;
@@ -7001,97 +7756,125 @@ export interface operations {
7001
7756
  };
7002
7757
  requestBody: {
7003
7758
  content: {
7004
- "application/json": components["schemas"]["CreateVerificationClientRequest"];
7005
- "application/x-www-form-urlencoded": components["schemas"]["CreateVerificationClientRequest"];
7759
+ "application/json": components["schemas"]["CreateVerificationFeatureFlagRequest"];
7006
7760
  };
7007
7761
  };
7008
7762
  responses: {
7009
- /** @description Registered */
7763
+ /** @description Feature flag created */
7010
7764
  201: {
7011
7765
  headers: {
7012
7766
  [name: string]: unknown;
7013
7767
  };
7014
7768
  content: {
7015
- "application/json": components["schemas"]["VerificationClientWithToken"];
7769
+ "application/json": components["schemas"]["VerificationFeatureFlag"];
7016
7770
  };
7017
7771
  };
7772
+ 400: components["responses"]["ProblemResponse"];
7018
7773
  403: components["responses"]["ForbiddenResponse"];
7019
7774
  409: components["responses"]["ProblemResponse"];
7020
7775
  default: components["responses"]["ProblemResponse"];
7021
7776
  };
7022
7777
  };
7023
- IssueVerificationClientToken: {
7778
+ UpdateFeatureFlag: {
7024
7779
  parameters: {
7025
7780
  query?: never;
7026
7781
  header?: never;
7027
7782
  path: {
7028
- clientId: string;
7783
+ /** @description Stable feature flag key. */
7784
+ flagKey: components["parameters"]["FeatureFlagKey"];
7029
7785
  };
7030
7786
  cookie?: never;
7031
7787
  };
7032
- requestBody?: {
7788
+ requestBody: {
7033
7789
  content: {
7034
- "application/json": components["schemas"]["IssueVerificationClientTokenRequest"];
7035
- "application/x-www-form-urlencoded": components["schemas"]["IssueVerificationClientTokenRequest"];
7790
+ "application/json": components["schemas"]["UpdateVerificationFeatureFlagRequest"];
7036
7791
  };
7037
7792
  };
7038
7793
  responses: {
7039
- /** @description Issued */
7040
- 201: {
7794
+ /** @description New feature flag revision */
7795
+ 200: {
7041
7796
  headers: {
7042
7797
  [name: string]: unknown;
7043
7798
  };
7044
7799
  content: {
7045
- "application/json": components["schemas"]["VerificationClientWithToken"];
7800
+ "application/json": components["schemas"]["VerificationFeatureFlag"];
7046
7801
  };
7047
7802
  };
7803
+ 400: components["responses"]["ProblemResponse"];
7048
7804
  403: components["responses"]["ForbiddenResponse"];
7049
7805
  404: components["responses"]["ProblemResponse"];
7806
+ 409: components["responses"]["ProblemResponse"];
7050
7807
  default: components["responses"]["ProblemResponse"];
7051
7808
  };
7052
7809
  };
7053
- RevokeVerificationClientToken: {
7810
+ ListFeatureFlagRevisions: {
7054
7811
  parameters: {
7055
7812
  query?: never;
7056
7813
  header?: never;
7057
7814
  path: {
7058
- clientId: string;
7059
- tokenId: string;
7815
+ /** @description Stable feature flag key. */
7816
+ flagKey: components["parameters"]["FeatureFlagKey"];
7060
7817
  };
7061
7818
  cookie?: never;
7062
7819
  };
7063
7820
  requestBody?: never;
7064
7821
  responses: {
7065
- /** @description Revoked */
7066
- 204: {
7822
+ /** @description Revision history */
7823
+ 200: {
7067
7824
  headers: {
7068
7825
  [name: string]: unknown;
7069
7826
  };
7070
- content?: never;
7827
+ content: {
7828
+ "application/json": {
7829
+ items: components["schemas"]["VerificationFeatureFlagRevision"][];
7830
+ };
7831
+ };
7071
7832
  };
7072
7833
  403: components["responses"]["ForbiddenResponse"];
7073
- 404: components["responses"]["ProblemResponse"];
7074
7834
  default: components["responses"]["ProblemResponse"];
7075
7835
  };
7076
7836
  };
7077
- UpdateVerificationClient: {
7837
+ AdminVerificationClients: {
7078
7838
  parameters: {
7079
7839
  query?: never;
7080
7840
  header?: never;
7081
- path: {
7082
- clientId: string;
7841
+ path?: never;
7842
+ cookie?: never;
7843
+ };
7844
+ requestBody?: never;
7845
+ responses: {
7846
+ /** @description Ok */
7847
+ 200: {
7848
+ headers: {
7849
+ [name: string]: unknown;
7850
+ };
7851
+ content: {
7852
+ "text/html": string;
7853
+ "application/json": {
7854
+ items: components["schemas"]["VerificationClient"][];
7855
+ };
7856
+ };
7083
7857
  };
7858
+ 403: components["responses"]["ForbiddenResponse"];
7859
+ default: components["responses"]["ProblemResponse"];
7860
+ };
7861
+ };
7862
+ CreateVerificationClient: {
7863
+ parameters: {
7864
+ query?: never;
7865
+ header?: never;
7866
+ path?: never;
7084
7867
  cookie?: never;
7085
7868
  };
7086
7869
  requestBody: {
7087
7870
  content: {
7088
- "application/json": components["schemas"]["UpdateVerificationClientRequest"];
7089
- "application/x-www-form-urlencoded": components["schemas"]["UpdateVerificationClientRequest"];
7871
+ "application/json": components["schemas"]["CreateVerificationClientRequest"];
7872
+ "application/x-www-form-urlencoded": components["schemas"]["CreateVerificationClientRequest"];
7090
7873
  };
7091
7874
  };
7092
7875
  responses: {
7093
- /** @description Updated */
7094
- 200: {
7876
+ /** @description Registered */
7877
+ 201: {
7095
7878
  headers: {
7096
7879
  [name: string]: unknown;
7097
7880
  };
@@ -7100,11 +7883,11 @@ export interface operations {
7100
7883
  };
7101
7884
  };
7102
7885
  403: components["responses"]["ForbiddenResponse"];
7103
- 404: components["responses"]["ProblemResponse"];
7886
+ 409: components["responses"]["ProblemResponse"];
7104
7887
  default: components["responses"]["ProblemResponse"];
7105
7888
  };
7106
7889
  };
7107
- AddVerificationClientKey: {
7890
+ UpdateVerificationClient: {
7108
7891
  parameters: {
7109
7892
  query?: never;
7110
7893
  header?: never;
@@ -7115,13 +7898,13 @@ export interface operations {
7115
7898
  };
7116
7899
  requestBody: {
7117
7900
  content: {
7118
- "application/json": components["schemas"]["AddVerificationClientKeyRequest"];
7119
- "application/x-www-form-urlencoded": components["schemas"]["AddVerificationClientKeyRequest"];
7901
+ "application/json": components["schemas"]["UpdateVerificationClientRequest"];
7902
+ "application/x-www-form-urlencoded": components["schemas"]["UpdateVerificationClientRequest"];
7120
7903
  };
7121
7904
  };
7122
7905
  responses: {
7123
- /** @description Registered */
7124
- 201: {
7906
+ /** @description Updated */
7907
+ 200: {
7125
7908
  headers: {
7126
7909
  [name: string]: unknown;
7127
7910
  };
@@ -7131,39 +7914,85 @@ export interface operations {
7131
7914
  };
7132
7915
  403: components["responses"]["ForbiddenResponse"];
7133
7916
  404: components["responses"]["ProblemResponse"];
7134
- /** @description This key (ETH address) is already registered. */
7135
- 409: {
7917
+ default: components["responses"]["ProblemResponse"];
7918
+ };
7919
+ };
7920
+ AdminSiteBanners: {
7921
+ parameters: {
7922
+ query?: never;
7923
+ header?: never;
7924
+ path?: never;
7925
+ cookie?: never;
7926
+ };
7927
+ requestBody?: never;
7928
+ responses: {
7929
+ /** @description Current banner content, as raw admin-authored HTML */
7930
+ 200: {
7136
7931
  headers: {
7137
7932
  [name: string]: unknown;
7138
7933
  };
7139
7934
  content: {
7140
- "application/problem+json": components["schemas"]["Problem"];
7935
+ "text/html": string;
7936
+ "application/json": components["schemas"]["SiteBanners"];
7141
7937
  };
7142
7938
  };
7939
+ 403: components["responses"]["ForbiddenResponse"];
7143
7940
  default: components["responses"]["ProblemResponse"];
7144
7941
  };
7145
7942
  };
7146
- RevokeVerificationClientKey: {
7943
+ UpdateAnnouncementBar: {
7147
7944
  parameters: {
7148
7945
  query?: never;
7149
7946
  header?: never;
7150
- path: {
7151
- clientId: string;
7152
- keyId: string;
7947
+ path?: never;
7948
+ cookie?: never;
7949
+ };
7950
+ requestBody: {
7951
+ content: {
7952
+ "application/json": components["schemas"]["AnnouncementBar"];
7953
+ "application/x-www-form-urlencoded": components["schemas"]["AnnouncementBar"];
7954
+ };
7955
+ };
7956
+ responses: {
7957
+ /** @description Saved announcement bar, as raw admin-authored HTML */
7958
+ 200: {
7959
+ headers: {
7960
+ [name: string]: unknown;
7961
+ };
7962
+ content: {
7963
+ "application/json": components["schemas"]["AnnouncementBar"];
7964
+ };
7153
7965
  };
7966
+ 400: components["responses"]["ProblemResponse"];
7967
+ 403: components["responses"]["ForbiddenResponse"];
7968
+ default: components["responses"]["ProblemResponse"];
7969
+ };
7970
+ };
7971
+ UpdateScrollingBanner: {
7972
+ parameters: {
7973
+ query?: never;
7974
+ header?: never;
7975
+ path?: never;
7154
7976
  cookie?: never;
7155
7977
  };
7156
- requestBody?: never;
7978
+ requestBody: {
7979
+ content: {
7980
+ "application/json": components["schemas"]["ScrollingBanner"];
7981
+ "application/x-www-form-urlencoded": components["schemas"]["ScrollingBannerForm"];
7982
+ };
7983
+ };
7157
7984
  responses: {
7158
- /** @description Revoked */
7159
- 204: {
7985
+ /** @description Saved scrolling ticker, as raw admin-authored HTML */
7986
+ 200: {
7160
7987
  headers: {
7161
7988
  [name: string]: unknown;
7162
7989
  };
7163
- content?: never;
7990
+ content: {
7991
+ "application/json": components["schemas"]["ScrollingBanner"];
7992
+ };
7164
7993
  };
7994
+ 400: components["responses"]["ProblemResponse"];
7165
7995
  403: components["responses"]["ForbiddenResponse"];
7166
- 404: components["responses"]["ProblemResponse"];
7167
7996
  default: components["responses"]["ProblemResponse"];
7168
7997
  };
7169
7998
  };
@@ -7237,27 +8066,58 @@ export interface operations {
7237
8066
  default: components["responses"]["ProblemResponse"];
7238
8067
  };
7239
8068
  };
7240
- VerificationPage: {
8069
+ SharePage: {
7241
8070
  parameters: {
7242
8071
  query?: {
7243
- /** @description Exact `1` enables diagnostic mode for this launch. */
8072
+ /** @description Required for `builder`, `portals`, `verifier-app`, and `reclaim-browser-extension` (400 without it — each needs it to build a destination or a handoff payload). Optional and ignored for `inapp-sdk`/`zkfetch`'s static pages, which render even without one. */
8073
+ sessionId?: components["schemas"]["SessionID"];
8074
+ /** @description Verification URL contract version, always `2` on a link Builder generates. Accepted so the query string matches what every other Verification Client parses; only the `builder` redirect forwards it onward. */
8075
+ api?: "2";
8076
+ /** @description Backend-derived echo of the session's `diagnostics` field, carried through to the launched destination unchanged. See the same parameter on `VerificationPage`. */
7244
8077
  diag?: "1";
7245
- /** @description Internal marker added after the claimant accepts organization consent. */
7246
- consent?: "1";
7247
8078
  };
7248
8079
  header?: never;
7249
8080
  path: {
7250
- sessionId: components["schemas"]["SessionID"];
8081
+ client: "builder" | "portals" | "verifier-app" | "inapp-sdk" | "reclaim-browser-extension" | "zkfetch";
7251
8082
  };
7252
8083
  cookie?: never;
7253
8084
  };
7254
8085
  requestBody?: never;
7255
8086
  responses: {
7256
8087
  200: components["responses"]["HTMLResponse"];
8088
+ /** @description Redirect (`builder` to `/v/{sessionId}`, `portals` to the portal). */
8089
+ 302: {
8090
+ headers: {
8091
+ [name: string]: unknown;
8092
+ };
8093
+ content?: never;
8094
+ };
7257
8095
  default: components["responses"]["ProblemResponse"];
7258
8096
  };
7259
8097
  };
7260
- ReportClaimant: {
8098
+ VerificationPage: {
8099
+ parameters: {
8100
+ query?: {
8101
+ /** @description Verification URL contract version, always `2` on a link Builder generates. `/share/builder` forwards it here; the page itself ignores it. */
8102
+ api?: "2";
8103
+ /** @description Backend-derived echo of the session's `diagnostics` field (see CreateVerificationSessionRequest.diagnostics), present on `verificationUrl` for a diagnostic session. Builder reads `diagnostics` from the session, not this parameter, so setting it by hand on the address bar has no effect. */
8104
+ diag?: "1";
8105
+ /** @description Internal marker added after the claimant accepts organization consent. */
8106
+ consent?: "1";
8107
+ };
8108
+ header?: never;
8109
+ path: {
8110
+ sessionId: components["schemas"]["SessionID"];
8111
+ };
8112
+ cookie?: never;
8113
+ };
8114
+ requestBody?: never;
8115
+ responses: {
8116
+ 200: components["responses"]["HTMLResponse"];
8117
+ default: components["responses"]["ProblemResponse"];
8118
+ };
8119
+ };
8120
+ ReportClaimant: {
7261
8121
  parameters: {
7262
8122
  query?: never;
7263
8123
  header?: never;
@@ -7328,10 +8188,7 @@ export interface operations {
7328
8188
  };
7329
8189
  VerificationStatus: {
7330
8190
  parameters: {
7331
- query?: {
7332
- /** @description When set, the fragment is mirrored inside a dialog on the build page rather than being the end-user's own verification page — so the terminal message points at the dialog, not the window. */
7333
- embedded?: string;
7334
- };
8191
+ query?: never;
7335
8192
  header?: never;
7336
8193
  path: {
7337
8194
  sessionId: components["schemas"]["SessionID"];
@@ -7438,13 +8295,79 @@ export interface operations {
7438
8295
  [key: string]: unknown;
7439
8296
  }[];
7440
8297
  /** @description Trusted EIP-191 proof signer addresses. Consumers compare locally recovered proof signers with this registry. */
7441
- "x-reclaim-attestors"?: string[];
8298
+ "x-reclaim-attestors": string[];
8299
+ /** @description Trusted sha256 image digests for attestor containers. Server-side proof verification pins each attestor TEE attestation to this allowlist. */
8300
+ "x-reclaim-attestor-image-digests": string[];
7442
8301
  };
7443
8302
  };
7444
8303
  };
7445
8304
  default: components["responses"]["ProblemResponse"];
7446
8305
  };
7447
8306
  };
8307
+ AppleAppSiteAssociation: {
8308
+ parameters: {
8309
+ query?: never;
8310
+ header?: never;
8311
+ path?: never;
8312
+ cookie?: never;
8313
+ };
8314
+ requestBody?: never;
8315
+ responses: {
8316
+ /** @description Ok */
8317
+ 200: {
8318
+ headers: {
8319
+ [name: string]: unknown;
8320
+ };
8321
+ content: {
8322
+ "application/json": {
8323
+ applinks: {
8324
+ details: {
8325
+ appIDs: string[];
8326
+ components: {
8327
+ "/"?: string;
8328
+ "?"?: {
8329
+ [key: string]: string;
8330
+ };
8331
+ }[];
8332
+ }[];
8333
+ };
8334
+ appclips?: {
8335
+ apps?: string[];
8336
+ };
8337
+ };
8338
+ };
8339
+ };
8340
+ default: components["responses"]["ProblemResponse"];
8341
+ };
8342
+ };
8343
+ AssetLinksJson: {
8344
+ parameters: {
8345
+ query?: never;
8346
+ header?: never;
8347
+ path?: never;
8348
+ cookie?: never;
8349
+ };
8350
+ requestBody?: never;
8351
+ responses: {
8352
+ /** @description Ok */
8353
+ 200: {
8354
+ headers: {
8355
+ [name: string]: unknown;
8356
+ };
8357
+ content: {
8358
+ "application/json": {
8359
+ relation: string[];
8360
+ target: {
8361
+ namespace: string;
8362
+ package_name: string;
8363
+ sha256_cert_fingerprints: string[];
8364
+ };
8365
+ }[];
8366
+ };
8367
+ };
8368
+ default: components["responses"]["ProblemResponse"];
8369
+ };
8370
+ };
7448
8371
  OpenApiSpec: {
7449
8372
  parameters: {
7450
8373
  query?: never;
@@ -7707,8 +8630,12 @@ export interface operations {
7707
8630
  ListOrgs: {
7708
8631
  parameters: {
7709
8632
  query?: {
8633
+ /** @description Keeps organizations whose name or id (hyphens optional) contains this text. */
8634
+ q?: string;
7710
8635
  /** @description Opaque cursor returned as `nextPageCursor` on a prior response. Pass it back as-is to fetch the next page; omit on the first request. Clients must not parse, modify, or fabricate cursors — the server reserves the encoding. */
7711
8636
  cursor?: string;
8637
+ /** @description HTML only. Renders the New organization dialog already open, so a link from another page can land on it. */
8638
+ newOrg?: boolean;
7712
8639
  };
7713
8640
  header?: never;
7714
8641
  path?: never;
@@ -7817,7 +8744,27 @@ export interface operations {
7817
8744
  parameters: {
7818
8745
  query?: {
7819
8746
  /** @description Which section to show (server-rendered tab); unknown values fall back to the first. */
7820
- tab?: "connect" | "providers" | "members" | "themes" | "sessions" | "billing";
8747
+ tab?: "overview" | "connect" | "integrate" | "providers" | "members" | "themes" | "settings" | "sessions" | "billing";
8748
+ /** @description Integrate tab only. Which integration path to show: a coding agent over MCP, the client package, or plain HTTP. */
8749
+ track?: "agent" | "sdk" | "http";
8750
+ /** @description Integrate tab, agent track only. Which coding agent's install command to show. */
8751
+ agent?: "claude" | "cursor" | "opencode" | "codex" | "others";
8752
+ /** @description Dashboard tab only. Scopes the report to sessions that ran this provider. Options come from `GET /orgs/{orgId}/providers/used`. */
8753
+ providerId?: components["schemas"]["ProviderID"];
8754
+ /** @description Integrate tab, HTTP track only. Which Verification Client the create-session example targets. `auto` (the default) leaves `verificationClientUrl` out. */
8755
+ client?: "auto" | "portals" | "verifier-app" | "reclaim-browser-extension" | "builder" | "inapp-sdk";
8756
+ /** @description Dashboard tab only. Start of the reporting period; defaults to 30 days before `to`. */
8757
+ from?: components["schemas"]["DateWindowBound"];
8758
+ /** @description Dashboard tab only. End of the reporting period; defaults to now. */
8759
+ to?: components["schemas"]["DateWindowBound"];
8760
+ /** @description Dashboard tab only. Scopes the report to sessions created through this verification client. Hyphens are optional; an id that matches no client returns nothing. */
8761
+ verificationClientId?: components["schemas"]["VerificationClientIDFilter"];
8762
+ /** @description Providers tab only. Keeps providers whose title, domain, or id (hyphens optional) contains this text. */
8763
+ q?: string;
8764
+ /** @description Providers tab only. Keeps providers with this visibility. */
8765
+ visibility?: "PUBLIC" | "PRIVATE";
8766
+ /** @description Providers tab only. Renders the New provider dialog already open, so a link from another page can land on it. */
8767
+ newProvider?: boolean;
7821
8768
  /** @description Post-checkout status signal set by Stripe redirect (`success_url` / `cancel_url`), the card-save flow, and the credit top-up. Drives a one-shot notice and deep-links to the Billing tab; nothing else about the page depends on it. */
7822
8769
  billing?: "success" | "cancelled" | "changed" | "credits";
7823
8770
  };
@@ -8929,6 +9876,7 @@ export interface operations {
8929
9876
  };
8930
9877
  };
8931
9878
  403: components["responses"]["ForbiddenResponse"];
9879
+ 409: components["responses"]["ProblemResponse"];
8932
9880
  default: components["responses"]["ProblemResponse"];
8933
9881
  };
8934
9882
  };
@@ -9724,18 +10672,55 @@ export interface operations {
9724
10672
  default: components["responses"]["ProblemResponse"];
9725
10673
  };
9726
10674
  };
10675
+ ListOrgUsedProviders: {
10676
+ parameters: {
10677
+ query?: {
10678
+ /** @description Keeps providers whose name, domain, or id (hyphens optional) contains this text. */
10679
+ q?: string;
10680
+ /** @description Opaque cursor returned as `nextPageCursor` on a prior response. Pass it back as-is to fetch the next page; omit on the first request. Clients must not parse, modify, or fabricate cursors — the server reserves the encoding. */
10681
+ cursor?: string;
10682
+ /** @description Page size. Defaults to 50. */
10683
+ limit?: number;
10684
+ };
10685
+ header?: never;
10686
+ path: {
10687
+ orgId: components["schemas"]["OrgID"];
10688
+ };
10689
+ cookie?: never;
10690
+ };
10691
+ requestBody?: never;
10692
+ responses: {
10693
+ /** @description Ok */
10694
+ 200: {
10695
+ headers: {
10696
+ [name: string]: unknown;
10697
+ };
10698
+ content: {
10699
+ "application/json": {
10700
+ items: components["schemas"]["OrgUsedProvider"][];
10701
+ nextPageCursor?: string;
10702
+ };
10703
+ "text/html": components["schemas"]["HtmlContent"];
10704
+ };
10705
+ };
10706
+ 403: components["responses"]["ForbiddenResponse"];
10707
+ default: components["responses"]["ProblemResponse"];
10708
+ };
10709
+ };
9727
10710
  ListOrgVerificationSessions: {
9728
10711
  parameters: {
9729
10712
  query?: {
9730
- /** @description Only return sessions whose id starts with this value (matched at least 5 characters). */
10713
+ /** @description Only return sessions whose id starts with this value, ignoring hyphens and case. Ignored under 5 characters. A full id matches exactly. */
9731
10714
  sessionId?: string;
9732
- /** @description Only return sessions for this exact provider id. */
10715
+ /** @description Only return sessions for this exact provider id (hyphens optional) or slug. */
9733
10716
  providerId?: string;
10717
+ /** @description Only return sessions created through this verification client. Hyphens are optional; an id that matches no client returns nothing. */
10718
+ verificationClientId?: components["schemas"]["VerificationClientIDFilter"];
9734
10719
  /** @description Only return sessions in this status. */
9735
10720
  status?: components["schemas"]["VerificationStatus"];
9736
10721
  /** @description Only return sessions resolved to this exact provider version. */
9737
10722
  resolvedVersion?: string;
9738
- /** @description Only return the session matching this claimant client id. */
10723
+ /** @description Only return the session matching this claimant client id (hyphens optional). */
9739
10724
  claimantClientId?: string;
9740
10725
  /** @description Only return sessions created at or after this time (inclusive). */
9741
10726
  createdAfter?: string;
@@ -9771,7 +10756,10 @@ export interface operations {
9771
10756
  };
9772
10757
  GetOrgSession: {
9773
10758
  parameters: {
9774
- query?: never;
10759
+ query?: {
10760
+ /** @description Only list events from this stage of the run. */
10761
+ phase?: "session" | "client" | "auth" | "provider" | "claim" | "result";
10762
+ };
9775
10763
  header?: never;
9776
10764
  path: {
9777
10765
  orgId: components["schemas"]["OrgID"];
@@ -9787,6 +10775,30 @@ export interface operations {
9787
10775
  default: components["responses"]["ProblemResponse"];
9788
10776
  };
9789
10777
  };
10778
+ RetryOrgSessionCallback: {
10779
+ parameters: {
10780
+ query?: never;
10781
+ header?: never;
10782
+ path: {
10783
+ orgId: components["schemas"]["OrgID"];
10784
+ sessionId: components["schemas"]["SessionID"];
10785
+ };
10786
+ cookie?: never;
10787
+ };
10788
+ requestBody?: never;
10789
+ responses: {
10790
+ /** @description Deliveries re-enqueued; returns to the session page. */
10791
+ 202: {
10792
+ headers: {
10793
+ [name: string]: unknown;
10794
+ };
10795
+ content?: never;
10796
+ };
10797
+ 403: components["responses"]["ForbiddenResponse"];
10798
+ 404: components["responses"]["ProblemResponse"];
10799
+ default: components["responses"]["ProblemResponse"];
10800
+ };
10801
+ };
9790
10802
  GetVerificationFunnel: {
9791
10803
  parameters: {
9792
10804
  query: {
@@ -9819,6 +10831,38 @@ export interface operations {
9819
10831
  default: components["responses"]["ProblemResponse"];
9820
10832
  };
9821
10833
  };
10834
+ GetOrgVerificationAnalytics: {
10835
+ parameters: {
10836
+ query?: {
10837
+ from?: components["schemas"]["DateWindowBound"];
10838
+ to?: components["schemas"]["DateWindowBound"];
10839
+ /** @description Only count sessions that ran this provider. */
10840
+ providerId?: components["schemas"]["ProviderID"];
10841
+ /** @description Only count sessions created through this verification client. The zkFetch section is left out unless this is the zkfetch client. Hyphens are optional; an id that matches no client returns nothing. */
10842
+ verificationClientId?: components["schemas"]["VerificationClientIDFilter"];
10843
+ };
10844
+ header?: never;
10845
+ path: {
10846
+ orgId: components["schemas"]["OrgID"];
10847
+ };
10848
+ cookie?: never;
10849
+ };
10850
+ requestBody?: never;
10851
+ responses: {
10852
+ /** @description Verification analytics */
10853
+ 200: {
10854
+ headers: {
10855
+ [name: string]: unknown;
10856
+ };
10857
+ content: {
10858
+ "text/html": components["schemas"]["HtmlContent"];
10859
+ "application/json": components["schemas"]["VerificationAnalytics"];
10860
+ };
10861
+ };
10862
+ 403: components["responses"]["ForbiddenResponse"];
10863
+ default: components["responses"]["ProblemResponse"];
10864
+ };
10865
+ };
9822
10866
  CreateVerificationSession: {
9823
10867
  parameters: {
9824
10868
  query?: never;
@@ -9917,34 +10961,126 @@ export interface operations {
9917
10961
  responses: {
9918
10962
  /** @description Ok */
9919
10963
  200: {
10964
+ headers: {
10965
+ [name: string]: unknown;
10966
+ };
10967
+ content: {
10968
+ "application/json": components["schemas"]["VerificationRecipeList"];
10969
+ };
10970
+ };
10971
+ 404: components["responses"]["ProblemResponse"];
10972
+ default: components["responses"]["ProblemResponse"];
10973
+ };
10974
+ };
10975
+ BootstrapVerificationClient: {
10976
+ parameters: {
10977
+ query?: never;
10978
+ header?: never;
10979
+ path: {
10980
+ sessionId: components["schemas"]["SessionID"];
10981
+ };
10982
+ cookie?: never;
10983
+ };
10984
+ requestBody?: never;
10985
+ responses: {
10986
+ /** @description Session and resolved recipes */
10987
+ 200: {
10988
+ headers: {
10989
+ [name: string]: unknown;
10990
+ };
10991
+ content: {
10992
+ "application/json": components["schemas"]["VerificationClientBootstrap"];
10993
+ };
10994
+ };
10995
+ 404: components["responses"]["ProblemResponse"];
10996
+ default: components["responses"]["ProblemResponse"];
10997
+ };
10998
+ };
10999
+ ResolveVerificationRuntimeConfig: {
11000
+ parameters: {
11001
+ query?: never;
11002
+ header?: never;
11003
+ path: {
11004
+ sessionId: components["schemas"]["SessionID"];
11005
+ };
11006
+ cookie?: never;
11007
+ };
11008
+ requestBody: {
11009
+ content: {
11010
+ "application/json": components["schemas"]["ResolveVerificationRuntimeConfigRequest"];
11011
+ };
11012
+ };
11013
+ responses: {
11014
+ /** @description The session's feature configuration */
11015
+ 200: {
11016
+ headers: {
11017
+ [name: string]: unknown;
11018
+ };
11019
+ content: {
11020
+ "application/json": components["schemas"]["VerificationRuntimeConfig"];
11021
+ };
11022
+ };
11023
+ 403: components["responses"]["ProblemResponse"];
11024
+ 404: components["responses"]["ProblemResponse"];
11025
+ default: components["responses"]["ProblemResponse"];
11026
+ };
11027
+ };
11028
+ CreateVerificationAttestorAuth: {
11029
+ parameters: {
11030
+ query?: never;
11031
+ header?: never;
11032
+ path: {
11033
+ sessionId: components["schemas"]["SessionID"];
11034
+ };
11035
+ cookie?: never;
11036
+ };
11037
+ requestBody?: {
11038
+ content: {
11039
+ "application/json": Record<string, never>;
11040
+ };
11041
+ };
11042
+ responses: {
11043
+ /** @description Base64-encoded legacy attestor authorization, or empty */
11044
+ 200: {
11045
+ headers: {
11046
+ [name: string]: unknown;
11047
+ };
11048
+ content: {
11049
+ "text/plain": string;
11050
+ };
11051
+ };
11052
+ 404: components["responses"]["ProblemResponse"];
11053
+ default: components["responses"]["ProblemResponse"];
11054
+ };
11055
+ };
11056
+ SubmitVerificationClientResult: {
11057
+ parameters: {
11058
+ query?: never;
11059
+ header?: never;
11060
+ path: {
11061
+ sessionId: components["schemas"]["SessionID"];
11062
+ };
11063
+ cookie?: never;
11064
+ };
11065
+ requestBody: {
11066
+ content: {
11067
+ "application/json": components["schemas"]["SubmitVerificationClientResultRequest"];
11068
+ };
11069
+ };
11070
+ responses: {
11071
+ /** @description Result stored and callback deliveries enqueued */
11072
+ 202: {
9920
11073
  headers: {
9921
11074
  [name: string]: unknown;
9922
11075
  };
9923
11076
  content: {
9924
11077
  "application/json": {
9925
- /** @description One recipe per session provider, in run order. */
9926
- recipes: {
9927
- providerId: components["schemas"]["ProviderID"];
9928
- /** @description Display-only provider branding. Verification Clients can use it in claimant-facing UI; it does not affect recipe execution or proof verification. */
9929
- provider: components["schemas"]["VerificationBrand"];
9930
- resolvedVersion: string;
9931
- initialUrl: string;
9932
- /** @description Legacy-only preference. Builder-mode sessions run the structured recipe and do not enable AI or manual verification. Dual-mode clients may use this value only on their legacy path. */
9933
- preferAiAgent: boolean;
9934
- /** @description The version's webSettings geoLocation template (`{{DYNAMIC_GEO}}` / `{{DYNAMIC_GEO_SECRET}}` / '' / ISO code), applied to this provider's requests. */
9935
- geoLocation?: string;
9936
- /** @description The version's webSettings.jsUserScripts — page JavaScript the Verification Client installs to run before every page load (before navigating to initialUrl), to drive login/navigation so the target requests fire. */
9937
- jsUserScripts?: string;
9938
- /** @description Browser client options from the resolved provider version. Verification Clients apply these options before opening the provider. */
9939
- clientOptions?: components["schemas"]["ClientOptions"];
9940
- requests: components["schemas"]["RequestSelection"][];
9941
- /** @description The version's allowedJsRequests — request-selection templates (with optional templateParams expansion) for requests fired by injected JS, which the Verification Client may additionally prove. */
9942
- allowedJsRequests?: components["schemas"]["RequestSelectionTemplate"][];
9943
- }[];
11078
+ deliveries: number;
9944
11079
  };
9945
11080
  };
9946
11081
  };
9947
- 404: components["responses"]["ProblemResponse"];
11082
+ 400: components["responses"]["ProblemResponse"];
11083
+ 409: components["responses"]["ProblemResponse"];
9948
11084
  default: components["responses"]["ProblemResponse"];
9949
11085
  };
9950
11086
  };
@@ -10111,41 +11247,6 @@ export interface operations {
10111
11247
  default: components["responses"]["ProblemResponse"];
10112
11248
  };
10113
11249
  };
10114
- ListSessionCallbackKeys: {
10115
- parameters: {
10116
- query?: never;
10117
- header?: never;
10118
- path: {
10119
- sessionId: components["schemas"]["SessionID"];
10120
- };
10121
- cookie?: never;
10122
- };
10123
- requestBody?: never;
10124
- responses: {
10125
- /** @description Ok */
10126
- 200: {
10127
- headers: {
10128
- [name: string]: unknown;
10129
- };
10130
- content: {
10131
- "application/json": {
10132
- items: components["schemas"]["CallbackKey"][];
10133
- };
10134
- };
10135
- };
10136
- 404: components["responses"]["ProblemResponse"];
10137
- /** @description No subscription on the session's organization matches the terminal event — the result would be encrypted for zero keys and therefore undeliverable (for example, the org deleted its last matching subscription mid-verification). Re-register a subscription and retry. */
10138
- 409: {
10139
- headers: {
10140
- [name: string]: unknown;
10141
- };
10142
- content: {
10143
- "application/problem+json": components["schemas"]["Problem"];
10144
- };
10145
- };
10146
- default: components["responses"]["ProblemResponse"];
10147
- };
10148
- };
10149
11250
  GetVerificationResult: {
10150
11251
  parameters: {
10151
11252
  query?: never;
@@ -10180,37 +11281,6 @@ export interface operations {
10180
11281
  default: components["responses"]["ProblemResponse"];
10181
11282
  };
10182
11283
  };
10183
- SubmitVerificationResult: {
10184
- parameters: {
10185
- query?: never;
10186
- header?: never;
10187
- path: {
10188
- sessionId: components["schemas"]["SessionID"];
10189
- };
10190
- cookie?: never;
10191
- };
10192
- requestBody: {
10193
- content: {
10194
- "application/json": components["schemas"]["SubmitVerificationResultRequest"];
10195
- };
10196
- };
10197
- responses: {
10198
- /** @description Result stored and deliveries enqueued. */
10199
- 202: {
10200
- headers: {
10201
- [name: string]: unknown;
10202
- };
10203
- content: {
10204
- "application/json": {
10205
- /** @description Number of deliveries stored and enqueued. Submitted targets whose subscription no longer matches the session's org + terminal event are skipped, so this may be less than the number of items submitted. */
10206
- deliveries: number;
10207
- };
10208
- };
10209
- };
10210
- 404: components["responses"]["ProblemResponse"];
10211
- default: components["responses"]["ProblemResponse"];
10212
- };
10213
- };
10214
11284
  RetryVerificationCallback: {
10215
11285
  parameters: {
10216
11286
  query?: never;
@@ -10280,4 +11350,47 @@ export interface operations {
10280
11350
  default: components["responses"]["ProblemResponse"];
10281
11351
  };
10282
11352
  };
11353
+ CreateFetchAuthorization: {
11354
+ parameters: {
11355
+ query?: never;
11356
+ header?: never;
11357
+ path?: never;
11358
+ cookie?: never;
11359
+ };
11360
+ requestBody: {
11361
+ content: {
11362
+ "application/json": components["schemas"]["FetchAuthorizationRequest"];
11363
+ };
11364
+ };
11365
+ responses: {
11366
+ /** @description Attestor authorization minted. */
11367
+ 200: {
11368
+ headers: {
11369
+ [name: string]: unknown;
11370
+ };
11371
+ content: {
11372
+ "application/json": components["schemas"]["FetchAuthorization"];
11373
+ };
11374
+ };
11375
+ /** @description Overage paused — the organization is past its plan's `ZKFETCH` allowance, its prepaid credit balance is exhausted, and its per-pool credit-exhaustion allowance is depleted. Requests within the plan allowance still succeed; add credits to resume overage. */
11376
+ 402: {
11377
+ headers: {
11378
+ [name: string]: unknown;
11379
+ };
11380
+ content: {
11381
+ "application/problem+json": components["schemas"]["Problem"];
11382
+ };
11383
+ };
11384
+ /** @description ZKFETCH quota exceeded for the current billing period. */
11385
+ 429: {
11386
+ headers: {
11387
+ [name: string]: unknown;
11388
+ };
11389
+ content: {
11390
+ "application/problem+json": components["schemas"]["Problem"];
11391
+ };
11392
+ };
11393
+ default: components["responses"]["ProblemResponse"];
11394
+ };
11395
+ };
10283
11396
  }