@ixo/decision-oracle 0.0.0-stage → 0.2.0

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 (1117) hide show
  1. package/README.md +794 -2
  2. package/dist/act.d.ts +87 -0
  3. package/dist/act.d.ts.map +1 -0
  4. package/dist/act.js +20 -0
  5. package/dist/act.js.map +1 -0
  6. package/dist/app.d.ts +22 -0
  7. package/dist/app.d.ts.map +1 -0
  8. package/dist/app.js +128 -0
  9. package/dist/app.js.map +1 -0
  10. package/dist/c2pa.wasm +0 -0
  11. package/dist/cli/commands/api.d.ts +50 -0
  12. package/dist/cli/commands/api.d.ts.map +1 -0
  13. package/dist/cli/commands/api.js +737 -0
  14. package/dist/cli/commands/api.js.map +1 -0
  15. package/dist/cli/commands/create-collection.d.ts +40 -0
  16. package/dist/cli/commands/create-collection.d.ts.map +1 -0
  17. package/dist/cli/commands/create-collection.js +318 -0
  18. package/dist/cli/commands/create-collection.js.map +1 -0
  19. package/dist/cli/commands/create-deed.d.ts +31 -0
  20. package/dist/cli/commands/create-deed.d.ts.map +1 -0
  21. package/dist/cli/commands/create-deed.js +208 -0
  22. package/dist/cli/commands/create-deed.js.map +1 -0
  23. package/dist/cli/commands/delegation.d.ts +26 -0
  24. package/dist/cli/commands/delegation.d.ts.map +1 -0
  25. package/dist/cli/commands/delegation.js +162 -0
  26. package/dist/cli/commands/delegation.js.map +1 -0
  27. package/dist/cli/commands/derive.d.ts +22 -0
  28. package/dist/cli/commands/derive.d.ts.map +1 -0
  29. package/dist/cli/commands/derive.js +53 -0
  30. package/dist/cli/commands/derive.js.map +1 -0
  31. package/dist/cli/commands/engine.d.ts +25 -0
  32. package/dist/cli/commands/engine.d.ts.map +1 -0
  33. package/dist/cli/commands/engine.js +107 -0
  34. package/dist/cli/commands/engine.js.map +1 -0
  35. package/dist/cli/commands/erase.d.ts +17 -0
  36. package/dist/cli/commands/erase.d.ts.map +1 -0
  37. package/dist/cli/commands/erase.js +117 -0
  38. package/dist/cli/commands/erase.js.map +1 -0
  39. package/dist/cli/commands/facts-run.d.ts +30 -0
  40. package/dist/cli/commands/facts-run.d.ts.map +1 -0
  41. package/dist/cli/commands/facts-run.js +409 -0
  42. package/dist/cli/commands/facts-run.js.map +1 -0
  43. package/dist/cli/commands/facts-scaffold.d.ts +22 -0
  44. package/dist/cli/commands/facts-scaffold.d.ts.map +1 -0
  45. package/dist/cli/commands/facts-scaffold.js +208 -0
  46. package/dist/cli/commands/facts-scaffold.js.map +1 -0
  47. package/dist/cli/commands/init.d.ts +18 -0
  48. package/dist/cli/commands/init.d.ts.map +1 -0
  49. package/dist/cli/commands/init.js +34 -0
  50. package/dist/cli/commands/init.js.map +1 -0
  51. package/dist/cli/commands/login.d.ts +9 -0
  52. package/dist/cli/commands/login.d.ts.map +1 -0
  53. package/dist/cli/commands/login.js +16 -0
  54. package/dist/cli/commands/login.js.map +1 -0
  55. package/dist/cli/commands/logout.d.ts +10 -0
  56. package/dist/cli/commands/logout.d.ts.map +1 -0
  57. package/dist/cli/commands/logout.js +28 -0
  58. package/dist/cli/commands/logout.js.map +1 -0
  59. package/dist/cli/commands/manifest.d.ts +12 -0
  60. package/dist/cli/commands/manifest.d.ts.map +1 -0
  61. package/dist/cli/commands/manifest.js +48 -0
  62. package/dist/cli/commands/manifest.js.map +1 -0
  63. package/dist/cli/commands/oracle-init.d.ts +48 -0
  64. package/dist/cli/commands/oracle-init.d.ts.map +1 -0
  65. package/dist/cli/commands/oracle-init.js +1122 -0
  66. package/dist/cli/commands/oracle-init.js.map +1 -0
  67. package/dist/cli/commands/org.d.ts +28 -0
  68. package/dist/cli/commands/org.d.ts.map +1 -0
  69. package/dist/cli/commands/org.js +309 -0
  70. package/dist/cli/commands/org.js.map +1 -0
  71. package/dist/cli/commands/protocol-review.d.ts +20 -0
  72. package/dist/cli/commands/protocol-review.d.ts.map +1 -0
  73. package/dist/cli/commands/protocol-review.js +162 -0
  74. package/dist/cli/commands/protocol-review.js.map +1 -0
  75. package/dist/cli/commands/publish-protocol.d.ts +43 -0
  76. package/dist/cli/commands/publish-protocol.d.ts.map +1 -0
  77. package/dist/cli/commands/publish-protocol.js +345 -0
  78. package/dist/cli/commands/publish-protocol.js.map +1 -0
  79. package/dist/cli/commands/register.d.ts +16 -0
  80. package/dist/cli/commands/register.d.ts.map +1 -0
  81. package/dist/cli/commands/register.js +54 -0
  82. package/dist/cli/commands/register.js.map +1 -0
  83. package/dist/cli/commands/relink.d.ts +11 -0
  84. package/dist/cli/commands/relink.d.ts.map +1 -0
  85. package/dist/cli/commands/relink.js +36 -0
  86. package/dist/cli/commands/relink.js.map +1 -0
  87. package/dist/cli/commands/rubric-fetch-form.d.ts +16 -0
  88. package/dist/cli/commands/rubric-fetch-form.d.ts.map +1 -0
  89. package/dist/cli/commands/rubric-fetch-form.js +83 -0
  90. package/dist/cli/commands/rubric-fetch-form.js.map +1 -0
  91. package/dist/cli/commands/rubric-validate.d.ts +72 -0
  92. package/dist/cli/commands/rubric-validate.d.ts.map +1 -0
  93. package/dist/cli/commands/rubric-validate.js +163 -0
  94. package/dist/cli/commands/rubric-validate.js.map +1 -0
  95. package/dist/cli/commands/scan.d.ts +13 -0
  96. package/dist/cli/commands/scan.d.ts.map +1 -0
  97. package/dist/cli/commands/scan.js +39 -0
  98. package/dist/cli/commands/scan.js.map +1 -0
  99. package/dist/cli/commands/skills.d.ts +11 -0
  100. package/dist/cli/commands/skills.d.ts.map +1 -0
  101. package/dist/cli/commands/skills.js +19 -0
  102. package/dist/cli/commands/skills.js.map +1 -0
  103. package/dist/cli/commands/submit-claim.d.ts +25 -0
  104. package/dist/cli/commands/submit-claim.d.ts.map +1 -0
  105. package/dist/cli/commands/submit-claim.js +155 -0
  106. package/dist/cli/commands/submit-claim.js.map +1 -0
  107. package/dist/cli/index.d.ts +15 -0
  108. package/dist/cli/index.d.ts.map +1 -0
  109. package/dist/cli/index.js +206 -0
  110. package/dist/cli/index.js.map +1 -0
  111. package/dist/cli/lib/agent-card-schema.d.ts +8 -0
  112. package/dist/cli/lib/agent-card-schema.d.ts.map +1 -0
  113. package/dist/cli/lib/agent-card-schema.js +169 -0
  114. package/dist/cli/lib/agent-card-schema.js.map +1 -0
  115. package/dist/cli/lib/ai-rest.d.ts +12 -0
  116. package/dist/cli/lib/ai-rest.d.ts.map +1 -0
  117. package/dist/cli/lib/ai-rest.js +36 -0
  118. package/dist/cli/lib/ai-rest.js.map +1 -0
  119. package/dist/cli/lib/args.d.ts +33 -0
  120. package/dist/cli/lib/args.d.ts.map +1 -0
  121. package/dist/cli/lib/args.js +24 -0
  122. package/dist/cli/lib/args.js.map +1 -0
  123. package/dist/cli/lib/authhub.d.ts +7 -0
  124. package/dist/cli/lib/authhub.d.ts.map +1 -0
  125. package/dist/cli/lib/authhub.js +210 -0
  126. package/dist/cli/lib/authhub.js.map +1 -0
  127. package/dist/cli/lib/chain.d.ts +264 -0
  128. package/dist/cli/lib/chain.d.ts.map +1 -0
  129. package/dist/cli/lib/chain.js +584 -0
  130. package/dist/cli/lib/chain.js.map +1 -0
  131. package/dist/cli/lib/devvars.d.ts +59 -0
  132. package/dist/cli/lib/devvars.d.ts.map +1 -0
  133. package/dist/cli/lib/devvars.js +206 -0
  134. package/dist/cli/lib/devvars.js.map +1 -0
  135. package/dist/cli/lib/engine.d.ts +54 -0
  136. package/dist/cli/lib/engine.d.ts.map +1 -0
  137. package/dist/cli/lib/engine.js +112 -0
  138. package/dist/cli/lib/engine.js.map +1 -0
  139. package/dist/cli/lib/identity-cards.d.ts +188 -0
  140. package/dist/cli/lib/identity-cards.d.ts.map +1 -0
  141. package/dist/cli/lib/identity-cards.js +261 -0
  142. package/dist/cli/lib/identity-cards.js.map +1 -0
  143. package/dist/cli/lib/matrix-account.d.ts +79 -0
  144. package/dist/cli/lib/matrix-account.d.ts.map +1 -0
  145. package/dist/cli/lib/matrix-account.js +228 -0
  146. package/dist/cli/lib/matrix-account.js.map +1 -0
  147. package/dist/cli/lib/oracle-account.d.ts +108 -0
  148. package/dist/cli/lib/oracle-account.d.ts.map +1 -0
  149. package/dist/cli/lib/oracle-account.js +207 -0
  150. package/dist/cli/lib/oracle-account.js.map +1 -0
  151. package/dist/cli/lib/project.d.ts +22 -0
  152. package/dist/cli/lib/project.d.ts.map +1 -0
  153. package/dist/cli/lib/project.js +62 -0
  154. package/dist/cli/lib/project.js.map +1 -0
  155. package/dist/cli/lib/session.d.ts +109 -0
  156. package/dist/cli/lib/session.d.ts.map +1 -0
  157. package/dist/cli/lib/session.js +354 -0
  158. package/dist/cli/lib/session.js.map +1 -0
  159. package/dist/cli/lib/workorder.d.ts +57 -0
  160. package/dist/cli/lib/workorder.d.ts.map +1 -0
  161. package/dist/cli/lib/workorder.js +101 -0
  162. package/dist/cli/lib/workorder.js.map +1 -0
  163. package/dist/config.d.ts +221 -0
  164. package/dist/config.d.ts.map +1 -0
  165. package/dist/config.js +431 -0
  166. package/dist/config.js.map +1 -0
  167. package/dist/context.d.ts +88 -0
  168. package/dist/context.d.ts.map +1 -0
  169. package/dist/context.js +9 -0
  170. package/dist/context.js.map +1 -0
  171. package/dist/contracts/api.d.ts +3367 -0
  172. package/dist/contracts/api.d.ts.map +1 -0
  173. package/dist/contracts/api.js +1303 -0
  174. package/dist/contracts/api.js.map +1 -0
  175. package/dist/contracts/capabilities.d.ts +126 -0
  176. package/dist/contracts/capabilities.d.ts.map +1 -0
  177. package/dist/contracts/capabilities.js +164 -0
  178. package/dist/contracts/capabilities.js.map +1 -0
  179. package/dist/contracts/claim-source.d.ts +98 -0
  180. package/dist/contracts/claim-source.d.ts.map +1 -0
  181. package/dist/contracts/claim-source.js +17 -0
  182. package/dist/contracts/claim-source.js.map +1 -0
  183. package/dist/contracts/errors.d.ts +150 -0
  184. package/dist/contracts/errors.d.ts.map +1 -0
  185. package/dist/contracts/errors.js +121 -0
  186. package/dist/contracts/errors.js.map +1 -0
  187. package/dist/contracts/index.d.ts +15 -0
  188. package/dist/contracts/index.d.ts.map +1 -0
  189. package/dist/contracts/index.js +11 -0
  190. package/dist/contracts/index.js.map +1 -0
  191. package/dist/contracts/payment-gate.d.ts +129 -0
  192. package/dist/contracts/payment-gate.d.ts.map +1 -0
  193. package/dist/contracts/payment-gate.js +24 -0
  194. package/dist/contracts/payment-gate.js.map +1 -0
  195. package/dist/contracts/start-api-claim.d.ts +90 -0
  196. package/dist/contracts/start-api-claim.d.ts.map +1 -0
  197. package/dist/contracts/start-api-claim.js +22 -0
  198. package/dist/contracts/start-api-claim.js.map +1 -0
  199. package/dist/contracts/webhooks.d.ts +1487 -0
  200. package/dist/contracts/webhooks.d.ts.map +1 -0
  201. package/dist/contracts/webhooks.js +71 -0
  202. package/dist/contracts/webhooks.js.map +1 -0
  203. package/dist/contracts/work-order.d.ts +29 -0
  204. package/dist/contracts/work-order.d.ts.map +1 -0
  205. package/dist/contracts/work-order.js +12 -0
  206. package/dist/contracts/work-order.js.map +1 -0
  207. package/dist/cron/ai-cost.d.ts +29 -0
  208. package/dist/cron/ai-cost.d.ts.map +1 -0
  209. package/dist/cron/ai-cost.js +80 -0
  210. package/dist/cron/ai-cost.js.map +1 -0
  211. package/dist/cron/api-lane.d.ts +39 -0
  212. package/dist/cron/api-lane.d.ts.map +1 -0
  213. package/dist/cron/api-lane.js +203 -0
  214. package/dist/cron/api-lane.js.map +1 -0
  215. package/dist/cron/backlog.d.ts +50 -0
  216. package/dist/cron/backlog.d.ts.map +1 -0
  217. package/dist/cron/backlog.js +115 -0
  218. package/dist/cron/backlog.js.map +1 -0
  219. package/dist/cron/billing.d.ts +11 -0
  220. package/dist/cron/billing.d.ts.map +1 -0
  221. package/dist/cron/billing.js +69 -0
  222. package/dist/cron/billing.js.map +1 -0
  223. package/dist/cron/collection.d.ts +50 -0
  224. package/dist/cron/collection.d.ts.map +1 -0
  225. package/dist/cron/collection.js +118 -0
  226. package/dist/cron/collection.js.map +1 -0
  227. package/dist/cron/funding.d.ts +16 -0
  228. package/dist/cron/funding.d.ts.map +1 -0
  229. package/dist/cron/funding.js +262 -0
  230. package/dist/cron/funding.js.map +1 -0
  231. package/dist/cron/payer-billing.d.ts +38 -0
  232. package/dist/cron/payer-billing.d.ts.map +1 -0
  233. package/dist/cron/payer-billing.js +119 -0
  234. package/dist/cron/payer-billing.js.map +1 -0
  235. package/dist/cron/scan.d.ts +43 -0
  236. package/dist/cron/scan.d.ts.map +1 -0
  237. package/dist/cron/scan.js +250 -0
  238. package/dist/cron/scan.js.map +1 -0
  239. package/dist/db/client.d.ts +14 -0
  240. package/dist/db/client.d.ts.map +1 -0
  241. package/dist/db/client.js +14 -0
  242. package/dist/db/client.js.map +1 -0
  243. package/dist/db/index.d.ts +7 -0
  244. package/dist/db/index.d.ts.map +1 -0
  245. package/dist/db/index.js +7 -0
  246. package/dist/db/index.js.map +1 -0
  247. package/dist/db/schema.d.ts +6738 -0
  248. package/dist/db/schema.d.ts.map +1 -0
  249. package/dist/db/schema.js +1433 -0
  250. package/dist/db/schema.js.map +1 -0
  251. package/dist/define-oracle.d.ts +32 -0
  252. package/dist/define-oracle.d.ts.map +1 -0
  253. package/dist/define-oracle.js +80 -0
  254. package/dist/define-oracle.js.map +1 -0
  255. package/dist/dev-oracle.d.ts +9 -0
  256. package/dist/dev-oracle.d.ts.map +1 -0
  257. package/dist/dev-oracle.js +19 -0
  258. package/dist/dev-oracle.js.map +1 -0
  259. package/dist/dev-worker.d.ts +10 -0
  260. package/dist/dev-worker.d.ts.map +1 -0
  261. package/dist/dev-worker.js +12 -0
  262. package/dist/dev-worker.js.map +1 -0
  263. package/dist/env.d.ts +146 -0
  264. package/dist/env.d.ts.map +1 -0
  265. package/dist/env.js +10 -0
  266. package/dist/env.js.map +1 -0
  267. package/dist/facts/exif.d.ts +43 -0
  268. package/dist/facts/exif.d.ts.map +1 -0
  269. package/dist/facts/exif.js +224 -0
  270. package/dist/facts/exif.js.map +1 -0
  271. package/dist/facts/fact.d.ts +62 -0
  272. package/dist/facts/fact.d.ts.map +1 -0
  273. package/dist/facts/fact.js +105 -0
  274. package/dist/facts/fact.js.map +1 -0
  275. package/dist/facts/geo.d.ts +55 -0
  276. package/dist/facts/geo.d.ts.map +1 -0
  277. package/dist/facts/geo.js +267 -0
  278. package/dist/facts/geo.js.map +1 -0
  279. package/dist/facts/index.d.ts +31 -0
  280. package/dist/facts/index.d.ts.map +1 -0
  281. package/dist/facts/index.js +27 -0
  282. package/dist/facts/index.js.map +1 -0
  283. package/dist/facts/linked-doc.d.ts +60 -0
  284. package/dist/facts/linked-doc.d.ts.map +1 -0
  285. package/dist/facts/linked-doc.js +101 -0
  286. package/dist/facts/linked-doc.js.map +1 -0
  287. package/dist/facts/types.d.ts +278 -0
  288. package/dist/facts/types.d.ts.map +1 -0
  289. package/dist/facts/types.js +19 -0
  290. package/dist/facts/types.js.map +1 -0
  291. package/dist/index.d.ts +25 -0
  292. package/dist/index.d.ts.map +1 -0
  293. package/dist/index.js +19 -0
  294. package/dist/index.js.map +1 -0
  295. package/dist/lib/api-lane/accept.d.ts +29 -0
  296. package/dist/lib/api-lane/accept.d.ts.map +1 -0
  297. package/dist/lib/api-lane/accept.js +218 -0
  298. package/dist/lib/api-lane/accept.js.map +1 -0
  299. package/dist/lib/api-lane/claim-list.d.ts +44 -0
  300. package/dist/lib/api-lane/claim-list.d.ts.map +1 -0
  301. package/dist/lib/api-lane/claim-list.js +92 -0
  302. package/dist/lib/api-lane/claim-list.js.map +1 -0
  303. package/dist/lib/api-lane/company.d.ts +56 -0
  304. package/dist/lib/api-lane/company.d.ts.map +1 -0
  305. package/dist/lib/api-lane/company.js +103 -0
  306. package/dist/lib/api-lane/company.js.map +1 -0
  307. package/dist/lib/api-lane/events.d.ts +21 -0
  308. package/dist/lib/api-lane/events.d.ts.map +1 -0
  309. package/dist/lib/api-lane/events.js +111 -0
  310. package/dist/lib/api-lane/events.js.map +1 -0
  311. package/dist/lib/api-lane/ids.d.ts +39 -0
  312. package/dist/lib/api-lane/ids.d.ts.map +1 -0
  313. package/dist/lib/api-lane/ids.js +78 -0
  314. package/dist/lib/api-lane/ids.js.map +1 -0
  315. package/dist/lib/api-lane/index.d.ts +16 -0
  316. package/dist/lib/api-lane/index.d.ts.map +1 -0
  317. package/dist/lib/api-lane/index.js +16 -0
  318. package/dist/lib/api-lane/index.js.map +1 -0
  319. package/dist/lib/api-lane/linked.d.ts +264 -0
  320. package/dist/lib/api-lane/linked.d.ts.map +1 -0
  321. package/dist/lib/api-lane/linked.js +272 -0
  322. package/dist/lib/api-lane/linked.js.map +1 -0
  323. package/dist/lib/api-lane/media-type.d.ts +15 -0
  324. package/dist/lib/api-lane/media-type.d.ts.map +1 -0
  325. package/dist/lib/api-lane/media-type.js +73 -0
  326. package/dist/lib/api-lane/media-type.js.map +1 -0
  327. package/dist/lib/api-lane/member-emails.d.ts +83 -0
  328. package/dist/lib/api-lane/member-emails.d.ts.map +1 -0
  329. package/dist/lib/api-lane/member-emails.js +213 -0
  330. package/dist/lib/api-lane/member-emails.js.map +1 -0
  331. package/dist/lib/api-lane/members.d.ts +42 -0
  332. package/dist/lib/api-lane/members.d.ts.map +1 -0
  333. package/dist/lib/api-lane/members.js +75 -0
  334. package/dist/lib/api-lane/members.js.map +1 -0
  335. package/dist/lib/api-lane/notify.d.ts +47 -0
  336. package/dist/lib/api-lane/notify.d.ts.map +1 -0
  337. package/dist/lib/api-lane/notify.js +240 -0
  338. package/dist/lib/api-lane/notify.js.map +1 -0
  339. package/dist/lib/api-lane/pause.d.ts +41 -0
  340. package/dist/lib/api-lane/pause.d.ts.map +1 -0
  341. package/dist/lib/api-lane/pause.js +155 -0
  342. package/dist/lib/api-lane/pause.js.map +1 -0
  343. package/dist/lib/api-lane/record.d.ts +76 -0
  344. package/dist/lib/api-lane/record.d.ts.map +1 -0
  345. package/dist/lib/api-lane/record.js +337 -0
  346. package/dist/lib/api-lane/record.js.map +1 -0
  347. package/dist/lib/api-lane/retention.d.ts +43 -0
  348. package/dist/lib/api-lane/retention.d.ts.map +1 -0
  349. package/dist/lib/api-lane/retention.js +176 -0
  350. package/dist/lib/api-lane/retention.js.map +1 -0
  351. package/dist/lib/api-lane/review.d.ts +76 -0
  352. package/dist/lib/api-lane/review.d.ts.map +1 -0
  353. package/dist/lib/api-lane/review.js +355 -0
  354. package/dist/lib/api-lane/review.js.map +1 -0
  355. package/dist/lib/api-lane/reviewers.d.ts +109 -0
  356. package/dist/lib/api-lane/reviewers.d.ts.map +1 -0
  357. package/dist/lib/api-lane/reviewers.js +755 -0
  358. package/dist/lib/api-lane/reviewers.js.map +1 -0
  359. package/dist/lib/api-lane/source-delete.d.ts +16 -0
  360. package/dist/lib/api-lane/source-delete.d.ts.map +1 -0
  361. package/dist/lib/api-lane/source-delete.js +50 -0
  362. package/dist/lib/api-lane/source-delete.js.map +1 -0
  363. package/dist/lib/api-lane/source.d.ts +19 -0
  364. package/dist/lib/api-lane/source.d.ts.map +1 -0
  365. package/dist/lib/api-lane/source.js +226 -0
  366. package/dist/lib/api-lane/source.js.map +1 -0
  367. package/dist/lib/api-lane/submitter.d.ts +22 -0
  368. package/dist/lib/api-lane/submitter.d.ts.map +1 -0
  369. package/dist/lib/api-lane/submitter.js +34 -0
  370. package/dist/lib/api-lane/submitter.js.map +1 -0
  371. package/dist/lib/api-lane/timeline.d.ts +20 -0
  372. package/dist/lib/api-lane/timeline.d.ts.map +1 -0
  373. package/dist/lib/api-lane/timeline.js +23 -0
  374. package/dist/lib/api-lane/timeline.js.map +1 -0
  375. package/dist/lib/api-lane/webhook-crypto.d.ts +44 -0
  376. package/dist/lib/api-lane/webhook-crypto.d.ts.map +1 -0
  377. package/dist/lib/api-lane/webhook-crypto.js +103 -0
  378. package/dist/lib/api-lane/webhook-crypto.js.map +1 -0
  379. package/dist/lib/api-lane/webhooks.d.ts +117 -0
  380. package/dist/lib/api-lane/webhooks.d.ts.map +1 -0
  381. package/dist/lib/api-lane/webhooks.js +503 -0
  382. package/dist/lib/api-lane/webhooks.js.map +1 -0
  383. package/dist/lib/archive.d.ts +64 -0
  384. package/dist/lib/archive.d.ts.map +1 -0
  385. package/dist/lib/archive.js +305 -0
  386. package/dist/lib/archive.js.map +1 -0
  387. package/dist/lib/bech32.d.ts +8 -0
  388. package/dist/lib/bech32.d.ts.map +1 -0
  389. package/dist/lib/bech32.js +39 -0
  390. package/dist/lib/bech32.js.map +1 -0
  391. package/dist/lib/claim-erase.d.ts +22 -0
  392. package/dist/lib/claim-erase.d.ts.map +1 -0
  393. package/dist/lib/claim-erase.js +44 -0
  394. package/dist/lib/claim-erase.js.map +1 -0
  395. package/dist/lib/cursor.d.ts +11 -0
  396. package/dist/lib/cursor.d.ts.map +1 -0
  397. package/dist/lib/cursor.js +20 -0
  398. package/dist/lib/cursor.js.map +1 -0
  399. package/dist/lib/email/send.d.ts +43 -0
  400. package/dist/lib/email/send.d.ts.map +1 -0
  401. package/dist/lib/email/send.js +71 -0
  402. package/dist/lib/email/send.js.map +1 -0
  403. package/dist/lib/email/template.d.ts +217 -0
  404. package/dist/lib/email/template.d.ts.map +1 -0
  405. package/dist/lib/email/template.js +713 -0
  406. package/dist/lib/email/template.js.map +1 -0
  407. package/dist/lib/engine/adr36.d.ts +56 -0
  408. package/dist/lib/engine/adr36.d.ts.map +1 -0
  409. package/dist/lib/engine/adr36.js +76 -0
  410. package/dist/lib/engine/adr36.js.map +1 -0
  411. package/dist/lib/engine/client.d.ts +162 -0
  412. package/dist/lib/engine/client.d.ts.map +1 -0
  413. package/dist/lib/engine/client.js +473 -0
  414. package/dist/lib/engine/client.js.map +1 -0
  415. package/dist/lib/engine/types.d.ts +1356 -0
  416. package/dist/lib/engine/types.d.ts.map +1 -0
  417. package/dist/lib/engine/types.js +562 -0
  418. package/dist/lib/engine/types.js.map +1 -0
  419. package/dist/lib/errors.d.ts +73 -0
  420. package/dist/lib/errors.d.ts.map +1 -0
  421. package/dist/lib/errors.js +96 -0
  422. package/dist/lib/errors.js.map +1 -0
  423. package/dist/lib/facts/builder.d.ts +88 -0
  424. package/dist/lib/facts/builder.d.ts.map +1 -0
  425. package/dist/lib/facts/builder.js +239 -0
  426. package/dist/lib/facts/builder.js.map +1 -0
  427. package/dist/lib/facts/ctx.d.ts +34 -0
  428. package/dist/lib/facts/ctx.d.ts.map +1 -0
  429. package/dist/lib/facts/ctx.js +51 -0
  430. package/dist/lib/facts/ctx.js.map +1 -0
  431. package/dist/lib/facts/expected.d.ts +23 -0
  432. package/dist/lib/facts/expected.d.ts.map +1 -0
  433. package/dist/lib/facts/expected.js +16 -0
  434. package/dist/lib/facts/expected.js.map +1 -0
  435. package/dist/lib/facts/fact-cache.d.ts +469 -0
  436. package/dist/lib/facts/fact-cache.d.ts.map +1 -0
  437. package/dist/lib/facts/fact-cache.js +52 -0
  438. package/dist/lib/facts/fact-cache.js.map +1 -0
  439. package/dist/lib/facts/factset.d.ts +608 -0
  440. package/dist/lib/facts/factset.d.ts.map +1 -0
  441. package/dist/lib/facts/factset.js +226 -0
  442. package/dist/lib/facts/factset.js.map +1 -0
  443. package/dist/lib/facts/producer.d.ts +190 -0
  444. package/dist/lib/facts/producer.d.ts.map +1 -0
  445. package/dist/lib/facts/producer.js +15 -0
  446. package/dist/lib/facts/producer.js.map +1 -0
  447. package/dist/lib/facts/runner.d.ts +111 -0
  448. package/dist/lib/facts/runner.d.ts.map +1 -0
  449. package/dist/lib/facts/runner.js +438 -0
  450. package/dist/lib/facts/runner.js.map +1 -0
  451. package/dist/lib/facts/stock/ai-check.d.ts +100 -0
  452. package/dist/lib/facts/stock/ai-check.d.ts.map +1 -0
  453. package/dist/lib/facts/stock/ai-check.js +526 -0
  454. package/dist/lib/facts/stock/ai-check.js.map +1 -0
  455. package/dist/lib/facts/stock/ai-inputs.d.ts +104 -0
  456. package/dist/lib/facts/stock/ai-inputs.d.ts.map +1 -0
  457. package/dist/lib/facts/stock/ai-inputs.js +332 -0
  458. package/dist/lib/facts/stock/ai-inputs.js.map +1 -0
  459. package/dist/lib/facts/stock/ai-provider.d.ts +105 -0
  460. package/dist/lib/facts/stock/ai-provider.d.ts.map +1 -0
  461. package/dist/lib/facts/stock/ai-provider.js +250 -0
  462. package/dist/lib/facts/stock/ai-provider.js.map +1 -0
  463. package/dist/lib/facts/stock/ai-unique.d.ts +85 -0
  464. package/dist/lib/facts/stock/ai-unique.d.ts.map +1 -0
  465. package/dist/lib/facts/stock/ai-unique.js +208 -0
  466. package/dist/lib/facts/stock/ai-unique.js.map +1 -0
  467. package/dist/lib/facts/stock/archive.d.ts +63 -0
  468. package/dist/lib/facts/stock/archive.d.ts.map +1 -0
  469. package/dist/lib/facts/stock/archive.js +349 -0
  470. package/dist/lib/facts/stock/archive.js.map +1 -0
  471. package/dist/lib/facts/stock/c2pa-trust-list.d.ts +16 -0
  472. package/dist/lib/facts/stock/c2pa-trust-list.d.ts.map +1 -0
  473. package/dist/lib/facts/stock/c2pa-trust-list.js +637 -0
  474. package/dist/lib/facts/stock/c2pa-trust-list.js.map +1 -0
  475. package/dist/lib/facts/stock/c2pa.d.ts +56 -0
  476. package/dist/lib/facts/stock/c2pa.d.ts.map +1 -0
  477. package/dist/lib/facts/stock/c2pa.js +234 -0
  478. package/dist/lib/facts/stock/c2pa.js.map +1 -0
  479. package/dist/lib/facts/stock/call.d.ts +91 -0
  480. package/dist/lib/facts/stock/call.d.ts.map +1 -0
  481. package/dist/lib/facts/stock/call.js +281 -0
  482. package/dist/lib/facts/stock/call.js.map +1 -0
  483. package/dist/lib/facts/stock/capability.d.ts +39 -0
  484. package/dist/lib/facts/stock/capability.d.ts.map +1 -0
  485. package/dist/lib/facts/stock/capability.js +59 -0
  486. package/dist/lib/facts/stock/capability.js.map +1 -0
  487. package/dist/lib/facts/stock/ext-source.d.ts +51 -0
  488. package/dist/lib/facts/stock/ext-source.d.ts.map +1 -0
  489. package/dist/lib/facts/stock/ext-source.js +201 -0
  490. package/dist/lib/facts/stock/ext-source.js.map +1 -0
  491. package/dist/lib/facts/stock/frequency-fact.d.ts +59 -0
  492. package/dist/lib/facts/stock/frequency-fact.d.ts.map +1 -0
  493. package/dist/lib/facts/stock/frequency-fact.js +86 -0
  494. package/dist/lib/facts/stock/frequency-fact.js.map +1 -0
  495. package/dist/lib/facts/stock/frequency.d.ts +32 -0
  496. package/dist/lib/facts/stock/frequency.d.ts.map +1 -0
  497. package/dist/lib/facts/stock/frequency.js +48 -0
  498. package/dist/lib/facts/stock/frequency.js.map +1 -0
  499. package/dist/lib/facts/stock/index.d.ts +27 -0
  500. package/dist/lib/facts/stock/index.d.ts.map +1 -0
  501. package/dist/lib/facts/stock/index.js +28 -0
  502. package/dist/lib/facts/stock/index.js.map +1 -0
  503. package/dist/lib/facts/stock/normalize.d.ts +45 -0
  504. package/dist/lib/facts/stock/normalize.d.ts.map +1 -0
  505. package/dist/lib/facts/stock/normalize.js +135 -0
  506. package/dist/lib/facts/stock/normalize.js.map +1 -0
  507. package/dist/lib/facts/stock/phash.d.ts +55 -0
  508. package/dist/lib/facts/stock/phash.d.ts.map +1 -0
  509. package/dist/lib/facts/stock/phash.js +256 -0
  510. package/dist/lib/facts/stock/phash.js.map +1 -0
  511. package/dist/lib/facts/stock/rule-defaults.d.ts +72 -0
  512. package/dist/lib/facts/stock/rule-defaults.d.ts.map +1 -0
  513. package/dist/lib/facts/stock/rule-defaults.js +55 -0
  514. package/dist/lib/facts/stock/rule-defaults.js.map +1 -0
  515. package/dist/lib/facts/stock/send.d.ts +52 -0
  516. package/dist/lib/facts/stock/send.d.ts.map +1 -0
  517. package/dist/lib/facts/stock/send.js +148 -0
  518. package/dist/lib/facts/stock/send.js.map +1 -0
  519. package/dist/lib/facts/stock/unique-score.d.ts +138 -0
  520. package/dist/lib/facts/stock/unique-score.d.ts.map +1 -0
  521. package/dist/lib/facts/stock/unique-score.js +257 -0
  522. package/dist/lib/facts/stock/unique-score.js.map +1 -0
  523. package/dist/lib/facts/stock/unique-store.d.ts +420 -0
  524. package/dist/lib/facts/stock/unique-store.d.ts.map +1 -0
  525. package/dist/lib/facts/stock/unique-store.js +328 -0
  526. package/dist/lib/facts/stock/unique-store.js.map +1 -0
  527. package/dist/lib/facts/stock/unique.d.ts +35 -0
  528. package/dist/lib/facts/stock/unique.d.ts.map +1 -0
  529. package/dist/lib/facts/stock/unique.js +327 -0
  530. package/dist/lib/facts/stock/unique.js.map +1 -0
  531. package/dist/lib/facts/tools.d.ts +57 -0
  532. package/dist/lib/facts/tools.d.ts.map +1 -0
  533. package/dist/lib/facts/tools.js +325 -0
  534. package/dist/lib/facts/tools.js.map +1 -0
  535. package/dist/lib/facts/validate.d.ts +33 -0
  536. package/dist/lib/facts/validate.d.ts.map +1 -0
  537. package/dist/lib/facts/validate.js +137 -0
  538. package/dist/lib/facts/validate.js.map +1 -0
  539. package/dist/lib/hash.d.ts +44 -0
  540. package/dist/lib/hash.d.ts.map +1 -0
  541. package/dist/lib/hash.js +80 -0
  542. package/dist/lib/hash.js.map +1 -0
  543. package/dist/lib/http/client.d.ts +113 -0
  544. package/dist/lib/http/client.d.ts.map +1 -0
  545. package/dist/lib/http/client.js +330 -0
  546. package/dist/lib/http/client.js.map +1 -0
  547. package/dist/lib/ids.d.ts +17 -0
  548. package/dist/lib/ids.d.ts.map +1 -0
  549. package/dist/lib/ids.js +26 -0
  550. package/dist/lib/ids.js.map +1 -0
  551. package/dist/lib/ixo/attachments.d.ts +116 -0
  552. package/dist/lib/ixo/attachments.d.ts.map +1 -0
  553. package/dist/lib/ixo/attachments.js +290 -0
  554. package/dist/lib/ixo/attachments.js.map +1 -0
  555. package/dist/lib/ixo/authz.d.ts +40 -0
  556. package/dist/lib/ixo/authz.d.ts.map +1 -0
  557. package/dist/lib/ixo/authz.js +113 -0
  558. package/dist/lib/ixo/authz.js.map +1 -0
  559. package/dist/lib/ixo/blocksync/index.d.ts +90 -0
  560. package/dist/lib/ixo/blocksync/index.d.ts.map +1 -0
  561. package/dist/lib/ixo/blocksync/index.js +251 -0
  562. package/dist/lib/ixo/blocksync/index.js.map +1 -0
  563. package/dist/lib/ixo/blocksync/queries.d.ts +15 -0
  564. package/dist/lib/ixo/blocksync/queries.d.ts.map +1 -0
  565. package/dist/lib/ixo/blocksync/queries.js +144 -0
  566. package/dist/lib/ixo/blocksync/queries.js.map +1 -0
  567. package/dist/lib/ixo/blocksync/types.d.ts +184 -0
  568. package/dist/lib/ixo/blocksync/types.d.ts.map +1 -0
  569. package/dist/lib/ixo/blocksync/types.js +108 -0
  570. package/dist/lib/ixo/blocksync/types.js.map +1 -0
  571. package/dist/lib/ixo/cellnode.d.ts +35 -0
  572. package/dist/lib/ixo/cellnode.d.ts.map +1 -0
  573. package/dist/lib/ixo/cellnode.js +43 -0
  574. package/dist/lib/ixo/cellnode.js.map +1 -0
  575. package/dist/lib/ixo/chain-write.d.ts +130 -0
  576. package/dist/lib/ixo/chain-write.d.ts.map +1 -0
  577. package/dist/lib/ixo/chain-write.js +460 -0
  578. package/dist/lib/ixo/chain-write.js.map +1 -0
  579. package/dist/lib/ixo/chain.d.ts +1046 -0
  580. package/dist/lib/ixo/chain.d.ts.map +1 -0
  581. package/dist/lib/ixo/chain.js +279 -0
  582. package/dist/lib/ixo/chain.js.map +1 -0
  583. package/dist/lib/ixo/claim-bot.d.ts +49 -0
  584. package/dist/lib/ixo/claim-bot.d.ts.map +1 -0
  585. package/dist/lib/ixo/claim-bot.js +141 -0
  586. package/dist/lib/ixo/claim-bot.js.map +1 -0
  587. package/dist/lib/ixo/delegation-verify.d.ts +44 -0
  588. package/dist/lib/ixo/delegation-verify.d.ts.map +1 -0
  589. package/dist/lib/ixo/delegation-verify.js +101 -0
  590. package/dist/lib/ixo/delegation-verify.js.map +1 -0
  591. package/dist/lib/ixo/did.d.ts +13 -0
  592. package/dist/lib/ixo/did.d.ts.map +1 -0
  593. package/dist/lib/ixo/did.js +85 -0
  594. package/dist/lib/ixo/did.js.map +1 -0
  595. package/dist/lib/ixo/grant-chain.d.ts +55 -0
  596. package/dist/lib/ixo/grant-chain.d.ts.map +1 -0
  597. package/dist/lib/ixo/grant-chain.js +185 -0
  598. package/dist/lib/ixo/grant-chain.js.map +1 -0
  599. package/dist/lib/ixo/identity.d.ts +32 -0
  600. package/dist/lib/ixo/identity.d.ts.map +1 -0
  601. package/dist/lib/ixo/identity.js +104 -0
  602. package/dist/lib/ixo/identity.js.map +1 -0
  603. package/dist/lib/ixo/index.d.ts +118 -0
  604. package/dist/lib/ixo/index.d.ts.map +1 -0
  605. package/dist/lib/ixo/index.js +395 -0
  606. package/dist/lib/ixo/index.js.map +1 -0
  607. package/dist/lib/ixo/payment.d.ts +104 -0
  608. package/dist/lib/ixo/payment.d.ts.map +1 -0
  609. package/dist/lib/ixo/payment.js +136 -0
  610. package/dist/lib/ixo/payment.js.map +1 -0
  611. package/dist/lib/ixo/ucan-store.d.ts +30 -0
  612. package/dist/lib/ixo/ucan-store.d.ts.map +1 -0
  613. package/dist/lib/ixo/ucan-store.js +134 -0
  614. package/dist/lib/ixo/ucan-store.js.map +1 -0
  615. package/dist/lib/ixo/ucan.d.ts +96 -0
  616. package/dist/lib/ixo/ucan.d.ts.map +1 -0
  617. package/dist/lib/ixo/ucan.js +216 -0
  618. package/dist/lib/ixo/ucan.js.map +1 -0
  619. package/dist/lib/ixo/verified-read.d.ts +43 -0
  620. package/dist/lib/ixo/verified-read.d.ts.map +1 -0
  621. package/dist/lib/ixo/verified-read.js +73 -0
  622. package/dist/lib/ixo/verified-read.js.map +1 -0
  623. package/dist/lib/ixo/vfs.d.ts +27 -0
  624. package/dist/lib/ixo/vfs.d.ts.map +1 -0
  625. package/dist/lib/ixo/vfs.js +42 -0
  626. package/dist/lib/ixo/vfs.js.map +1 -0
  627. package/dist/lib/ixo/web-did.d.ts +7 -0
  628. package/dist/lib/ixo/web-did.d.ts.map +1 -0
  629. package/dist/lib/ixo/web-did.js +9 -0
  630. package/dist/lib/ixo/web-did.js.map +1 -0
  631. package/dist/lib/logger.d.ts +34 -0
  632. package/dist/lib/logger.d.ts.map +1 -0
  633. package/dist/lib/logger.js +126 -0
  634. package/dist/lib/logger.js.map +1 -0
  635. package/dist/lib/matrix/api.d.ts +57 -0
  636. package/dist/lib/matrix/api.d.ts.map +1 -0
  637. package/dist/lib/matrix/api.js +58 -0
  638. package/dist/lib/matrix/api.js.map +1 -0
  639. package/dist/lib/matrix/client.d.ts +41 -0
  640. package/dist/lib/matrix/client.d.ts.map +1 -0
  641. package/dist/lib/matrix/client.js +104 -0
  642. package/dist/lib/matrix/client.js.map +1 -0
  643. package/dist/lib/matrix/deliver.d.ts +224 -0
  644. package/dist/lib/matrix/deliver.d.ts.map +1 -0
  645. package/dist/lib/matrix/deliver.js +788 -0
  646. package/dist/lib/matrix/deliver.js.map +1 -0
  647. package/dist/lib/matrix/events.d.ts +114 -0
  648. package/dist/lib/matrix/events.d.ts.map +1 -0
  649. package/dist/lib/matrix/events.js +143 -0
  650. package/dist/lib/matrix/events.js.map +1 -0
  651. package/dist/lib/matrix/mxid.d.ts +24 -0
  652. package/dist/lib/matrix/mxid.d.ts.map +1 -0
  653. package/dist/lib/matrix/mxid.js +47 -0
  654. package/dist/lib/matrix/mxid.js.map +1 -0
  655. package/dist/lib/metrics.d.ts +105 -0
  656. package/dist/lib/metrics.d.ts.map +1 -0
  657. package/dist/lib/metrics.js +204 -0
  658. package/dist/lib/metrics.js.map +1 -0
  659. package/dist/lib/oauth/approvals.d.ts +160 -0
  660. package/dist/lib/oauth/approvals.d.ts.map +1 -0
  661. package/dist/lib/oauth/approvals.js +273 -0
  662. package/dist/lib/oauth/approvals.js.map +1 -0
  663. package/dist/lib/oauth/standing.d.ts +152 -0
  664. package/dist/lib/oauth/standing.d.ts.map +1 -0
  665. package/dist/lib/oauth/standing.js +299 -0
  666. package/dist/lib/oauth/standing.js.map +1 -0
  667. package/dist/lib/oauth/token.d.ts +60 -0
  668. package/dist/lib/oauth/token.d.ts.map +1 -0
  669. package/dist/lib/oauth/token.js +129 -0
  670. package/dist/lib/oauth/token.js.map +1 -0
  671. package/dist/lib/payments/extend.d.ts +42 -0
  672. package/dist/lib/payments/extend.d.ts.map +1 -0
  673. package/dist/lib/payments/extend.js +98 -0
  674. package/dist/lib/payments/extend.js.map +1 -0
  675. package/dist/lib/payments/facilitator.d.ts +220 -0
  676. package/dist/lib/payments/facilitator.d.ts.map +1 -0
  677. package/dist/lib/payments/facilitator.js +451 -0
  678. package/dist/lib/payments/facilitator.js.map +1 -0
  679. package/dist/lib/payments/gate.d.ts +207 -0
  680. package/dist/lib/payments/gate.d.ts.map +1 -0
  681. package/dist/lib/payments/gate.js +481 -0
  682. package/dist/lib/payments/gate.js.map +1 -0
  683. package/dist/lib/payments/header-seal.d.ts +33 -0
  684. package/dist/lib/payments/header-seal.d.ts.map +1 -0
  685. package/dist/lib/payments/header-seal.js +76 -0
  686. package/dist/lib/payments/header-seal.js.map +1 -0
  687. package/dist/lib/payments/index.d.ts +12 -0
  688. package/dist/lib/payments/index.d.ts.map +1 -0
  689. package/dist/lib/payments/index.js +11 -0
  690. package/dist/lib/payments/index.js.map +1 -0
  691. package/dist/lib/payments/price.d.ts +25 -0
  692. package/dist/lib/payments/price.d.ts.map +1 -0
  693. package/dist/lib/payments/price.js +43 -0
  694. package/dist/lib/payments/price.js.map +1 -0
  695. package/dist/lib/payments/reconcile.d.ts +77 -0
  696. package/dist/lib/payments/reconcile.d.ts.map +1 -0
  697. package/dist/lib/payments/reconcile.js +317 -0
  698. package/dist/lib/payments/reconcile.js.map +1 -0
  699. package/dist/lib/payments/refund.d.ts +34 -0
  700. package/dist/lib/payments/refund.d.ts.map +1 -0
  701. package/dist/lib/payments/refund.js +123 -0
  702. package/dist/lib/payments/refund.js.map +1 -0
  703. package/dist/lib/payments/review-billing.d.ts +222 -0
  704. package/dist/lib/payments/review-billing.d.ts.map +1 -0
  705. package/dist/lib/payments/review-billing.js +609 -0
  706. package/dist/lib/payments/review-billing.js.map +1 -0
  707. package/dist/lib/payments/settle.d.ts +44 -0
  708. package/dist/lib/payments/settle.d.ts.map +1 -0
  709. package/dist/lib/payments/settle.js +306 -0
  710. package/dist/lib/payments/settle.js.map +1 -0
  711. package/dist/lib/payments/terms.d.ts +27 -0
  712. package/dist/lib/payments/terms.d.ts.map +1 -0
  713. package/dist/lib/payments/terms.js +21 -0
  714. package/dist/lib/payments/terms.js.map +1 -0
  715. package/dist/lib/payouts.d.ts +20 -0
  716. package/dist/lib/payouts.d.ts.map +1 -0
  717. package/dist/lib/payouts.js +30 -0
  718. package/dist/lib/payouts.js.map +1 -0
  719. package/dist/lib/readiness.d.ts +42 -0
  720. package/dist/lib/readiness.d.ts.map +1 -0
  721. package/dist/lib/readiness.js +130 -0
  722. package/dist/lib/readiness.js.map +1 -0
  723. package/dist/lib/redact.d.ts +23 -0
  724. package/dist/lib/redact.d.ts.map +1 -0
  725. package/dist/lib/redact.js +67 -0
  726. package/dist/lib/redact.js.map +1 -0
  727. package/dist/lib/register.d.ts +85 -0
  728. package/dist/lib/register.d.ts.map +1 -0
  729. package/dist/lib/register.js +390 -0
  730. package/dist/lib/register.js.map +1 -0
  731. package/dist/lib/review/attestation.d.ts +92 -0
  732. package/dist/lib/review/attestation.d.ts.map +1 -0
  733. package/dist/lib/review/attestation.js +264 -0
  734. package/dist/lib/review/attestation.js.map +1 -0
  735. package/dist/lib/review/reviewer-grant.d.ts +146 -0
  736. package/dist/lib/review/reviewer-grant.d.ts.map +1 -0
  737. package/dist/lib/review/reviewer-grant.js +359 -0
  738. package/dist/lib/review/reviewer-grant.js.map +1 -0
  739. package/dist/lib/review/tasks.d.ts +18 -0
  740. package/dist/lib/review/tasks.d.ts.map +1 -0
  741. package/dist/lib/review/tasks.js +36 -0
  742. package/dist/lib/review/tasks.js.map +1 -0
  743. package/dist/lib/sentry.d.ts +89 -0
  744. package/dist/lib/sentry.d.ts.map +1 -0
  745. package/dist/lib/sentry.js +284 -0
  746. package/dist/lib/sentry.js.map +1 -0
  747. package/dist/lib/spans.d.ts +14 -0
  748. package/dist/lib/spans.d.ts.map +1 -0
  749. package/dist/lib/spans.js +28 -0
  750. package/dist/lib/spans.js.map +1 -0
  751. package/dist/lib/tracing.d.ts +31 -0
  752. package/dist/lib/tracing.d.ts.map +1 -0
  753. package/dist/lib/tracing.js +66 -0
  754. package/dist/lib/tracing.js.map +1 -0
  755. package/dist/lib/ttl-cache.d.ts +26 -0
  756. package/dist/lib/ttl-cache.d.ts.map +1 -0
  757. package/dist/lib/ttl-cache.js +61 -0
  758. package/dist/lib/ttl-cache.js.map +1 -0
  759. package/dist/lib/validator.d.ts +19 -0
  760. package/dist/lib/validator.d.ts.map +1 -0
  761. package/dist/lib/validator.js +32 -0
  762. package/dist/lib/validator.js.map +1 -0
  763. package/dist/lib/work-order/form.d.ts +40 -0
  764. package/dist/lib/work-order/form.d.ts.map +1 -0
  765. package/dist/lib/work-order/form.js +316 -0
  766. package/dist/lib/work-order/form.js.map +1 -0
  767. package/dist/lib/work-order/index.d.ts +20 -0
  768. package/dist/lib/work-order/index.d.ts.map +1 -0
  769. package/dist/lib/work-order/index.js +66 -0
  770. package/dist/lib/work-order/index.js.map +1 -0
  771. package/dist/middleware/api/audit.d.ts +9 -0
  772. package/dist/middleware/api/audit.d.ts.map +1 -0
  773. package/dist/middleware/api/audit.js +38 -0
  774. package/dist/middleware/api/audit.js.map +1 -0
  775. package/dist/middleware/api/auth.d.ts +29 -0
  776. package/dist/middleware/api/auth.d.ts.map +1 -0
  777. package/dist/middleware/api/auth.js +105 -0
  778. package/dist/middleware/api/auth.js.map +1 -0
  779. package/dist/middleware/api/console.d.ts +92 -0
  780. package/dist/middleware/api/console.d.ts.map +1 -0
  781. package/dist/middleware/api/console.js +446 -0
  782. package/dist/middleware/api/console.js.map +1 -0
  783. package/dist/middleware/api/errors.d.ts +48 -0
  784. package/dist/middleware/api/errors.d.ts.map +1 -0
  785. package/dist/middleware/api/errors.js +133 -0
  786. package/dist/middleware/api/errors.js.map +1 -0
  787. package/dist/middleware/api/idempotency.d.ts +23 -0
  788. package/dist/middleware/api/idempotency.d.ts.map +1 -0
  789. package/dist/middleware/api/idempotency.js +158 -0
  790. package/dist/middleware/api/idempotency.js.map +1 -0
  791. package/dist/middleware/api/keys.d.ts +14 -0
  792. package/dist/middleware/api/keys.d.ts.map +1 -0
  793. package/dist/middleware/api/keys.js +66 -0
  794. package/dist/middleware/api/keys.js.map +1 -0
  795. package/dist/middleware/api/membership.d.ts +32 -0
  796. package/dist/middleware/api/membership.d.ts.map +1 -0
  797. package/dist/middleware/api/membership.js +48 -0
  798. package/dist/middleware/api/membership.js.map +1 -0
  799. package/dist/middleware/api/oauth.d.ts +28 -0
  800. package/dist/middleware/api/oauth.d.ts.map +1 -0
  801. package/dist/middleware/api/oauth.js +109 -0
  802. package/dist/middleware/api/oauth.js.map +1 -0
  803. package/dist/middleware/api/rate-limit.d.ts +23 -0
  804. package/dist/middleware/api/rate-limit.d.ts.map +1 -0
  805. package/dist/middleware/api/rate-limit.js +70 -0
  806. package/dist/middleware/api/rate-limit.js.map +1 -0
  807. package/dist/middleware/api/types.d.ts +92 -0
  808. package/dist/middleware/api/types.d.ts.map +1 -0
  809. package/dist/middleware/api/types.js +7 -0
  810. package/dist/middleware/api/types.js.map +1 -0
  811. package/dist/middleware/api/wait.d.ts +21 -0
  812. package/dist/middleware/api/wait.d.ts.map +1 -0
  813. package/dist/middleware/api/wait.js +85 -0
  814. package/dist/middleware/api/wait.js.map +1 -0
  815. package/dist/middleware/capability.d.ts +32 -0
  816. package/dist/middleware/capability.d.ts.map +1 -0
  817. package/dist/middleware/capability.js +113 -0
  818. package/dist/middleware/capability.js.map +1 -0
  819. package/dist/middleware/database.d.ts +14 -0
  820. package/dist/middleware/database.d.ts.map +1 -0
  821. package/dist/middleware/database.js +18 -0
  822. package/dist/middleware/database.js.map +1 -0
  823. package/dist/middleware/error-handler.d.ts +13 -0
  824. package/dist/middleware/error-handler.d.ts.map +1 -0
  825. package/dist/middleware/error-handler.js +127 -0
  826. package/dist/middleware/error-handler.js.map +1 -0
  827. package/dist/middleware/observability.d.ts +32 -0
  828. package/dist/middleware/observability.d.ts.map +1 -0
  829. package/dist/middleware/observability.js +134 -0
  830. package/dist/middleware/observability.js.map +1 -0
  831. package/dist/middleware/rate-limit.d.ts +16 -0
  832. package/dist/middleware/rate-limit.d.ts.map +1 -0
  833. package/dist/middleware/rate-limit.js +56 -0
  834. package/dist/middleware/rate-limit.js.map +1 -0
  835. package/dist/middleware/ucan-auth.d.ts +39 -0
  836. package/dist/middleware/ucan-auth.d.ts.map +1 -0
  837. package/dist/middleware/ucan-auth.js +278 -0
  838. package/dist/middleware/ucan-auth.js.map +1 -0
  839. package/dist/networks.d.ts +34 -0
  840. package/dist/networks.d.ts.map +1 -0
  841. package/dist/networks.js +49 -0
  842. package/dist/networks.js.map +1 -0
  843. package/dist/oracle.d.ts +193 -0
  844. package/dist/oracle.d.ts.map +1 -0
  845. package/dist/oracle.js +245 -0
  846. package/dist/oracle.js.map +1 -0
  847. package/dist/routes/health.d.ts +16 -0
  848. package/dist/routes/health.d.ts.map +1 -0
  849. package/dist/routes/health.js +29 -0
  850. package/dist/routes/health.js.map +1 -0
  851. package/dist/routes/v1/admin.d.ts +18 -0
  852. package/dist/routes/v1/admin.d.ts.map +1 -0
  853. package/dist/routes/v1/admin.js +101 -0
  854. package/dist/routes/v1/admin.js.map +1 -0
  855. package/dist/routes/v1/api/admin-claims.d.ts +14 -0
  856. package/dist/routes/v1/api/admin-claims.d.ts.map +1 -0
  857. package/dist/routes/v1/api/admin-claims.js +82 -0
  858. package/dist/routes/v1/api/admin-claims.js.map +1 -0
  859. package/dist/routes/v1/api/admin-facilitator.d.ts +20 -0
  860. package/dist/routes/v1/api/admin-facilitator.d.ts.map +1 -0
  861. package/dist/routes/v1/api/admin-facilitator.js +64 -0
  862. package/dist/routes/v1/api/admin-facilitator.js.map +1 -0
  863. package/dist/routes/v1/api/admin.d.ts +9 -0
  864. package/dist/routes/v1/api/admin.d.ts.map +1 -0
  865. package/dist/routes/v1/api/admin.js +110 -0
  866. package/dist/routes/v1/api/admin.js.map +1 -0
  867. package/dist/routes/v1/api/audit.d.ts +8 -0
  868. package/dist/routes/v1/api/audit.d.ts.map +1 -0
  869. package/dist/routes/v1/api/audit.js +56 -0
  870. package/dist/routes/v1/api/audit.js.map +1 -0
  871. package/dist/routes/v1/api/batch.d.ts +17 -0
  872. package/dist/routes/v1/api/batch.d.ts.map +1 -0
  873. package/dist/routes/v1/api/batch.js +192 -0
  874. package/dist/routes/v1/api/batch.js.map +1 -0
  875. package/dist/routes/v1/api/claims-read.d.ts +43 -0
  876. package/dist/routes/v1/api/claims-read.d.ts.map +1 -0
  877. package/dist/routes/v1/api/claims-read.js +123 -0
  878. package/dist/routes/v1/api/claims-read.js.map +1 -0
  879. package/dist/routes/v1/api/claims.d.ts +131 -0
  880. package/dist/routes/v1/api/claims.d.ts.map +1 -0
  881. package/dist/routes/v1/api/claims.js +407 -0
  882. package/dist/routes/v1/api/claims.js.map +1 -0
  883. package/dist/routes/v1/api/collections-link.d.ts +14 -0
  884. package/dist/routes/v1/api/collections-link.d.ts.map +1 -0
  885. package/dist/routes/v1/api/collections-link.js +97 -0
  886. package/dist/routes/v1/api/collections-link.js.map +1 -0
  887. package/dist/routes/v1/api/export.d.ts +48 -0
  888. package/dist/routes/v1/api/export.d.ts.map +1 -0
  889. package/dist/routes/v1/api/export.js +251 -0
  890. package/dist/routes/v1/api/export.js.map +1 -0
  891. package/dist/routes/v1/api/index.d.ts +16 -0
  892. package/dist/routes/v1/api/index.d.ts.map +1 -0
  893. package/dist/routes/v1/api/index.js +68 -0
  894. package/dist/routes/v1/api/index.js.map +1 -0
  895. package/dist/routes/v1/api/keys.d.ts +9 -0
  896. package/dist/routes/v1/api/keys.d.ts.map +1 -0
  897. package/dist/routes/v1/api/keys.js +95 -0
  898. package/dist/routes/v1/api/keys.js.map +1 -0
  899. package/dist/routes/v1/api/me.d.ts +21 -0
  900. package/dist/routes/v1/api/me.d.ts.map +1 -0
  901. package/dist/routes/v1/api/me.js +122 -0
  902. package/dist/routes/v1/api/me.js.map +1 -0
  903. package/dist/routes/v1/api/members.d.ts +17 -0
  904. package/dist/routes/v1/api/members.d.ts.map +1 -0
  905. package/dist/routes/v1/api/members.js +406 -0
  906. package/dist/routes/v1/api/members.js.map +1 -0
  907. package/dist/routes/v1/api/meta.d.ts +12 -0
  908. package/dist/routes/v1/api/meta.d.ts.map +1 -0
  909. package/dist/routes/v1/api/meta.js +59 -0
  910. package/dist/routes/v1/api/meta.js.map +1 -0
  911. package/dist/routes/v1/api/openapi.gen.d.ts +2 -0
  912. package/dist/routes/v1/api/openapi.gen.d.ts.map +1 -0
  913. package/dist/routes/v1/api/openapi.gen.js +7 -0
  914. package/dist/routes/v1/api/openapi.gen.js.map +1 -0
  915. package/dist/routes/v1/api/protocols.d.ts +22 -0
  916. package/dist/routes/v1/api/protocols.d.ts.map +1 -0
  917. package/dist/routes/v1/api/protocols.js +153 -0
  918. package/dist/routes/v1/api/protocols.js.map +1 -0
  919. package/dist/routes/v1/api/review-billing.d.ts +18 -0
  920. package/dist/routes/v1/api/review-billing.d.ts.map +1 -0
  921. package/dist/routes/v1/api/review-billing.js +196 -0
  922. package/dist/routes/v1/api/review-billing.js.map +1 -0
  923. package/dist/routes/v1/api/review.d.ts +30 -0
  924. package/dist/routes/v1/api/review.d.ts.map +1 -0
  925. package/dist/routes/v1/api/review.js +302 -0
  926. package/dist/routes/v1/api/review.js.map +1 -0
  927. package/dist/routes/v1/api/sources.d.ts +10 -0
  928. package/dist/routes/v1/api/sources.d.ts.map +1 -0
  929. package/dist/routes/v1/api/sources.js +293 -0
  930. package/dist/routes/v1/api/sources.js.map +1 -0
  931. package/dist/routes/v1/api/uploads.d.ts +37 -0
  932. package/dist/routes/v1/api/uploads.d.ts.map +1 -0
  933. package/dist/routes/v1/api/uploads.js +414 -0
  934. package/dist/routes/v1/api/uploads.js.map +1 -0
  935. package/dist/routes/v1/api/views.d.ts +18 -0
  936. package/dist/routes/v1/api/views.d.ts.map +1 -0
  937. package/dist/routes/v1/api/views.js +95 -0
  938. package/dist/routes/v1/api/views.js.map +1 -0
  939. package/dist/routes/v1/api/webhooks.d.ts +14 -0
  940. package/dist/routes/v1/api/webhooks.d.ts.map +1 -0
  941. package/dist/routes/v1/api/webhooks.js +282 -0
  942. package/dist/routes/v1/api/webhooks.js.map +1 -0
  943. package/dist/routes/v1/api/work-orders.d.ts +45 -0
  944. package/dist/routes/v1/api/work-orders.d.ts.map +1 -0
  945. package/dist/routes/v1/api/work-orders.js +171 -0
  946. package/dist/routes/v1/api/work-orders.js.map +1 -0
  947. package/dist/routes/v1/claims.d.ts +21 -0
  948. package/dist/routes/v1/claims.d.ts.map +1 -0
  949. package/dist/routes/v1/claims.js +153 -0
  950. package/dist/routes/v1/claims.js.map +1 -0
  951. package/dist/routes/v1/collections.d.ts +45 -0
  952. package/dist/routes/v1/collections.d.ts.map +1 -0
  953. package/dist/routes/v1/collections.js +201 -0
  954. package/dist/routes/v1/collections.js.map +1 -0
  955. package/dist/routes/v1/index.d.ts +13 -0
  956. package/dist/routes/v1/index.d.ts.map +1 -0
  957. package/dist/routes/v1/index.js +41 -0
  958. package/dist/routes/v1/index.js.map +1 -0
  959. package/dist/routes/v1/info.d.ts +14 -0
  960. package/dist/routes/v1/info.d.ts.map +1 -0
  961. package/dist/routes/v1/info.js +75 -0
  962. package/dist/routes/v1/info.js.map +1 -0
  963. package/dist/routes/v1/mcp/index.d.ts +33 -0
  964. package/dist/routes/v1/mcp/index.d.ts.map +1 -0
  965. package/dist/routes/v1/mcp/index.js +252 -0
  966. package/dist/routes/v1/mcp/index.js.map +1 -0
  967. package/dist/routes/v1/mcp/oauth.d.ts +27 -0
  968. package/dist/routes/v1/mcp/oauth.d.ts.map +1 -0
  969. package/dist/routes/v1/mcp/oauth.js +500 -0
  970. package/dist/routes/v1/mcp/oauth.js.map +1 -0
  971. package/dist/routes/v1/mcp/tools.d.ts +71 -0
  972. package/dist/routes/v1/mcp/tools.d.ts.map +1 -0
  973. package/dist/routes/v1/mcp/tools.js +432 -0
  974. package/dist/routes/v1/mcp/tools.js.map +1 -0
  975. package/dist/routes/v1/mcp/ui.d.ts +45 -0
  976. package/dist/routes/v1/mcp/ui.d.ts.map +1 -0
  977. package/dist/routes/v1/mcp/ui.js +454 -0
  978. package/dist/routes/v1/mcp/ui.js.map +1 -0
  979. package/dist/routes/v1/oauth.d.ts +29 -0
  980. package/dist/routes/v1/oauth.d.ts.map +1 -0
  981. package/dist/routes/v1/oauth.js +256 -0
  982. package/dist/routes/v1/oauth.js.map +1 -0
  983. package/dist/routes/v1/reviewers.d.ts +22 -0
  984. package/dist/routes/v1/reviewers.d.ts.map +1 -0
  985. package/dist/routes/v1/reviewers.js +165 -0
  986. package/dist/routes/v1/reviewers.js.map +1 -0
  987. package/dist/routes/v1/reviews.d.ts +38 -0
  988. package/dist/routes/v1/reviews.d.ts.map +1 -0
  989. package/dist/routes/v1/reviews.js +234 -0
  990. package/dist/routes/v1/reviews.js.map +1 -0
  991. package/dist/routes/v1/shared.d.ts +586 -0
  992. package/dist/routes/v1/shared.d.ts.map +1 -0
  993. package/dist/routes/v1/shared.js +229 -0
  994. package/dist/routes/v1/shared.js.map +1 -0
  995. package/dist/routes/well-known.d.ts +15 -0
  996. package/dist/routes/well-known.d.ts.map +1 -0
  997. package/dist/routes/well-known.js +35 -0
  998. package/dist/routes/well-known.js.map +1 -0
  999. package/dist/runtime.d.ts +100 -0
  1000. package/dist/runtime.d.ts.map +1 -0
  1001. package/dist/runtime.js +144 -0
  1002. package/dist/runtime.js.map +1 -0
  1003. package/dist/testing/fake-tools.d.ts +104 -0
  1004. package/dist/testing/fake-tools.d.ts.map +1 -0
  1005. package/dist/testing/fake-tools.js +213 -0
  1006. package/dist/testing/fake-tools.js.map +1 -0
  1007. package/dist/testing/index.d.ts +54 -0
  1008. package/dist/testing/index.d.ts.map +1 -0
  1009. package/dist/testing/index.js +104 -0
  1010. package/dist/testing/index.js.map +1 -0
  1011. package/dist/testing/samples.d.ts +70 -0
  1012. package/dist/testing/samples.d.ts.map +1 -0
  1013. package/dist/testing/samples.js +92 -0
  1014. package/dist/testing/samples.js.map +1 -0
  1015. package/dist/workflows/claim-ingest.d.ts +250 -0
  1016. package/dist/workflows/claim-ingest.d.ts.map +1 -0
  1017. package/dist/workflows/claim-ingest.js +1020 -0
  1018. package/dist/workflows/claim-ingest.js.map +1 -0
  1019. package/dist/workflows/claim-source.d.ts +25 -0
  1020. package/dist/workflows/claim-source.d.ts.map +1 -0
  1021. package/dist/workflows/claim-source.js +107 -0
  1022. package/dist/workflows/claim-source.js.map +1 -0
  1023. package/dist/workflows/review-complete.d.ts +82 -0
  1024. package/dist/workflows/review-complete.d.ts.map +1 -0
  1025. package/dist/workflows/review-complete.js +455 -0
  1026. package/dist/workflows/review-complete.js.map +1 -0
  1027. package/dist/workflows/steps.d.ts +125 -0
  1028. package/dist/workflows/steps.d.ts.map +1 -0
  1029. package/dist/workflows/steps.js +325 -0
  1030. package/dist/workflows/steps.js.map +1 -0
  1031. package/docs/api.md +2595 -0
  1032. package/docs/guide.md +1525 -0
  1033. package/migrations/0000_init.sql +108 -0
  1034. package/migrations/0001_review_attestation.sql +1 -0
  1035. package/migrations/0002_decisions_facts.sql +1 -0
  1036. package/migrations/0003_api_lane.sql +171 -0
  1037. package/migrations/0004_api_v1_1.sql +19 -0
  1038. package/migrations/0005_member_notify.sql +3 -0
  1039. package/migrations/0006_source_collections.sql +16 -0
  1040. package/migrations/0007_api_settlement.sql +27 -0
  1041. package/migrations/0008_review_extend.sql +1 -0
  1042. package/migrations/0009_card_refunds.sql +4 -0
  1043. package/migrations/0010_even_scorpion.sql +16 -0
  1044. package/migrations/0011_mcp_oauth.sql +27 -0
  1045. package/migrations/0012_mcp_standing.sql +21 -0
  1046. package/migrations/0013_unknown_krista_starr.sql +2 -0
  1047. package/migrations/0014_last_carnage.sql +14 -0
  1048. package/migrations/0015_company_authority.sql +26 -0
  1049. package/migrations/0016_owner_only_links.sql +6 -0
  1050. package/migrations/0017_organisations.sql +35 -0
  1051. package/migrations/0018_remove_app_signed.sql +4 -0
  1052. package/migrations/0019_submitted_via.sql +2 -0
  1053. package/migrations/0020_drop_decision_to_pay.sql +4 -0
  1054. package/migrations/0021_manual_erase.sql +25 -0
  1055. package/migrations/0022_errored_facts.sql +1 -0
  1056. package/migrations/0023_review_billing.sql +20 -0
  1057. package/migrations/0024_pending_task_details.sql +1 -0
  1058. package/migrations/meta/0000_snapshot.json +707 -0
  1059. package/migrations/meta/0001_snapshot.json +714 -0
  1060. package/migrations/meta/0002_snapshot.json +721 -0
  1061. package/migrations/meta/0003_snapshot.json +1845 -0
  1062. package/migrations/meta/0004_snapshot.json +1969 -0
  1063. package/migrations/meta/0005_snapshot.json +1991 -0
  1064. package/migrations/meta/0006_snapshot.json +2097 -0
  1065. package/migrations/meta/0007_snapshot.json +2128 -0
  1066. package/migrations/meta/0008_snapshot.json +2133 -0
  1067. package/migrations/meta/0009_snapshot.json +2161 -0
  1068. package/migrations/meta/0010_snapshot.json +2265 -0
  1069. package/migrations/meta/0011_snapshot.json +2448 -0
  1070. package/migrations/meta/0012_snapshot.json +2577 -0
  1071. package/migrations/meta/0013_snapshot.json +2594 -0
  1072. package/migrations/meta/0014_snapshot.json +2602 -0
  1073. package/migrations/meta/0015_snapshot.json +2778 -0
  1074. package/migrations/meta/0016_snapshot.json +2778 -0
  1075. package/migrations/meta/0017_snapshot.json +2792 -0
  1076. package/migrations/meta/0018_snapshot.json +2778 -0
  1077. package/migrations/meta/0019_snapshot.json +2792 -0
  1078. package/migrations/meta/0020_snapshot.json +2785 -0
  1079. package/migrations/meta/0021_snapshot.json +2762 -0
  1080. package/migrations/meta/0022_snapshot.json +2769 -0
  1081. package/migrations/meta/0023_snapshot.json +2900 -0
  1082. package/migrations/meta/0024_snapshot.json +2907 -0
  1083. package/migrations/meta/_journal.json +181 -0
  1084. package/openapi/decision-api.yaml +12204 -0
  1085. package/package.json +121 -4
  1086. package/skills/README.md +19 -0
  1087. package/skills/add-openhands-support/SKILL.md +113 -0
  1088. package/skills/create-collection/SKILL.md +199 -0
  1089. package/skills/create-collection/reference/claims-stack.md +106 -0
  1090. package/skills/create-collection/reference/collection.md +111 -0
  1091. package/skills/create-oracle/SKILL.md +400 -0
  1092. package/skills/create-rubric/SKILL.md +130 -0
  1093. package/skills/create-rubric/reference/format-cheatsheet.md +186 -0
  1094. package/skills/create-rubric/templates/claim-form.example.json +60 -0
  1095. package/skills/decision-api-client/SKILL.md +236 -0
  1096. package/skills/decision-api-oracle/SKILL.md +336 -0
  1097. package/skills/publish-protocol/SKILL.md +151 -0
  1098. package/skills/publish-protocol/reference/publishing.md +116 -0
  1099. package/skills/reference/engine-contract.md +222 -0
  1100. package/skills/write-facts/SKILL.md +221 -0
  1101. package/skills/write-facts/reference/examples/http-vendor.ts +88 -0
  1102. package/skills/write-facts/reference/examples/price-matches-agreement.ts +67 -0
  1103. package/skills/write-facts/reference/facts-api.md +232 -0
  1104. package/templates/project/.dev.vars.example +93 -0
  1105. package/templates/project/.editorconfig +9 -0
  1106. package/templates/project/CLAUDE.md +45 -0
  1107. package/templates/project/README.md +199 -0
  1108. package/templates/project/biome.json +37 -0
  1109. package/templates/project/gitignore +29 -0
  1110. package/templates/project/package.json +32 -0
  1111. package/templates/project/src/facts/index.ts +19 -0
  1112. package/templates/project/src/index.ts +25 -0
  1113. package/templates/project/test/api-lane.test.ts +57 -0
  1114. package/templates/project/test/facts.test.ts +14 -0
  1115. package/templates/project/tsconfig.json +25 -0
  1116. package/templates/project/vitest.config.ts +13 -0
  1117. package/templates/project/wrangler.jsonc +446 -0
@@ -0,0 +1,7 @@
1
+ // GENERATED by openapi/generate.ts (bun run openapi:generate) from openapi/decision-api.yaml —
2
+ // do not edit. The worker cannot read the YAML at runtime; this is what GET /v1/api/openapi.json
3
+ // serves. test/node/openapi-served.test.ts fails when the two differ.
4
+ // One compact JSON string, parsed once per isolate: every provider's worker bundles it, lane on or
5
+ // off, and a string is both the smallest form and the fastest to parse.
6
+ export const OPENAPI_DOCUMENT = JSON.parse("{\"openapi\":\"3.1.0\",\"info\":{\"title\":\"IXO Decision API\",\"version\":\"1.24.0\",\"summary\":\"Submit evidence, get a signed decision.\",\"description\":\"The API lane of an IXO evaluation oracle (go-prod spec §4): submit a claim, the oracle produces facts, the IXO decision engine decides against the protocol's rubric, and you get the engine's signed receipt — synchronously within `Prefer: wait=N`, or by webhook.\\n\\n**Conventions (§4.1).** `X-Request-Id` on every response and in every error body. One error envelope `{ error: { code, message, requestId, details, docsUrl } }`. `RateLimit-Limit` / `RateLimit-Remaining` / `RateLimit-Reset` per key and per source; `429` + `Retry-After`. `Idempotency-Key` on every POST/PUT (24 h). Keyset pagination: `limit` ≤ 500 + opaque `cursor`, `nextCursor` in the body. ISO-8601 UTC times, integer cents with a currency, scores in basis points, PAY amounts as `upay` base-unit strings (1 PAY = 1 USD = 1,000,000 upay). Bodies ≤ 1 MiB JSON, uploads ≤ 25 MB, batches ≤ 100.\\n\\n**Versioning.** Path-versioned; additive changes ship without a bump. A breaking change is a new path with a 12-month window announced by the `Deprecation` and `Sunset` response headers and the changelog.\\n\\n**Payment.** Pay-per-call over x402 v2 with the `ixo-pay` scheme (§11.2), network `cosmos:<chain-id>`: the first submit answers `402 PAYMENT_REQUIRED` + `PAYMENT-REQUIRED` (authoritative; the body repeats it in `error.details.paymentRequired`); the retry carries `PAYMENT-SIGNATURE`, which reserves the price (x402 verify); the claim runs, and the facilitator settles on the engine's signed receipt — a sync `200` with the decision carries that settle answer as `PAYMENT-RESPONSE` (for PAY usually `settlement_pending`), and the record's `payment` and the `payment.settled` webhook carry the `settlementId`. Every header value is base64 of UTF-8 JSON.\\n\\n**Auth.** `apiKey` for integrations; `ucan` for the Decision Console. Console routes (tag `console`) and operator routes (tag `operator`) are UCAN-only; `GET /v1/api/protocols` and `/v1/api/protocols/{did}` are public too. Every authenticated operation carries `x-required-scope` (what an API key needs; null = any valid key) and `x-capability` — what a console member's grant must hold (§3.4); the unauthenticated `openapi.json`, `llms.txt` and signed `files/{uploadId}` carry neither. Console roles are UCAN delegations: a source's owner signs, in their browser, a grant of named capabilities over `ixo:oracle/<oracle did:web>/source/<sourceId>` to a member's IXO account, and the console presents it as the proof of every invocation (`X-Source-Id` names the source). `x-capability` is one of `source/*` · `claims/submit` · `claims/read` · `claims/review` · `keys/manage` · `webhooks/manage` · `spend/read` · `settings/manage` · `audit/read`; null = any valid grant on the source; `public` = no credential needed (one narrows the answer to the source); `account` = a plain self-signed invocation over `ixo:oracle/<oracle did:web>` with no source; `operator` = an invoker in `ORACLE_ADMIN_DIDS`. A grant that lacks it, has expired or was revoked is `403 FORBIDDEN`. Every console invocation names the ONE operation it is for: its capability's `can` is the operation's `x-ucan-action` (e.g. `claims/read`, `keys/revoke`), and an invocation signed for another operation is `403 FORBIDDEN`. `x-spec-delta: true` marks routes the spec implies (§3.3, §3.4, §6.3, §12.2) but §4.2 does not list.\\n\\n**Changes in 1.1.** Console roles are UCAN delegations (`x-capability` replaces `x-roles`; members gain `status`, `capabilities`, `protocols`, `expiresAt`, `delegationCid`, `revokedAt`; new grant, revoke, accept-invite and my-sources routes). The decision-to-pay binding is gone (`payment` on submit, `decisionToPay` on the record). No per-source prices: `AllowedProtocol` is `{ protocolDid }` and `Price` gains `amountMicroUsd`, the one published price; the protocol routes are public. `payTo` is `oracle:<oracle DID>`; a payer outside the source is `403 PAYER_NOT_MEMBER`. Sources gain `billingMode` (`x402` · `none`, set by an operator). `credits` on `/me` is the facilitator's balance (`upay` base units), gated by capability. New: `GET /v1/api/claims/{claimId}/review` (the review view), `?decision=` on the claim list, `GET /v1/api/webhooks/deliveries/{deliveryId}`, the source webhook secret (on create, and rotation).\\n\\n**Changes in 1.2.** A `ClaimRecord` shows either lane: it gains `lane` (`api` · `chain`), `sourceId` and `collectionId`; a chain claim's `decision.chainStatus` is its real on-chain state (`pending` · `submitted` · `blocked` · `skipped` · `held` · `owner_submitted`), and its `claimId` is the chain's own id (a CID). The timeline gains `chain_submitted`. New operator routes read every claim of both lanes: `GET /v1/api/admin/claims` (+ `/{claimId}`, `/events`, `/receipt`, `/report`). A source's claim reads include the chain claims of its linked collections: `GET /v1/api/claims` gains `lane` and `collectionId`, and the record, timeline, receipt and report routes take a chain claim's id; review and erase stay API claims only. Linking a collection adds chain claims to members' lists; API keys see them with `lane=chain` (without `lane` a key's list stays API claims, as before 1.2). The audit log's `actor.kind` gains `system` — the oracle's own scheduled job (`system:link-recheck`).\\n\\n**Changes in 1.3.** Payments follow standard x402: the paid retry's `PAYMENT-SIGNATURE` is verified and the price RESERVED per claim, the claim starts, and the facilitator settles on the engine's receipt. `settlementId` (64 hex, one per offer) replaces `chargeId` on the record's `payment` and on `payment.settled`; `payment.status` is `reserved` · `settled` · `paid` · `released` · `failed` (was `pending` · `settled` · `failed`) and `payment` gains `transaction` (the transfer's tx hash once `paid`). `PAYMENT-RESPONSE` is on a `200` that carries a decision only — success with the real `transaction`, or `settlement_pending` — never on a `202`; the receipt's `charges[]` is now `claims[]` (`{ claimId, state }`). The 402's `payTo` is the real recipient (an `ixo1…` address). `credits` on `/me` reports `reserved` · `settled` · `paying` (was `held` · `spent`).\\n\\n**Changes in 1.4.** Card per decision (additive). When the oracle takes card, the 402's `accepts` lists a `stripe-manual-capture` entry (`CardRequirements`) after the ixo-pay one, and the retry's `PAYMENT-SIGNATURE` may be a `CardPaymentPayload` (`{ paymentIntentId, customerId }`, no delegation: the payer is the account the facilitator names). After a 3-D Secure confirmation, send the SAME header again (the original offer), even past its `maxTimeoutSeconds`. A card payment settles on `stripe:test` / `stripe:live` with the captured PaymentIntent (`pi_…`) as `transaction` in `PAYMENT-RESPONSE` and on the record's `payment`.\\n\\n**Changes in 1.3.1.** A paid claim waiting for review holds its payment reservation for up to 30 days, not 24 h. The record's `review` and the review view gain `answerBy` — when that hold runs out (the extended expiry, else 24 h after verify; null for a source that does not bill, and once the claim no longer awaits review) — and an answer after it is refused `409 REVIEW_EXPIRED` with `details.answerBy`: the claim could no longer be paid, and nothing is changed. A review that passes `answerBy` unanswered is announced once — timeline `review_expired` and the `claim.review_expired` webhook: the claim stays `pending_review` and is closed unpaid.\\n\\n**Changes in 1.4.1.** New operator route `GET /v1/api/admin/facilitator-delegation[?actions=][&ttl=]`: a short-lived UCAN delegation (≤ 1 h) from this oracle's did:web to the invoking operator — one capability on `ixo:ixo-pay-facilitator` per requested action (`operators/onboard`, `operators/read`, `operators/refund`, `operators/evidence`; default all four) — the card facilitator's operator credential.\\n\\n**Changes in 1.4.2.** A claim's `payment` and the `payment.settled` webhook name the scheme the payer used: `scheme` is `ixo-pay` (asset `upay`, `amount` in upay) or `stripe-manual-capture` (asset `usd`, `amount` in US cents: that claim's own price, also in a batch). `payment.settled` gains `scheme`. A stored payment that cannot be read shows as `ixo-pay`.\\n\\n**Changes in 1.4.3.** Card refunds (additive). A claim's `payment.status` gains `refunded` · `partially_refunded` — a paid card payment the operator refunded since (in the console, the Stripe dashboard, or by a dispute); PAY is final on chain and never shows either. `payment` gains `refundedAt`, `refundId` (the latest refund) and `refundedAmountCents` (the total), all null until a refund exists. The oracle learns refunds from the facilitator on its own schedule; new route `POST /v1/api/claims/{claimId}/payment/refresh` asks now and answers the record.\\n\\n**Changes in 1.4.4.** Console invocations carry the route's action: the one capability's `can` is the operation's new `x-ucan-action` (e.g. `{ with: \\\"ixo:oracle/<oracle did:web>/source/<sourceId>\\\", can: \\\"claims/read\\\" }` for `GET /v1/api/claims`), so a signed request opens only the operations sharing its action (a few related reads, or a claim and a batch of claims); any other operation is `403 FORBIDDEN`. What a member may do is unchanged (`x-capability`, checked against the grant). API keys are unchanged.\\n\\n**Changes in 1.4.5.** Console invocations must carry the route's `x-ucan-action`: the legacy `can: \\\"*\\\"` is now `403 FORBIDDEN`, like any other operation's action, and the message names the action the route takes. API keys are unchanged.\\n\\n**Changes in 1.4.6.** AI apps can connect to the oracle's hosted MCP server by signing in (OAuth through IXO AuthHub) instead of an API key; every submit they make is approved by the user first. What surfaces here: the audit log's `actor.kind` gains `oauth` (the user's DID as `id`, the app as `clientId` and `clientName`), and a claim's `accepted` event carries `via: \\\"oauth:<client_id>\\\"` when an AI app submitted it. An OAuth token is never accepted on `/v1/api` itself. API keys are unchanged.\\n\\n**Changes in 1.4.7.** Nothing in this document changes. The hosted MCP server's tools now link MCP Apps views (a decision card and a receipt badge) that apps such as claude.ai and ChatGPT render; every tool result is unchanged.\\n\\n**Changes in 1.4.8.** Nothing in this document changes. On the hosted MCP server, the approval asks are no longer error results (`status: \\\"approval_required\\\"`), and `list_protocols` links a protocols view.\\n\\n**Changes in 1.4.9.** An `Attachment` by `url` without a `mediaType` gets one detected at accept (the URL's extension, else the `Content-Type` of one `HEAD`) and stored with the claim; a declared `mediaType` still wins, and an unknown type is still `application/octet-stream`.\\n\\n**Changes in 1.5.0.** S16 Decision Payouts. A `ClaimRecord` gains `submitter` (the id the claim was submitted under, null for a chain claim and after erasure), and its `decision` gains `decisionToPay` — the engine's signed DecisionToPayCredential `{ cid, jws }` when the claim was approved and the protocol is configured for payouts, else null. Both appear on the claim read, the list, and every `claim.*` webhook. Additive: both are optional in the schema. A `submitter` must be an opaque id (never a name, email or phone): a payout binds it. After erasure `submitter` reads null, but `decisionToPay.jws` still binds the payee by that opaque id — which is why it must never be personal data.\\n\\n**Changes in 1.6.0.** S16 Decision Payouts, company grants. `GET /v1/api/admin/facilitator-delegation` also mints the payouts facilitator's company delegation: `actions` may name payout actions (`payouts/rules/read`, `payouts/rules/write`, `payouts/payees/invite`, `payouts/payees/read`, `payouts/read`, `payouts/approve`, `payouts/manage`, `payouts/export`) — never mixed with operator actions (`400 VALIDATION`). Any console-signed account may ask (`x-capability` is now `account`); operator actions still need `ORACLE_ADMIN_DIDS`. A payout action outside the member's allowlist (the oracle's `payoutMembers`; unlisted operators get `payouts/read` and `payouts/export`) is the new `403 PAYOUT_ACTION_NOT_GRANTED` with `details: { notGranted, memberActions }`. A payout delegation's answer adds `memberActions` (the member's whole allowlist) and `warnings` (`[]` when none).\\n\\n**Changes in 1.7.0.** Company authority. A submit (and each batch item) may carry `submission`: your app's compact JWS over the claim's `contentDigest`, stored verbatim and checked by the decision engine, never by the oracle. A `ClaimRecord` gains `contentDigest` — `sha256:<hex>` over the canonical JSON of the claim content (what you sent minus `webhookUrl` and `submission`, with the resolved `protocolDid`), to recompute from your own request; it survives erasure and is null for a chain claim and a claim accepted before 1.7. A `Source` gains `companyEntityDid` and `payeeField` (null until the source is linked to a company), a `Member` `reviewerDelegationExpiresAt`. **Breaking:** an upload attachment REQUIRES the `cid` its `PUT /v1/api/uploads` returned (`400 VALIDATION` at `attachments[i].cid` when it is missing or not that upload's), since the engine binds the file by the content's cid. `DecisionStatus` gains `content_mismatch` and `payload_too_large`: the engine refused to bind the decision to the claim's content, so there is no decision and the claim fails (`engine_rejected`). **Removed:** the payout branch of `GET /v1/api/admin/facilitator-delegation` (1.6.0). The payouts facilitator now holds each company's payout team itself (the controllers of its company entity, `GET /v1/payouts/info`) and accepts no oracle-minted payout grant, so a `payouts/*` action is `400 VALIDATION`; the route is operator-only again (`x-capability: operator`, operator actions only), its answer has no `memberActions` or `warnings`, and `403 PAYOUT_ACTION_NOT_GRANTED` is gone.\\nUpload links (additive): `POST /v1/api/uploads/links` (`claims:write`, action `uploads/link`) returns an `UploadLink` — a one-use, signed `PUT /v1/api/uploads/{uploadId}` that is public (the signature is the credential), lives 10 minutes and takes one file into the source, for a client that must not hold the API key; `GET /v1/api/uploads/{uploadId}` (`claims:read`, action `uploads/read`) reads an upload back. A source may mint 100 links per 10 minutes.\\n\\n**Changes in 1.8.0.** One organisation (D10): an organisation IS its on-chain entity, and a source is the organisation's access to this oracle — it never exists without one, and there is no personal root. `POST /v1/api/sources` REQUIRES `entityDid` and is refused `403` unless the invoker is a current controller (admin) of it; the answer no longer carries `owner` (the creator gets no membership: as a controller it is root). A source starts `pending-link` and turns `active` when `POST /v1/api/sources/{sourceId}/company/sync` reads the organisation's link from the decision engine; a link for another entity (or the engine's `disputed`) makes it `disputed` — delete it (`DELETE /v1/api/sources/{sourceId}`) and add the oracle again. `pending-link` and `disputed` take no claims, keys, uploads, invites or webhooks: `409 SOURCE_PENDING_LINK` / `SOURCE_DISPUTED`. `Source.status` gains both; `Source.companyEntityDid` is never null. A current controller of the organisation invokes any source route as ROOT with no proof and no membership (`Caller.kind: controller` on `GET /v1/api/me`); every grant is rooted at a controller. `GET /v1/api/sources?entity=` lists an organisation's sources (those that have ever been `active`) for its controllers. A `ClaimRecord` gains `submittedBy` (required, nullable): who SENT the claim, set by the oracle — the signed-in user's DID for an AI app over OAuth, null for an API key or the console. `submitter`, when absent, is the answer the organisation's link names (`payeeField`); there is no oracle-side fill. Over OAuth an explicit `submitter` must be the signed-in user's DID (`400 VALIDATION`); a frequency protocol's missing submitter is reported at `answers.<payeeField>` when the source has one. Migration 0017 deletes every source without an organisation (and all its data) in every consumer's D1.\\n\\n**Changes in 1.9.0.** A narrow capability for filing claims: `claims/submit` covers `POST /v1/api/claims`, `POST /v1/api/claims/batch`, `PUT /v1/api/uploads` and `POST /v1/api/uploads/links` (`x-capability` was `source/*`; `source/*` still covers it), and the new role preset `submitter` is exactly `claims/submit` + `claims/read` — staff who file claims (and read back what they filed) without any control of the source. An API key's `claims:write` scope and an AI app's OAuth `claims:write` reach the same routes. Over OAuth (the hosted MCP server) a CURRENT controller of an active source's organisation stands on it as root, as in the console, with no membership: its sources are offered (`SOURCE_REQUIRED` lists them once, a source the controller also joined included) and submitted to; a former controller's are gone at once, and a `pending-link` or `disputed` source is never offered.\\n\\n**Changes in 1.10.0.** **Removed:** app-signed submissions (1.7.0). A submit (and each batch item) no longer takes `submission` — sending one is `400 VALIDATION`, as any unknown field — and an organisation's link no longer carries app keys. `contentDigest` is unchanged: it is over the claim content minus `webhookUrl`, with the resolved `protocolDid`.\\n\\n**Changes in 1.11.0.** Every review answer (`POST /v1/api/claims/{claimId}/review`) carries the new `reviewerGrant`, a base64 CAR the decision engine requires on the fold; without it the answer is `400 REVIEWER_GRANT_INVALID` (`details.reason: absent`). Every link names `nbf` and `exp` at most 30 days apart and a `claims/review` capability on `ixo:oracle/<oracle did:web>/source/<sourceId>`, with no wildcard. A **member** sends two links: its current access from the organisation (its stored role grant, from a current controller), then its own grant from its `did:ixo` to its registered reviewer `did:key` (exactly `claims/review`). An organisation's **controller** — a root of the source, signed in as itself with no membership — now answers reviews too: its attestation's `issuer` is its own `did:ixo` and the `kid` a `did:key` on that DID's document, and its grant is ONE delegation from itself to itself, signed with the same key. A role grant that carries `claims/review` (`PUT /v1/api/members/{memberId}/delegation`) must have `nbf` and `exp` at most 30 days apart. New codes `REVIEWER_GRANT_INVALID` (400) and `REVIEWER_NOT_AUTHORIZED` (403); `ReviewRow.reviewerDid` is a member's `did:key` or the controller's `did:ixo`.\\n\\n**Changes in 1.12.0.** Additive: a `ClaimRecord` gains `submittedVia` (required, nullable) — the AI app that sent the claim over OAuth: `{ name, verified }`. `name` is the app's registered name (e.g. `Claude`), declared by the app itself, trimmed and at most 100 characters — a hint, never proof. `verified` is true when AuthHub registered the app with only Claude's or ChatGPT's own callback, so the token can only be theirs; a local app (Claude Code, Codex) is `false`. Null for an API key, a console submit and a chain claim.\\n\\n**Changes in 1.13.0.** **Removed:** `decision.decisionToPay` on the `ClaimRecord` (1.5.0) — on the claim read, the list and every `claim.*` webhook. One credential per decision (UDID): on an approved claim whose protocol is configured for payouts, `decision.receipt` is itself the engine's `DecisionToPayCredential` and carries the payment binding; it is public at the engine's `/v1/receipts/{cid}`. A company's facilitator reads the binding from the receipt. `submitter` must stay an opaque id: the public receipt's binding names the payee by it.\\n\\n**Changes in 1.14.0.** The oracle never deletes an organisation's claim data on its own (owner, 2026-10-11): nothing expires a claim's answers, uploads or webhook payloads, and the organisation erases a claim with `DELETE /v1/api/claims/{claimId}/body` (`409 CONFLICT` while it is still being decided), and deletes an upload no claim uses with the new `DELETE /v1/api/uploads/{uploadId}` (`uploads/delete`; `409` for a claim's file). `Source.retentionDays` is removed, and `SourceSettings` no longer takes it (a strict body that sends it is `400`).\\n\\n**Changes in 1.15.0.** Additive: the review view gains `canAnswer` (`{ ok, reason? }`) and `GET /v1/api/me` gains `reviewBlocked` (`ReviewBlock` or null) — whether the CALLER can answer reviews, so the console disables the form up front. `oracle-owner`: the caller is the account that registered this oracle with the decision engine, which refuses its answers; `not-reviewer`: the caller does not sign answers (an API key, which may still relay a member-signed one, or no `claims/review`). An answer from the oracle's owner — as an organisation controller, as a member, or as the controller who granted a member's access — is now `403 REVIEWER_NOT_AUTHORIZED` with `details.reason: \\\"oracle-owner\\\"` before anything is stored, instead of failing later at the fold.\\n\\n**Changes in 1.16.0.** Fix: the source's default webhook URL receives every `claim.*` event whatever endpoints the source has — an endpoint subscribed to the event used to silence it. A claim's own `webhookUrl` still replaces the default for that claim, and a default equal to a subscribed endpoint's URL is posted once, by the endpoint (its secret). Non-claim events go to endpoints only, as before.\\n\\n**Changes in 1.17.0.** New `GET /v1/api/organisations/{entityDid}/sources` (`listOrganisationSources`, action `sources/list-organisation`): a current controller of the organisation lists its sources on this oracle in EVERY state — `pending-link` and `disputed` included — so a source left by an abandoned \\\"Add oracle\\\" or a CLI sign-up is found again (sync it, or delete it). It replaces `GET /v1/api/sources?entity=`, which is **removed** (that list left never-active sources out; an `entity` query is now `400 VALIDATION`): `GET /v1/api/sources` is the account's memberships only (`MySourceList`) and takes no query. `Source` gains `activatedAt` (required, nullable): when the company sync first made it `active`, null while it has never been — a source with null never held claims.\\n\\n**Changes in 1.18.0.** Fix: `POST /v1/api/webhooks/deliveries/{deliveryId}/redeliver` posts to where the delivery's target points now. A delivery without an endpoint goes to the claim's own `webhookUrl`, else the source's CURRENT default URL (it used to re-post to the URL frozen on the row), signed with the source's secret. A delivery whose endpoint was deleted or turned off, or whose source no longer has a default URL, is refused `409 CONFLICT` with `details.reason` `endpoint-deleted` / `endpoint-disabled` / `no-webhook-url` (it used to be reset and go `dead` with a `202`).\\n\\n**Changes in 1.19.0.** No wire change. The CLI gains the console's onboarding steps: `decision-oracle org create` (an organisation entity, idempotent by name), `decision-oracle api source link <sourceId>` (signs the organisation's link, PUTs it to the engine and calls `POST /v1/api/sources/{sourceId}/company/sync`: `pending-link` → `active`), `decision-oracle org balance` and `decision-oracle logout`.\\n\\n**Changes in 1.20.0.** Additive: `ClaimRecord.decision.erroredFacts` and `ReviewView.erroredFacts` — `[{ name, detail }]`, one per `ext`/`ai` fact that came back `error` (`name` lane-prefixed, e.g. `ext.beforeAfter`; `detail` the fact's own error text, at most 500 chars), as the decision engine reports them. The engine's `reasons` stay generic (\\\"External check unreachable after retries — held for review\\\"); this says which check and why. Omitted when no fact errored, and on a decision made by an engine that does not report them.\\n\\n**Changes in 1.21.0.** Additive: registering a chain collection with the oracle links it to every `active` source of the collection's company, as the decision engine derives it (the collection's entity, or the organisation a deed is linked to both ways) — so an organisation's reviewers see its collections' chain claims without a member linking each one. Such a link's `LinkedCollection.linkedBy` is the source's own `companyEntityDid` (an entity DID, where a member's link carries the member's account DID); the hourly re-check holds it to the engine's answer and drops it (`reason: not_company`) when the engine no longer names that company. Only the engine's `ok` links: a `disputed` company, or one the engine does not know, links nothing.\\n\\n**Changes in 1.22.0.** Additive: per-review checker billing for CHAIN claims, on an oracle whose IXO plan allows it (`GET /v1/info` says `reviewBilling.mode: x402`). `PUT` / `GET` / `DELETE /v1/api/source/review-billing` (console only; actions `review-billing/set` · `review-billing/read` · `review-billing/delete`) store, read and drop a source's standing x402-ixo-pay payment delegation — signed by the organisation's CURRENT owner on chain, bound to this oracle alone — which then pays, from the owner's subscription credits, for every review of the organisation's chain collections: each claim is reserved at the oracle's published price before it is decided and settled on the engine's receipt (an engine `unusable` included). New schemas `SetReviewBillingRequest`, `ReviewBilling`, `ReviewBillingState`, `PayerPausedReason`, `ReviewBillingDeleted`. A collection whose reviews cannot be paid pauses `payer-credits` (top up) or `payer-delegation` (store a new delegation), listed in `ReviewBilling.pausedCollections`. `SettlementClaim.claimId` also takes a chain claim's id (`ChainClaimId`, a base32 CIDv1), as a chain review's settlement names it.\\n\\n**Changes in 1.23.0.** No wire change. A linked collection (`LinkedCollection`) stays in the claim reads until a re-check POSITIVELY finds it should go: its member linker no longer may link or no longer owns the collection on chain, the engine names another company or `disputed`, or two re-checks in a row find no such collection. An unreadable chain or engine, or a re-check that did not run, no longer hides it (the reads used to ignore a link not confirmed within 2 hours).\\n\\n**Changes in 1.24.0.** Additive: `ReviewView.duplicates` — one entry per pending `unique:<ruleId>` task the decision engine detailed: `{ taskId, ruleId, score?, prior }`, `score` the duplicate lane's similarity in basis points (0..10000), `prior.outcome` this oracle's decision on the earlier claim (`null` when it has none). `prior.claimId`, `prior.submittedAt` and `prior.files` (the earlier claim's files that matched this claim's by CID, else its images — upload URLs signed exactly like `files`) only when the earlier claim is the same source's under the same protocol; never another organisation's id or files. Omitted when no duplicate task pends.\",\"contact\":{\"name\":\"IXO\",\"url\":\"https://console.ixo.earth\"}},\"servers\":[{\"url\":\"https://oracle.example.org\",\"description\":\"Your oracle (production)\"},{\"url\":\"https://oracle.testnet.example.org\",\"description\":\"Sandbox (testnet; `eo_test_` keys)\"}],\"tags\":[{\"name\":\"claims\",\"description\":\"Submit, read, review and erase claims.\"},{\"name\":\"uploads\",\"description\":\"Files for attachments.\"},{\"name\":\"protocols\",\"description\":\"What each protocol wants and costs.\"},{\"name\":\"account\",\"description\":\"The source.\"},{\"name\":\"webhooks\",\"description\":\"Endpoints, deliveries, and the events themselves.\"},{\"name\":\"meta\",\"description\":\"Machine-readable surface.\"},{\"name\":\"console\",\"description\":\"Decision Console management (UCAN only).\"},{\"name\":\"operator\",\"description\":\"Operator view (UCAN, invoker in `ORACLE_ADMIN_DIDS`).\"}],\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"paths\":{\"/v1/api/claims\":{\"post\":{\"operationId\":\"submitClaim\",\"tags\":[\"claims\"],\"summary\":\"Submit a claim\",\"description\":\"Validates completely before anything is charged or stored (§4.3). Pay-per-call sources answer the first call `402 PAYMENT_REQUIRED` with an `ixo-pay` offer in `PAYMENT-REQUIRED`; the retry carries `PAYMENT-SIGNATURE` for that offer. **Claim identity across the retry:** the offer remembers the claimId it was made for, and the paid retry's claimId is taken from the offer its nonce names — so the claimId in the 402's `resource.url` is the claim's for good, keyed or not. A repeat of an `Idempotency-Key` answers the claim's current state and is never re-charged. `Prefer: wait=N` answers `200` with the record if the decision lands in N seconds, else `202`. The payment's payer must be the source's owner or one of its members (`403 PAYER_NOT_MEMBER`, payments spec §4.3). **`submitter`** is your stable id for the person the claim is about; a protocol with a frequency rule (its work order's `facts.frequency`) counts claims per submitter, so without one — and with no oracle rule to fill it — the claim is refused `400 VALIDATION` at `submitter`, before any payment. It must be opaque — never a name, email or phone number: a payout binds the payee by it.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"},{\"$ref\":\"#/components/parameters/Prefer\"},{\"$ref\":\"#/components/parameters/PaymentSignature\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/SubmitClaimRequest\"},\"examples\":{\"minimal\":{\"summary\":\"Answers only\",\"value\":{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"answers\":{\"deliveryDate\":\"2026-09-21\",\"recipientName\":\"Ama Mensah\",\"packageCount\":3,\"signedByRecipient\":true}}},\"full\":{\"$ref\":\"#/components/examples/SubmitFull\"}}}}},\"responses\":{\"200\":{\"description\":\"Decided within the wait budget — the record (§4.4).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"},\"Preference-Applied\":{\"$ref\":\"#/components/headers/Preference-Applied\"},\"PAYMENT-RESPONSE\":{\"$ref\":\"#/components/headers/PAYMENT-RESPONSE\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ClaimRecord\"},\"examples\":{\"decided\":{\"$ref\":\"#/components/examples/ClaimDecided\"}}}}},\"202\":{\"description\":\"Accepted; the decision arrives by webhook or GET.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"},\"Location\":{\"$ref\":\"#/components/headers/Location\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Accepted\"},\"examples\":{\"accepted\":{\"value\":{\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"status\":\"queued\",\"pollUrl\":\"https://oracle.example.org/v1/api/claims/apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/SubmitRejected\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"402\":{\"$ref\":\"#/components/responses/PaymentRequired\"},\"403\":{\"$ref\":\"#/components/responses/SubmitForbidden\"},\"409\":{\"$ref\":\"#/components/responses/SubmitConflict\"},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/SubmitUnavailable\"}},\"x-required-scope\":\"claims:write\",\"x-capability\":\"claims/submit\",\"x-ucan-action\":\"claims/submit\"},\"get\":{\"operationId\":\"listClaims\",\"tags\":[\"claims\"],\"summary\":\"List claims, newest first\",\"description\":\"Keyset-paginated, newest first by the record's `createdAt`. Without `lane`, a console member gets both lanes — the source's API claims and the chain claims of every collection linked to it, one cursor across both — and an API key gets `api` only, so an integration written before 1.2 never sees a chain record it did not ask for; `lane=chain` (or a `collectionId`) shows a key the linked collections' chain claims. `lane` picks one lane, `collectionId` narrows to one linked collection's chain claims (an unlinked one is an empty page).\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"name\":\"lane\",\"in\":\"query\",\"required\":false,\"schema\":{\"$ref\":\"#/components/schemas/ClaimLane\"},\"example\":\"chain\"},{\"name\":\"collectionId\",\"in\":\"query\",\"required\":false,\"description\":\"One linked collection's chain claims.\",\"schema\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"example\":\"1104\"},{\"name\":\"status\",\"in\":\"query\",\"required\":false,\"schema\":{\"$ref\":\"#/components/schemas/ClaimStatus\"},\"example\":\"processed\"},{\"name\":\"decision\",\"in\":\"query\",\"required\":false,\"description\":\"The decision's status; `pending_review` is the review queue.\",\"schema\":{\"$ref\":\"#/components/schemas/DecisionStatus\"},\"example\":\"pending_review\"},{\"name\":\"protocol\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"},\"example\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"name\":\"verdict\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"enum\":[\"approve\",\"partial\",\"reject\",\"review\"]},\"example\":\"approve\"},{\"name\":\"since\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"format\":\"date-time\"},\"example\":\"2026-09-22T00:00:00Z\"},{\"name\":\"until\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"format\":\"date-time\"},\"example\":\"2026-09-23T00:00:00Z\"},{\"$ref\":\"#/components/parameters/Limit\"},{\"$ref\":\"#/components/parameters/Cursor\"}],\"responses\":{\"200\":{\"description\":\"A page of records.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ClaimPage\"},\"examples\":{\"page\":{\"value\":{\"items\":[{\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"submitter\":\"user-4471\",\"status\":\"processed\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"class\":\"supported\",\"evaluationStatus\":1,\"action\":\"auto_approve\",\"totalBps\":8600,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"},{\"code\":\"not_duplicate\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":8600,\"pending\":false,\"capped\":false}],\"pendingTasks\":[],\"reasons\":[{\"code\":\"all_gates_passed\",\"reason\":\"Every gate passed and the score cleared 7000 bps\",\"class\":\"supported\"}]},\"explanation\":\"Approved: proof attached, not a duplicate, delivery quality 86%.\",\"receipt\":{\"cid\":\"bafyreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku\",\"jws\":\"eyJhbGciOiJFZERTQSIsInR5cCI6InZjK2p3dCIsImtpZCI6ImRpZDp3ZWI6ZXZhbC1lbmdpbmUuaXhvLmVhcnRoI2tleS0xIn0.eyJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiRGVjaXNpb25DcmVkZW50aWFsIl19.8Qk3n2Vb1yZ7xT0pL4mR6sW9aE5cH2jK8fN1gD3vB7uX0qY4tI6oP9lM2wS5rA\"},\"chainStatus\":\"skipped\"},\"review\":null,\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":\"0e36f2f712202b9aa2c54eb2d427bb143a063f3106a1e0daeadbffe8ad8ae871\",\"status\":\"settled\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"delivered\",\"attempts\":1},\"error\":null,\"metadata\":{\"orderId\":\"88213\"},\"createdAt\":\"2026-09-22T12:00:00.000Z\",\"decidedAt\":\"2026-09-22T12:00:07.412Z\"},{\"claimId\":\"apc_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"pending_review\",\"verdict\":\"review\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"decision\":{\"status\":\"pending_review\",\"verdict\":\"review\",\"class\":\"requires_human_review\",\"evaluationStatus\":5,\"action\":\"needs_human_review\",\"totalBps\":null,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":null,\"pending\":true,\"capped\":false}],\"pendingTasks\":[\"confirm_recipient\"],\"reasons\":[{\"code\":\"photo_unclear\",\"reason\":\"The delivery photo does not show the recipient\",\"class\":\"requires_human_review\"}]},\"explanation\":\"A reviewer must confirm the recipient.\",\"receipt\":null,\"chainStatus\":\"skipped\"},\"review\":{\"pendingTasks\":[{\"id\":\"confirm_recipient\",\"prompt\":\"Does the photo show the named recipient accepting the package?\",\"answer\":{\"type\":\"boolean\"}}],\"answeredAt\":null,\"foldedAt\":null,\"foldError\":null,\"answerBy\":\"2026-10-22T11:57:00.000Z\"},\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":null,\"status\":\"reserved\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"failed\",\"attempts\":2},\"error\":null,\"metadata\":{\"orderId\":\"88214\"},\"createdAt\":\"2026-09-22T11:58:00.000Z\",\"decidedAt\":\"2026-09-22T11:58:09.200Z\"}],\"nextCursor\":\"WyIyMDI2LTA5LTIyVDExOjU4OjAwLjAwMFoiLCJhcGNfMDFKOFo2UTRYN04yTTVLOFAzUjlUNlYxVzQiXQ==\"}},\"last\":{\"summary\":\"The last page\",\"value\":{\"items\":[{\"claimId\":\"apc_01J8Z6R8B3C4D5E6F7G8H9J0K1\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"failed\",\"decision\":{\"status\":\"invalid_facts\",\"verdict\":null,\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":null,\"resultDigest\":null,\"decision\":null,\"explanation\":null,\"receipt\":null,\"chainStatus\":\"skipped\"},\"review\":null,\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":\"8f08baed795f984d38a0e319ea1e59682f676fa2222ced72cb907d7831d221ea\",\"status\":\"settled\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"delivered\",\"attempts\":1},\"error\":{\"code\":\"invalid_facts\",\"message\":\"The oracle could not produce the facts this protocol needs.\"},\"metadata\":null,\"createdAt\":\"2026-09-22T11:50:00.000Z\",\"decidedAt\":null}],\"nextCursor\":null}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"claims:read\",\"x-capability\":\"claims/read\",\"x-ucan-action\":\"claims/read\"}},\"/v1/api/claims/batch\":{\"post\":{\"operationId\":\"submitClaimBatch\",\"tags\":[\"claims\"],\"summary\":\"Submit up to 100 claims (async only)\",\"description\":\"ONE offer covers the batch (price × valid items): the paid retry reserves every claim's price (all or none), and each claim settles on its own receipt — its record and `payment.settled` carry the batch's one `settlementId`. The 402's offer remembers the claimIds it was made for, and the paid retry takes them from the offer its nonce names. Per-item validation errors come back inline (`status: rejected`), are never charged, and never fail the batch. With `Idempotency-Key` K, item i's claimId derives from K and i (`apc_` + 40 hex of sha256 of `batch|<sourceId>|K|i`), in its own namespace — a single submit keyed `K:0` names a different claim.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"},{\"$ref\":\"#/components/parameters/PaymentSignature\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/BatchSubmitRequest\"},\"examples\":{\"three\":{\"value\":{\"claims\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"answers\":{\"deliveryDate\":\"2026-09-21\",\"recipientName\":\"Ama Mensah\",\"packageCount\":3,\"signedByRecipient\":true},\"attachments\":[{\"question\":\"deliveryProof\",\"name\":\"site.jpg\",\"mediaType\":\"image/jpeg\",\"url\":\"https://files.example.org/deliveries/88213/site.jpg\",\"cid\":\"bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy\"},{\"question\":\"signedWaybill\",\"uploadId\":\"upl_01J8Z6B2C3D4E5F6G7H8J9K0M1\",\"cid\":\"bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy\",\"mediaType\":\"application/pdf\"}],\"submitter\":\"user-4471\",\"metadata\":{\"orderId\":\"88213\"},\"webhookUrl\":\"https://example.org/hooks/oracle\"},{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"answers\":{\"deliveryDate\":\"2026-09-21\",\"recipientName\":\"Kofi Boateng\",\"packageCount\":3,\"signedByRecipient\":true},\"metadata\":{\"orderId\":\"88215\"}},{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"answers\":{\"deliveryDate\":\"2026-09-21\",\"recipientName\":\"Esi Owusu\"},\"metadata\":{\"orderId\":\"88216\"}}]}}}}}},\"responses\":{\"202\":{\"description\":\"Per-item results.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/BatchSubmitResponse\"},\"examples\":{\"mixed\":{\"value\":{\"items\":[{\"index\":0,\"status\":\"accepted\",\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"pollUrl\":\"https://oracle.example.org/v1/api/claims/apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\"},{\"index\":1,\"status\":\"accepted\",\"claimId\":\"apc_4d2e9a1c7f3b5e8d0a6c2f4b9e1d3a5c7f8b0d2e\",\"pollUrl\":\"https://oracle.example.org/v1/api/claims/apc_4d2e9a1c7f3b5e8d0a6c2f4b9e1d3a5c7f8b0d2e\"},{\"index\":2,\"status\":\"rejected\",\"error\":{\"code\":\"VALIDATION\",\"message\":\"Some fields in the request are missing or invalid — details.issues lists each one.\",\"details\":{\"issues\":[{\"path\":\"answers.packageCount\",\"message\":\"Required\"}]},\"docsUrl\":\"https://console.ixo.earth/docs/errors#VALIDATION\"}}]}}}}}},\"400\":{\"$ref\":\"#/components/responses/SubmitRejected\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"402\":{\"$ref\":\"#/components/responses/PaymentRequired\"},\"403\":{\"$ref\":\"#/components/responses/SubmitForbidden\"},\"409\":{\"$ref\":\"#/components/responses/IdempotencyMismatch\"},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/SubmitUnavailable\"}},\"x-required-scope\":\"claims:write\",\"x-capability\":\"claims/submit\",\"x-ucan-action\":\"claims/submit\"}},\"/v1/api/claims/{claimId}\":{\"get\":{\"operationId\":\"getClaim\",\"tags\":[\"claims\"],\"summary\":\"Read a claim's record\",\"description\":\"Status, decision, receipt, pending review tasks, payment and webhook state — never the body. `?wait=N` or `Prefer: wait=N` long-polls for the decision. A chain claim of a collection linked to the source reads here too (lane `chain`, `sourceId` = this source).\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/AnyClaimIdPath\"},{\"$ref\":\"#/components/parameters/WaitQuery\"},{\"$ref\":\"#/components/parameters/Prefer\"}],\"responses\":{\"200\":{\"description\":\"The record (§4.4).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"},\"Preference-Applied\":{\"$ref\":\"#/components/headers/Preference-Applied\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ClaimRecord\"},\"examples\":{\"decided\":{\"$ref\":\"#/components/examples/ClaimDecided\"},\"pendingReview\":{\"$ref\":\"#/components/examples/ClaimPendingReview\"},\"failed\":{\"$ref\":\"#/components/examples/ClaimFailed\"}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"claims:read\",\"x-capability\":\"claims/read\",\"x-ucan-action\":\"claims/read\"}},\"/v1/api/claims/{claimId}/payment/refresh\":{\"post\":{\"operationId\":\"refreshClaimPayment\",\"tags\":[\"claims\"],\"summary\":\"Re-read a claim's card refund now\",\"description\":\"Asks the payment facilitator whether this claim's card payment was refunded, records its answer, and returns the record. The oracle also picks refunds up on its own, so this is for right after a refund. Only the facilitator's word is recorded. Idempotent, so no `Idempotency-Key`; a claim without a card payment returns its record unchanged. API claims only — a linked collection's chain claim is `404`.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/ClaimIdPath\"}],\"responses\":{\"200\":{\"description\":\"The record (§4.4), with the payment as the facilitator reports it now.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ClaimRecord\"},\"examples\":{\"refunded\":{\"$ref\":\"#/components/examples/ClaimCardRefunded\"}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-required-scope\":\"claims:read\",\"x-capability\":\"claims/read\",\"x-ucan-action\":\"claims/refresh-payment\"}},\"/v1/api/claims/{claimId}/events\":{\"get\":{\"operationId\":\"getClaimEvents\",\"tags\":[\"claims\"],\"summary\":\"The claim's timeline\",\"description\":\"Names, codes and durations — never a fact value. A linked collection's chain claim has a timeline derived from its ledger rows.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/AnyClaimIdPath\"}],\"responses\":{\"200\":{\"description\":\"Oldest first.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ClaimEvents\"},\"examples\":{\"timeline\":{\"value\":{\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"items\":[{\"id\":\"evt_01J8Z6Q4X7N2M5K8P3R9T6V1W5\",\"type\":\"accepted\",\"at\":\"2026-09-22T12:00:00.000Z\",\"data\":null},{\"id\":\"evt_01J8Z6Q4X7N2M5K8P3R9T6V2W5\",\"type\":\"paid\",\"at\":\"2026-09-22T12:00:00.310Z\",\"data\":{\"settlementId\":\"0e36f2f712202b9aa2c54eb2d427bb143a063f3106a1e0daeadbffe8ad8ae871\",\"amount\":\"1200000\",\"asset\":\"upay\"}},{\"id\":\"evt_01J8Z6Q4X7N2M5K8P3R9T6V3W5\",\"type\":\"facts_produced\",\"at\":\"2026-09-22T12:00:03.118Z\",\"data\":{\"ext\":[\"addressCheck\"],\"ai\":[\"photoShowsDelivery\"],\"durationsMs\":{\"ext.addressCheck\":412,\"ai.photoShowsDelivery\":2210},\"costMicroUsd\":1840}},{\"id\":\"evt_01J8Z6Q4X7N2M5K8P3R9T6V4W5\",\"type\":\"decided\",\"at\":\"2026-09-22T12:00:07.412Z\",\"data\":{\"verdict\":\"approve\",\"receiptCid\":\"bafyreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku\"}},{\"id\":\"evt_01J8Z6Q4X7N2M5K8P3R9T6V5W5\",\"type\":\"webhook_attempt\",\"at\":\"2026-09-22T12:00:07.900Z\",\"data\":{\"deliveryId\":\"wh:evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4:whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\",\"attempt\":1,\"statusCode\":200}}]}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"claims:read\",\"x-capability\":\"claims/read\",\"x-ucan-action\":\"claims/read\"}},\"/v1/api/claims/{claimId}/receipt\":{\"get\":{\"operationId\":\"getClaimReceipt\",\"tags\":[\"claims\"],\"summary\":\"The engine's signed receipt\",\"description\":\"Everything needed to verify offline. 404 until the decision is final (a `pending_review` decision has no receipt yet).\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/AnyClaimIdPath\"}],\"responses\":{\"200\":{\"description\":\"The receipt.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Receipt\"},\"examples\":{\"receipt\":{\"value\":{\"cid\":\"bafyreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku\",\"jws\":\"eyJhbGciOiJFZERTQSIsInR5cCI6InZjK2p3dCIsImtpZCI6ImRpZDp3ZWI6ZXZhbC1lbmdpbmUuaXhvLmVhcnRoI2tleS0xIn0.eyJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiRGVjaXNpb25DcmVkZW50aWFsIl19.8Qk3n2Vb1yZ7xT0pL4mR6sW9aE5cH2jK8fN1gD3vB7uX0qY4tI6oP9lM2wS5rA\",\"issuerKeysUrl\":\"https://eval-engine.ixo.earth/v1/issuer-keys\",\"verifyUrl\":\"https://eval-engine.ixo.earth/v1/receipts/bafyreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku\"}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"claims:read\",\"x-capability\":\"claims/read\",\"x-ucan-action\":\"claims/read\"}},\"/v1/api/claims/{claimId}/report\":{\"get\":{\"operationId\":\"getClaimReport\",\"tags\":[\"claims\"],\"summary\":\"The engine's human-readable decision report\",\"description\":\"Proxied from the engine under the oracle's UCAN; HTML or JSON by `Accept`.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/AnyClaimIdPath\"}],\"responses\":{\"200\":{\"description\":\"The report.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"text/html\":{\"schema\":{\"type\":\"string\"},\"examples\":{\"html\":{\"value\":\"<!doctype html><html><head><title>Decision apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f</title></head><body><h1>Approved</h1><p>Every gate passed; delivery quality 86%.</p></body></html>\"}}},\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DecisionReport\"},\"examples\":{\"report\":{\"value\":{\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"verdict\":\"approve\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"sections\":[{\"title\":\"Gates\",\"items\":[\"proof_attached: passed\",\"not_duplicate: passed\"]}]}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-required-scope\":\"claims:read\",\"x-capability\":\"claims/read\",\"x-ucan-action\":\"claims/read\"}},\"/v1/api/claims/{claimId}/review\":{\"get\":{\"operationId\":\"getClaimReview\",\"tags\":[\"claims\"],\"x-spec-delta\":true,\"summary\":\"What a reviewer needs to answer\",\"description\":\"The ONLY read that returns a claim's answers (and its files), and only while the claim awaits review: `409 NOT_PENDING_REVIEW` otherwise, or once its body was erased. Send `resultDigest` back as `answeredAgainst`. A paid claim carries `answerBy`: past it the view still serves the claim, but an answer is `409 REVIEW_EXPIRED`. File URLs are the attachment's own https URL or a short-lived signed read of an upload. Every read writes an audit row. Another source's claim is `404`, and so is a linked collection's chain claim: API claims only.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/ClaimIdPath\"}],\"responses\":{\"200\":{\"description\":\"The pending review.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ReviewView\"},\"examples\":{\"pending\":{\"value\":{\"claimId\":\"apc_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"pendingTasks\":[{\"id\":\"confirm_recipient\",\"prompt\":\"Does the photo show the named recipient accepting the package?\",\"answer\":{\"type\":\"boolean\"}}],\"answers\":{\"deliveryDate\":\"2026-09-21\",\"recipientName\":\"Kofi Boateng\",\"packageCount\":2,\"signedByRecipient\":false},\"files\":[{\"question\":\"deliveryProof\",\"name\":\"site.jpg\",\"mediaType\":\"image/jpeg\",\"url\":\"https://files.example.org/deliveries/88214/site.jpg\"},{\"question\":\"signedWaybill\",\"name\":null,\"mediaType\":\"application/pdf\",\"url\":\"https://oracle.example.org/v1/api/files/upl_01J8Z6B2C3D4E5F6G7H8J9K0M1?src=src_01J8Z6Q4X7N2M5K8P3R9T6V1W2&exp=1790000000&sig=Jm3kQx9ZpV2r7bNc4tYw1uL8sA6dF0gH\"}],\"submittedAt\":\"2026-09-22T11:58:00.000Z\",\"answerBy\":\"2026-10-22T11:57:00.000Z\",\"canAnswer\":{\"ok\":true},\"erroredFacts\":[{\"name\":\"ext.waybillLookup\",\"detail\":\"courier API answered 503 on all 3 attempts\"}],\"duplicates\":[{\"taskId\":\"unique:same-delivery-photo\",\"ruleId\":\"same-delivery-photo\",\"score\":9100,\"prior\":{\"outcome\":\"approve\",\"claimId\":\"apc_01J8Z5M1X7N2M5K8P3R9T6V1W3\",\"submittedAt\":\"2026-09-18T09:12:00.000Z\",\"files\":[{\"question\":\"deliveryProof\",\"name\":\"site.jpg\",\"mediaType\":\"image/jpeg\",\"url\":\"https://oracle.example.org/v1/api/files/upl_01J8Z5M2C3D4E5F6G7H8J9K0M1?src=src_01J8Z6Q4X7N2M5K8P3R9T6V1W2&exp=1790000000&sig=Jm3kQx9ZpV2r7bNc4tYw1uL8sA6dF0gH\"}]}}]}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/NotPendingReview\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"claims:write\",\"x-capability\":\"claims/review\",\"x-ucan-action\":\"reviews/read\"},\"post\":{\"operationId\":\"submitReview\",\"tags\":[\"claims\"],\"summary\":\"Answer a pending review\",\"description\":\"Answers covering exactly the pending tasks, signed by a member's registered reviewer key (`did:key`) with its two-link `reviewerGrant` — or, by an organisation controller answering as root (1.11.0), with a key on its own `did:ixo` plus its `reviewerGrant` to itself. Spawns `ReviewComplete`, which folds the answers into the same decision; `claim.folded` follows. A re-POST before the fold replaces the answers (and clears a `foldError`). API claims only — a linked collection's chain claim is `404`.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/ClaimIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ReviewRequest\"},\"examples\":{\"answer\":{\"value\":{\"answers\":{\"confirm_recipient\":true},\"attestation\":\"eyJhbGciOiJFZERTQSIsInR5cCI6InZjK2p3dCIsImN0eSI6InZjIiwia2lkIjoiZGlkOmtleTp6Nk1raGFYZ0JaRHZvdERrTDUyNTdmYWl6dGlHaUMyUXRLTEdwYm5uRUd0YTJkb0sifQ.eyJjcmVkZW50aWFsU3ViamVjdCI6eyJjbGFpbUlkIjoiYXBjXzAxSjhaNlE0WDdOMk01SzhQM1I5VDZWMVc0In19.c2lnbmVkLWJ5LXRoZS1yZXZpZXdlcnMta2V5\",\"answeredAgainst\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"reviewerGrant\":\"OqJlcm9vdHOB2CpYJQABcRIgdHdvLWxpbmstbWVtYmVyLWdyYW50LXRvLWtleWd2ZXJzaW9uAQ==\"}},\"controller\":{\"summary\":\"An organisation controller (root), with its grant to itself\",\"value\":{\"answers\":{\"confirm_recipient\":true},\"attestation\":\"eyJhbGciOiJFZERTQSIsInR5cCI6InZjK2p3dCIsImN0eSI6InZjIiwia2lkIjoiZGlkOmtleTp6Nk1raGFYZ0JaRHZvdERrTDUyNTdmYWl6dGlHaUMyUXRLTEdwYm5uRUd0YTJkb0sifQ.eyJjcmVkZW50aWFsU3ViamVjdCI6eyJjbGFpbUlkIjoiYXBjXzAxSjhaNlE0WDdOMk01SzhQM1I5VDZWMVc0In19.c2lnbmVkLWJ5LXRoZS1jb250cm9sbGVycy1rZXk\",\"answeredAgainst\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"reviewerGrant\":\"OqJlcm9vdHOB2CpYJQABcRIgc2VsZi1ncmFudC1vZi10aGUtY29udHJvbGxlcmd2ZXJzaW9uAQ==\"}}}}}},\"responses\":{\"202\":{\"description\":\"The stored review; the fold runs next.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ReviewRow\"},\"examples\":{\"stored\":{\"value\":{\"claimId\":\"apc_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"answers\":{\"confirm_recipient\":true},\"reviewerDid\":\"did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK\",\"answeredAt\":\"2026-09-22T14:10:00.000Z\",\"foldedAt\":null,\"foldError\":null}}}}}},\"400\":{\"$ref\":\"#/components/responses/ReviewRejected\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/ReviewForbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"description\":\"`NOT_PENDING_REVIEW` — the claim is not awaiting answers (never was, already folded, its body was erased, or `answeredAgainst` is stale). `REVIEW_EXPIRED` — a paid claim answered past its `answerBy`: the payment reservation ran out, so it can no longer be paid; nothing is written (`details.answerBy`). Or the idempotency 409s. `IDEMPOTENCY_MISMATCH` — this `Idempotency-Key` was used with a different request; `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"NOT_PENDING_REVIEW\":{\"value\":{\"error\":{\"code\":\"NOT_PENDING_REVIEW\",\"message\":\"This claim isn't waiting for review answers; it may already be decided. Reload it to see its current status.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#NOT_PENDING_REVIEW\"}}},\"REVIEW_EXPIRED\":{\"value\":{\"error\":{\"code\":\"REVIEW_EXPIRED\",\"message\":\"This review closed on 22 Oct 2026, 11:57 UTC: its payment reservation expired, so answering now can't be paid. Nothing was changed.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"answerBy\":\"2026-10-22T11:57:00.000Z\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#REVIEW_EXPIRED\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/ReviewUnavailable\"}},\"x-required-scope\":\"claims:write\",\"x-capability\":\"claims/review\",\"x-ucan-action\":\"reviews/submit\"}},\"/v1/api/claims/{claimId}/body\":{\"delete\":{\"operationId\":\"eraseClaimBody\",\"tags\":[\"claims\"],\"summary\":\"Erase the stored answers\",\"description\":\"The only way a claim's answers, uploads, check transcripts and registry text are deleted — nothing expires them. The decision, digests and receipt survive; a pending review can no longer fold. Idempotent. `409 CONFLICT` while the claim is still being decided (its run has read the answers); erase it once it is decided. API claims only — a linked collection's chain claim is `404` (its owner erases it on the chain lane, `DELETE /v1/claims/{claimId}/body`).\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/ClaimIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"204\":{\"description\":\"Erased (or already erased).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"description\":\"`CONFLICT` — the claim is still being decided; erase it once it is. Or, from the `Idempotency-Key`, `IDEMPOTENCY_MISMATCH` or `CONFLICT` (in flight, `Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"CONFLICT_deciding\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"Claim apc_7f3a9c1d is still being decided; erase it once it's decided.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"}}}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"claims:write\",\"x-capability\":\"settings/manage\",\"x-ucan-action\":\"claims/erase\"}},\"/v1/api/uploads\":{\"put\":{\"operationId\":\"uploadFile\",\"tags\":[\"uploads\"],\"summary\":\"Upload one file (≤ 25 MB)\",\"description\":\"Streams the body into R2 under the source. Reference the file from a claim by `attachments[].uploadId` (the oracle reads the object itself, so no URL can expire under a slow retry); `url` is a short-lived signed read for a person to look at it. Objects are deleted by the claim's erase, never on a clock. `Content-Type` is only a hint, since the oracle sniffs the bytes and stores that type. No `Idempotency-Key` — an upload is content-addressed (the same bytes give the same `cid`), so a retried upload only leaves an unused copy, deleted with the source.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"name\":\"name\",\"in\":\"query\",\"required\":false,\"description\":\"The file's original name.\",\"schema\":{\"type\":\"string\",\"maxLength\":256},\"example\":\"site.jpg\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/octet-stream\":{\"schema\":{\"type\":\"string\",\"format\":\"binary\"},\"example\":\"<file bytes>\"},\"image/*\":{\"schema\":{\"type\":\"string\",\"format\":\"binary\"},\"example\":\"<file bytes>\"},\"application/pdf\":{\"schema\":{\"type\":\"string\",\"format\":\"binary\"},\"example\":\"<file bytes>\"}}},\"responses\":{\"201\":{\"description\":\"Stored.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Upload\"},\"examples\":{\"stored\":{\"value\":{\"uploadId\":\"upl_01J8Z6B2C3D4E5F6G7H8J9K0M1\",\"url\":\"https://oracle.example.org/v1/api/files/upl_01J8Z6B2C3D4E5F6G7H8J9K0M1?exp=1790000000&sig=Jm3kQx9ZpV2r7bNc4tYw1uL8sA6dF0gH\",\"cid\":\"bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy\",\"mediaType\":\"image/jpeg\",\"size\":482133}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"409\":{\"$ref\":\"#/components/responses/SourceNotLinked\"},\"413\":{\"description\":\"`PAYLOAD_TOO_LARGE` — over 25 MB.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"PAYLOAD_TOO_LARGE\":{\"value\":{\"error\":{\"code\":\"PAYLOAD_TOO_LARGE\",\"message\":\"This file is larger than the 25 MB upload limit. Upload a smaller file, or attach it by URL.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"limit\":25000000},\"docsUrl\":\"https://console.ixo.earth/docs/errors#PAYLOAD_TOO_LARGE\"}}}}}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"501\":{\"$ref\":\"#/components/responses/UploadsDisabled\"}},\"x-required-scope\":\"claims:write\",\"x-capability\":\"claims/submit\",\"x-ucan-action\":\"uploads/create\"}},\"/v1/api/uploads/links\":{\"post\":{\"operationId\":\"createUploadLink\",\"tags\":[\"uploads\"],\"summary\":\"Create a one-use upload link\",\"description\":\"For a client that must not hold the API key — an AI app's sandboxed widget, a browser. No body. `uploadUrl` is a signed `PUT /v1/api/uploads/{uploadId}` that takes ONE file (≤ 25 MB) with no `Authorization` until `expiresAt` (10 minutes); the file lands under this source as an ordinary upload, readable with `GET /v1/api/uploads/{uploadId}` once used. At most 100 links per source per 10 minutes (`429 RATE_LIMITED`, approximate).\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"}],\"responses\":{\"201\":{\"description\":\"The link. Nothing is stored until it is used.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/UploadLink\"},\"examples\":{\"created\":{\"value\":{\"uploadId\":\"upl_01J8Z6B2C3D4E5F6G7H8J9K0M1\",\"uploadUrl\":\"https://oracle.example.org/v1/api/uploads/upl_01J8Z6B2C3D4E5F6G7H8J9K0M1?exp=1790000000&sig=3f6c1d0e9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d\",\"expiresAt\":\"2026-09-21T14:13:20.000Z\"}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"409\":{\"$ref\":\"#/components/responses/SourceNotLinked\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"501\":{\"$ref\":\"#/components/responses/UploadsDisabled\"}},\"x-required-scope\":\"claims:write\",\"x-capability\":\"claims/submit\",\"x-ucan-action\":\"uploads/link\"}},\"/v1/api/uploads/{uploadId}\":{\"put\":{\"operationId\":\"putUploadByLink\",\"tags\":[\"uploads\"],\"summary\":\"Upload one file through an upload link (≤ 25 MB)\",\"description\":\"Public — the link's signature is the credential, so send no `Authorization`. `PUT` the bytes to the `uploadUrl` that `POST /v1/api/uploads/links` returned, exactly as given; the answer is the same `Upload` as `PUT /v1/api/uploads`, under the link's `uploadId`. A link works once (`409 CONFLICT` after), and an expired, edited or unknown link is `403 FORBIDDEN` before any byte is read. Cross-origin callers are allowed from any origin (a sandboxed `null` origin included), without credentials. The source must be active (`503 SOURCE_PAUSED`).\",\"security\":[],\"parameters\":[{\"$ref\":\"#/components/parameters/UploadIdPath\"},{\"name\":\"src\",\"in\":\"query\",\"required\":true,\"description\":\"The source the link was minted for, bound by `sig`.\",\"schema\":{\"type\":\"string\"},\"example\":\"src_01J8Z6Q4X7N2M5K8P3R9T6V1W2\"},{\"name\":\"exp\",\"in\":\"query\",\"required\":true,\"schema\":{\"type\":\"integer\"},\"example\":1790000000},{\"name\":\"sig\",\"in\":\"query\",\"required\":true,\"schema\":{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{64}$\"},\"example\":\"3f6c1d0e9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6f5a4b3c2d\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/octet-stream\":{\"schema\":{\"type\":\"string\",\"format\":\"binary\"},\"example\":\"<file bytes>\"},\"image/*\":{\"schema\":{\"type\":\"string\",\"format\":\"binary\"},\"example\":\"<file bytes>\"},\"application/pdf\":{\"schema\":{\"type\":\"string\",\"format\":\"binary\"},\"example\":\"<file bytes>\"}}},\"responses\":{\"201\":{\"description\":\"Stored.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Upload\"},\"examples\":{\"stored\":{\"value\":{\"uploadId\":\"upl_01J8Z6B2C3D4E5F6G7H8J9K0M1\",\"url\":\"https://oracle.example.org/v1/api/files/upl_01J8Z6B2C3D4E5F6G7H8J9K0M1?exp=1790000000&sig=Jm3kQx9ZpV2r7bNc4tYw1uL8sA6dF0gH\",\"cid\":\"bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy\",\"mediaType\":\"image/jpeg\",\"size\":482133}}}}}},\"403\":{\"description\":\"`FORBIDDEN` — the link expired, was never minted here, or its signature does not match. Nothing was read or stored; ask for a new link.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"FORBIDDEN\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"This upload link has expired, was already used, or is not valid. Ask for a new one (POST /v1/api/uploads/links).\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}}}}}},\"404\":{\"description\":\"`NOT_FOUND` — the link's source no longer exists.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"NOT_FOUND\":{\"value\":{\"error\":{\"code\":\"NOT_FOUND\",\"message\":\"Source src_01J8Z6Q4X7N2M5K8P3R9T6V1W4 was not found.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#NOT_FOUND\"}}}}}}},\"409\":{\"description\":\"`CONFLICT` — the link was already used; nothing was stored. Read the upload with `GET /v1/api/uploads/{uploadId}`. Or `SOURCE_PENDING_LINK` / `SOURCE_DISPUTED` (v1.8) — the link's source is not linked to its organisation (any more); nothing was stored.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"SOURCE_PENDING_LINK\":{\"$ref\":\"#/components/examples/SourcePendingLinkError\"},\"SOURCE_DISPUTED\":{\"$ref\":\"#/components/examples/SourceDisputedError\"},\"CONFLICT\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"Upload link upl_01J8Z6B2C3D4E5F6G7H8J9K0M1 was already used. Read the file with GET /v1/api/uploads/upl_01J8Z6B2C3D4E5F6G7H8J9K0M1, or ask for a new link.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}}}}}},\"413\":{\"description\":\"`PAYLOAD_TOO_LARGE` — over 25 MB.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"PAYLOAD_TOO_LARGE\":{\"value\":{\"error\":{\"code\":\"PAYLOAD_TOO_LARGE\",\"message\":\"This file is larger than the 25 MB upload limit. Upload a smaller file, or attach it by URL.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"limit\":25000000},\"docsUrl\":\"https://console.ixo.earth/docs/errors#PAYLOAD_TOO_LARGE\"}}}}}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"501\":{\"$ref\":\"#/components/responses/UploadsDisabled\"},\"503\":{\"description\":\"`SOURCE_PAUSED` — the link's source is paused (`details.reason`); nothing was stored.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"SOURCE_PAUSED\":{\"value\":{\"error\":{\"code\":\"SOURCE_PAUSED\",\"message\":\"This source is paused, so it can't take uploads right now. Retry once it is resumed.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"operator\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#SOURCE_PAUSED\"}}}}}}}}},\"get\":{\"operationId\":\"getUpload\",\"tags\":[\"uploads\"],\"summary\":\"Read one of the source's uploads\",\"description\":\"The upload's metadata with a fresh signed read `url`. `404` until a link's upload has been used (there is no pending state), for another source's upload, and once the claim that uses it was erased.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/UploadIdPath\"}],\"responses\":{\"200\":{\"description\":\"The upload.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Upload\"},\"examples\":{\"upload\":{\"value\":{\"uploadId\":\"upl_01J8Z6B2C3D4E5F6G7H8J9K0M1\",\"url\":\"https://oracle.example.org/v1/api/files/upl_01J8Z6B2C3D4E5F6G7H8J9K0M1?exp=1790000000&sig=Jm3kQx9ZpV2r7bNc4tYw1uL8sA6dF0gH\",\"cid\":\"bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy\",\"mediaType\":\"image/jpeg\",\"size\":482133}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"description\":\"`NOT_FOUND` — no such upload of this source (a link not used yet included), or deleted by its claim's erase.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"NOT_FOUND\":{\"value\":{\"error\":{\"code\":\"NOT_FOUND\",\"message\":\"Upload upl_01J8Z6B2C3D4E5F6G7H8J9K0M1 was not found: it was never uploaded, its link was not used yet, or its claim was erased.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#NOT_FOUND\"}}}}}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"claims:read\",\"x-capability\":\"claims/read\",\"x-ucan-action\":\"uploads/read\"},\"delete\":{\"operationId\":\"deleteUpload\",\"tags\":[\"uploads\"],\"summary\":\"Delete an upload no claim uses\",\"description\":\"Nothing expires an upload, so this is how a file no claim ever named (an abandoned submit, a retry's spare copy) is deleted. A file a claim names is deleted by that claim's erase (`DELETE /v1/api/claims/{claimId}/body`), so it is `409` here. Idempotent — an unknown or already-deleted upload of this source is `204` too.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/UploadIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"204\":{\"description\":\"Deleted (or there was nothing to delete).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"409\":{\"description\":\"`CONFLICT` — a claim names this upload: erase the claim, which deletes its files. Or, from the `Idempotency-Key`, `IDEMPOTENCY_MISMATCH` or `CONFLICT` (in flight, `Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"CONFLICT_bound\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"Upload upl_01J8Z6B2C3D4E5F6G7H8J9K0M1 belongs to claim apc_7f3a9c1d: erase the claim (DELETE /v1/api/claims/apc_7f3a9c1d/body), which deletes its files.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}}}}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"claims:write\",\"x-capability\":\"settings/manage\",\"x-ucan-action\":\"uploads/delete\"}},\"/v1/api/files/{uploadId}\":{\"get\":{\"operationId\":\"getFile\",\"tags\":[\"uploads\"],\"summary\":\"Read an uploaded file by signed URL\",\"description\":\"Public, authenticated by the signature the upload returned (§6.2); the object is never public in R2.\",\"security\":[],\"parameters\":[{\"$ref\":\"#/components/parameters/UploadIdPath\"},{\"name\":\"exp\",\"in\":\"query\",\"required\":true,\"schema\":{\"type\":\"integer\"},\"example\":1790000000},{\"name\":\"sig\",\"in\":\"query\",\"required\":true,\"schema\":{\"type\":\"string\"},\"example\":\"Jm3kQx9ZpV2r7bNc4tYw1uL8sA6dF0gH\"}],\"responses\":{\"200\":{\"description\":\"The bytes, with the stored media type.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/octet-stream\":{\"schema\":{\"type\":\"string\",\"format\":\"binary\"},\"example\":\"<file bytes>\"}}},\"401\":{\"$ref\":\"#/components/responses/FileUnauthorized\"},\"404\":{\"description\":\"`NOT_FOUND` — no such upload (or erased with its claim).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"NOT_FOUND\":{\"value\":{\"error\":{\"code\":\"NOT_FOUND\",\"message\":\"File upl_01J8Z6B2C3D4E5F6G7H8J9K0M1 was not found; it may have been erased with its claim.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#NOT_FOUND\"}}}}}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}}}},\"/v1/api/protocols\":{\"get\":{\"operationId\":\"listProtocols\",\"tags\":[\"protocols\"],\"summary\":\"Protocols and their prices\",\"security\":[{},{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"}],\"responses\":{\"200\":{\"description\":\"Allowed protocols with their price.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ProtocolList\"},\"examples\":{\"list\":{\"value\":{\"items\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"name\":\"Passport delivery\",\"price\":{\"amountMicroUsd\":1200000,\"amountCents\":120,\"currency\":\"USD\",\"amount\":\"1200000\",\"asset\":\"upay\"}},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\",\"name\":\"Clinic visit\",\"price\":{\"amountMicroUsd\":2500000,\"amountCents\":250,\"currency\":\"USD\",\"amount\":\"2500000\",\"asset\":\"upay\"}},{\"protocolDid\":\"did:ixo:entity:9d1f3b5a7c9e1a3c5e7b9d1f3a5c7e9b\",\"name\":\"Crop survey\",\"price\":null}]}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":null,\"description\":\"PUBLIC. Without a credential: the oracle's published catalogue — its supported protocols, every protocol an operator enabled for a source and, while per-review billing is active, the protocol of every watched chain collection billed per review, with their prices — for the marketplace and for the facilitator's price check (payments spec §3.1: an offer whose per-claim price differs is refused); answered with `Cache-Control: public, max-age=300`. With a credential: the source's allowed protocols, narrowed by a member's `nb.protocols`. The price is the protocol's alone — there are no per-source prices — and `price: null` means none is published: nothing is offered for that protocol (v1.1.1).\",\"x-capability\":\"public\",\"x-ucan-action\":\"protocols/read\"}},\"/v1/api/protocols/{did}\":{\"get\":{\"operationId\":\"getProtocol\",\"tags\":[\"protocols\"],\"summary\":\"One protocol's work order\",\"description\":\"PUBLIC, like the list: without a credential, any protocol in the oracle's published catalogue; with one, only the source's allowed protocols. What to send (JSON Schema for `answers` from the claim form, file questions and limits), the facts that will be produced (names only), review tasks, price and an example body. The facilitator reads `price` here to check every offer (`price: null`: none published, so nothing is offered). A rubric that cannot bind to its form is `503 SOURCE_PAUSED { reason: rubric-unusable }`.\",\"security\":[{},{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/ProtocolDidPath\"}],\"responses\":{\"200\":{\"description\":\"The work order.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ProtocolWorkOrder\"},\"examples\":{\"workOrder\":{\"value\":{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"name\":\"Passport delivery\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"answers\":{\"$schema\":\"https://json-schema.org/draft/2020-12/schema\",\"type\":\"object\",\"required\":[\"deliveryDate\",\"recipientName\",\"packageCount\",\"signedByRecipient\"],\"properties\":{\"deliveryDate\":{\"type\":\"string\",\"format\":\"date\"},\"recipientName\":{\"type\":\"string\",\"minLength\":1},\"packageCount\":{\"type\":\"integer\",\"minimum\":1},\"signedByRecipient\":{\"type\":\"boolean\"}},\"additionalProperties\":false},\"files\":[{\"question\":\"deliveryProof\",\"required\":true,\"mediaTypes\":[\"image/jpeg\",\"image/png\"],\"maxBytes\":10000000}],\"facts\":{\"ext\":[\"addressCheck\"],\"ai\":[\"photoShowsDelivery\"],\"unique\":true,\"frequency\":false},\"reviewTasks\":[{\"id\":\"confirm_recipient\",\"prompt\":\"Does the photo show the named recipient accepting the package?\",\"answer\":{\"type\":\"boolean\"}}],\"price\":{\"amountMicroUsd\":1200000,\"amountCents\":120,\"currency\":\"USD\",\"amount\":\"1200000\",\"asset\":\"upay\"},\"example\":{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"answers\":{\"deliveryDate\":\"2026-09-21\",\"recipientName\":\"Ama Mensah\",\"packageCount\":3,\"signedByRecipient\":true},\"attachments\":[{\"question\":\"deliveryProof\",\"name\":\"site.jpg\",\"mediaType\":\"image/jpeg\",\"url\":\"https://files.example.org/deliveries/88213/site.jpg\",\"cid\":\"bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy\"},{\"question\":\"signedWaybill\",\"uploadId\":\"upl_01J8Z6B2C3D4E5F6G7H8J9K0M1\",\"cid\":\"bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy\",\"mediaType\":\"application/pdf\"}],\"submitter\":\"user-4471\",\"metadata\":{\"orderId\":\"88213\"},\"webhookUrl\":\"https://example.org/hooks/oracle\"}}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"description\":\"`NOT_FOUND` — not in the oracle's catalogue, or (with a credential) not one of the source's allowed protocols.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"NOT_FOUND\":{\"value\":{\"error\":{\"code\":\"NOT_FOUND\",\"message\":\"Protocol did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b is not enabled for this source. Ask this oracle's operator to enable it.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#NOT_FOUND\"}}}}}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-required-scope\":null,\"x-capability\":\"public\",\"x-ucan-action\":\"protocols/read\"}},\"/v1/api/me\":{\"get\":{\"operationId\":\"getMe\",\"tags\":[\"account\"],\"summary\":\"The source, as the caller sees it\",\"description\":\"Source record, limits, paused reason, and who is calling (`caller`: a key's scopes, or a member's role, capabilities and protocols — the console gates its screens on it). Least exposure (§14): `members` only to a console member (never an API key); `keys` to a key or a member with `keys/manage`; `webhookEndpoints` to a key with `webhooks:manage` or a member with `webhooks/manage`; `credits` to a key or a member with `spend/read`. `credits` is the facilitator's balance for the source's owner (base units of `upay`, 1 upay = 1 micro-USD), and null when the source pays nothing here (billing mode `none`, payments off) or the facilitator could not be read.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"}],\"responses\":{\"200\":{\"description\":\"The account.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Me\"},\"examples\":{\"member\":{\"summary\":\"The owner, from the console\",\"value\":{\"caller\":{\"kind\":\"member\",\"memberId\":\"mem_01J8Z5A1B2C3D4E5F6G7H8J9K1\",\"did\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"role\":\"owner\",\"capabilities\":[\"source/*\"],\"protocols\":null},\"source\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"active\",\"pausedReason\":null,\"billingMode\":\"x402\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}],\"refillFloorCents\":2000,\"defaultWebhookUrl\":\"https://example.org/hooks/oracle\",\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"},\"members\":[{\"memberId\":\"mem_01J8Z5A1B2C3D4E5F6G7H8J9K1\",\"did\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"email\":\"founder@acme.example\",\"role\":\"owner\",\"status\":\"active\",\"capabilities\":[\"source/*\"],\"protocols\":null,\"expiresAt\":null,\"delegationCid\":null,\"revokedAt\":null,\"reviewerDid\":\"did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK\",\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-01T09:00:00.000Z\",\"acceptedAt\":\"2026-09-01T09:00:00.000Z\"},{\"memberId\":\"mem_01J8ZB7C8D9E0F1G2H3J4K5M6N\",\"did\":\"did:ixo:ixo1v3n5q7s9u2w4y6a8c0e2g4j6l8n0p2r4t6w8y0\",\"email\":\"reviewer@acme.example\",\"role\":\"reviewer\",\"status\":\"active\",\"capabilities\":[\"claims/read\",\"claims/review\"],\"protocols\":[\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"],\"expiresAt\":\"2026-12-31T23:59:59.000Z\",\"delegationCid\":\"bafyreigq7hzk2wdn5vr3xl6m4c8tjp2yeaos6ubd7fhk3nwq5ziv4rlxte\",\"revokedAt\":null,\"reviewerDid\":\"did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH\",\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-10T08:00:00.000Z\",\"acceptedAt\":\"2026-09-10T08:30:00.000Z\"},{\"memberId\":\"mem_01J8Z9D4E5F6G7H8J9K0M1N2P3\",\"did\":null,\"email\":\"dev@acme.example\",\"role\":\"developer\",\"status\":\"invited\",\"capabilities\":[],\"protocols\":null,\"expiresAt\":null,\"delegationCid\":null,\"revokedAt\":null,\"reviewerDid\":null,\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-20T10:00:00.000Z\",\"acceptedAt\":null}],\"keys\":[{\"prefix\":\"7f3a9c1d\",\"name\":\"production\",\"masked\":\"eo_live_7f3a9c1d_…\",\"environment\":\"live\",\"scopes\":[\"claims:write\",\"claims:read\"],\"maxSpendCentsPerDay\":50000,\"createdAt\":\"2026-09-01T09:05:00.000Z\",\"lastUsedAt\":\"2026-09-22T12:00:00.000Z\",\"revokedAt\":null}],\"credits\":{\"asset\":\"upay\",\"balance\":\"43800000\",\"sendLimit\":\"50000000\",\"reserved\":\"2400000\",\"settled\":\"1200000\",\"paying\":\"0\",\"available\":\"40200000\"},\"limits\":{\"maxBodyBytes\":1048576,\"maxUploadBytes\":25000000,\"maxBatchClaims\":100,\"maxWaitSeconds\":90,\"maxConcurrentWaiters\":20,\"maxPageLimit\":500},\"reviewBlocked\":null,\"webhookEndpoints\":[{\"endpointId\":\"whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\",\"url\":\"https://example.org/hooks/oracle\",\"events\":[\"claim.decided\",\"claim.review_required\",\"claim.failed\"],\"enabled\":true,\"createdAt\":\"2026-09-01T09:10:00.000Z\"}]}},\"apiKey\":{\"summary\":\"Called with an API key without webhooks:manage\",\"value\":{\"caller\":{\"kind\":\"key\",\"prefix\":\"7f3a9c1d\",\"scopes\":[\"claims:write\",\"claims:read\"]},\"source\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"active\",\"pausedReason\":null,\"billingMode\":\"x402\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}],\"refillFloorCents\":2000,\"defaultWebhookUrl\":\"https://example.org/hooks/oracle\",\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"},\"keys\":[{\"prefix\":\"7f3a9c1d\",\"name\":\"production\",\"masked\":\"eo_live_7f3a9c1d_…\",\"environment\":\"live\",\"scopes\":[\"claims:write\",\"claims:read\"],\"maxSpendCentsPerDay\":50000,\"createdAt\":\"2026-09-01T09:05:00.000Z\",\"lastUsedAt\":\"2026-09-22T12:00:00.000Z\",\"revokedAt\":null}],\"credits\":{\"asset\":\"upay\",\"balance\":\"43800000\",\"sendLimit\":\"50000000\",\"reserved\":\"2400000\",\"settled\":\"1200000\",\"paying\":\"0\",\"available\":\"40200000\"},\"limits\":{\"maxBodyBytes\":1048576,\"maxUploadBytes\":25000000,\"maxBatchClaims\":100,\"maxWaitSeconds\":90,\"maxConcurrentWaiters\":20,\"maxPageLimit\":500},\"reviewBlocked\":\"not-reviewer\"}},\"reviewer\":{\"summary\":\"A reviewer on a source with billing mode none\",\"value\":{\"caller\":{\"kind\":\"member\",\"memberId\":\"mem_01J8ZB7C8D9E0F1G2H3J4K5M6N\",\"did\":\"did:ixo:ixo1v3n5q7s9u2w4y6a8c0e2g4j6l8n0p2r4t6w8y0\",\"role\":\"reviewer\",\"capabilities\":[\"claims/read\",\"claims/review\"],\"protocols\":[\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"]},\"source\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"active\",\"pausedReason\":null,\"billingMode\":\"none\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}],\"refillFloorCents\":2000,\"defaultWebhookUrl\":\"https://example.org/hooks/oracle\",\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"},\"members\":[{\"memberId\":\"mem_01J8Z5A1B2C3D4E5F6G7H8J9K1\",\"did\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"email\":\"founder@acme.example\",\"role\":\"owner\",\"status\":\"active\",\"capabilities\":[\"source/*\"],\"protocols\":null,\"expiresAt\":null,\"delegationCid\":null,\"revokedAt\":null,\"reviewerDid\":\"did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK\",\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-01T09:00:00.000Z\",\"acceptedAt\":\"2026-09-01T09:00:00.000Z\"},{\"memberId\":\"mem_01J8ZB7C8D9E0F1G2H3J4K5M6N\",\"did\":\"did:ixo:ixo1v3n5q7s9u2w4y6a8c0e2g4j6l8n0p2r4t6w8y0\",\"email\":\"reviewer@acme.example\",\"role\":\"reviewer\",\"status\":\"active\",\"capabilities\":[\"claims/read\",\"claims/review\"],\"protocols\":[\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"],\"expiresAt\":\"2026-12-31T23:59:59.000Z\",\"delegationCid\":\"bafyreigq7hzk2wdn5vr3xl6m4c8tjp2yeaos6ubd7fhk3nwq5ziv4rlxte\",\"revokedAt\":null,\"reviewerDid\":\"did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH\",\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-10T08:00:00.000Z\",\"acceptedAt\":\"2026-09-10T08:30:00.000Z\"}],\"limits\":{\"maxBodyBytes\":1048576,\"maxUploadBytes\":25000000,\"maxBatchClaims\":100,\"maxWaitSeconds\":90,\"maxConcurrentWaiters\":20,\"maxPageLimit\":500},\"reviewBlocked\":null}},\"viewer\":{\"summary\":\"A viewer (spend/read), billing unreadable\",\"value\":{\"caller\":{\"kind\":\"member\",\"memberId\":\"mem_01J8ZC8D9E0F1G2H3J4K5M6N7P\",\"did\":\"did:ixo:ixo1x7c9h2k4m6p8r0t2v4x6z8q0s2u4w6y8a0c2e4\",\"role\":\"viewer\",\"capabilities\":[\"claims/read\",\"spend/read\"],\"protocols\":null},\"source\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"active\",\"pausedReason\":null,\"billingMode\":\"x402\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}],\"refillFloorCents\":2000,\"defaultWebhookUrl\":\"https://example.org/hooks/oracle\",\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"},\"members\":[{\"memberId\":\"mem_01J8Z5A1B2C3D4E5F6G7H8J9K1\",\"did\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"email\":\"founder@acme.example\",\"role\":\"owner\",\"status\":\"active\",\"capabilities\":[\"source/*\"],\"protocols\":null,\"expiresAt\":null,\"delegationCid\":null,\"revokedAt\":null,\"reviewerDid\":\"did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK\",\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-01T09:00:00.000Z\",\"acceptedAt\":\"2026-09-01T09:00:00.000Z\"},{\"memberId\":\"mem_01J8ZB7C8D9E0F1G2H3J4K5M6N\",\"did\":\"did:ixo:ixo1v3n5q7s9u2w4y6a8c0e2g4j6l8n0p2r4t6w8y0\",\"email\":\"reviewer@acme.example\",\"role\":\"reviewer\",\"status\":\"active\",\"capabilities\":[\"claims/read\",\"claims/review\"],\"protocols\":[\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"],\"expiresAt\":\"2026-12-31T23:59:59.000Z\",\"delegationCid\":\"bafyreigq7hzk2wdn5vr3xl6m4c8tjp2yeaos6ubd7fhk3nwq5ziv4rlxte\",\"revokedAt\":null,\"reviewerDid\":\"did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH\",\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-10T08:00:00.000Z\",\"acceptedAt\":\"2026-09-10T08:30:00.000Z\"}],\"credits\":null,\"limits\":{\"maxBodyBytes\":1048576,\"maxUploadBytes\":25000000,\"maxBatchClaims\":100,\"maxWaitSeconds\":90,\"maxConcurrentWaiters\":20,\"maxPageLimit\":500},\"reviewBlocked\":\"not-reviewer\"}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-required-scope\":null,\"x-capability\":null,\"x-ucan-action\":\"source/read\"}},\"/v1/api/webhooks/endpoints\":{\"get\":{\"operationId\":\"listWebhookEndpoints\",\"tags\":[\"webhooks\"],\"summary\":\"List webhook endpoints\",\"description\":\"Every endpoint of the source.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"}],\"responses\":{\"200\":{\"description\":\"Endpoints.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/EndpointList\"},\"examples\":{\"list\":{\"value\":{\"items\":[{\"endpointId\":\"whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\",\"url\":\"https://example.org/hooks/oracle\",\"events\":[\"claim.decided\",\"claim.review_required\",\"claim.failed\"],\"enabled\":true,\"createdAt\":\"2026-09-01T09:10:00.000Z\"}]}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"webhooks:manage\",\"x-capability\":\"webhooks/manage\",\"x-ucan-action\":\"webhooks/read\"},\"post\":{\"operationId\":\"createWebhookEndpoint\",\"tags\":[\"webhooks\"],\"summary\":\"Create a webhook endpoint\",\"description\":\"The URL is validated like an attachment URL (§14). `events: []` subscribes to every event, including types added later. The signing `secret` is returned once, here. An endpoint is in addition to the source's default URL: `claim.*` events keep reaching the default (or a claim's own `webhookUrl`) whatever endpoints exist; an endpoint at exactly the default's URL gets one delivery, signed with the endpoint's secret.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreateWebhookEndpointRequest\"},\"examples\":{\"create\":{\"value\":{\"url\":\"https://example.org/hooks/oracle\",\"events\":[\"claim.decided\",\"claim.review_required\",\"claim.failed\"]}},\"everything\":{\"summary\":\"`events: []` subscribes to every event\",\"value\":{\"url\":\"https://example.org/hooks/all\",\"events\":[]}}}}}},\"responses\":{\"201\":{\"description\":\"Created; store the secret now.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreateWebhookEndpointResponse\"},\"examples\":{\"created\":{\"value\":{\"endpointId\":\"whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\",\"url\":\"https://example.org/hooks/oracle\",\"events\":[\"claim.decided\",\"claim.review_required\",\"claim.failed\"],\"enabled\":true,\"createdAt\":\"2026-09-01T09:10:00.000Z\",\"secret\":\"whsec_4kQ9mZ2xV7bN1cR8tY3uL6pW0sA5dF2g\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"409\":{\"$ref\":\"#/components/responses/SourceNotLinked\"},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"webhooks:manage\",\"x-capability\":\"webhooks/manage\",\"x-ucan-action\":\"webhooks/create\"}},\"/v1/api/webhooks/endpoints/{endpointId}\":{\"get\":{\"operationId\":\"getWebhookEndpoint\",\"tags\":[\"webhooks\"],\"summary\":\"Read a webhook endpoint\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/EndpointIdPath\"}],\"responses\":{\"200\":{\"description\":\"The endpoint.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEndpoint\"},\"examples\":{\"endpoint\":{\"$ref\":\"#/components/examples/Endpoint\"}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"webhooks:manage\",\"x-capability\":\"webhooks/manage\",\"x-ucan-action\":\"webhooks/read\"},\"patch\":{\"operationId\":\"updateWebhookEndpoint\",\"tags\":[\"webhooks\"],\"summary\":\"Update or rotate a webhook endpoint\",\"description\":\"`rotateSecret: true` issues a new secret (returned once); the old one keeps signing beside it for 24 h, and a second rotation inside those 24 h is refused (`409 CONFLICT`, `reason: rotation_in_progress`) rather than cut the overlap short. A new `url` also retargets the endpoint's queued (pending/failed) deliveries.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/EndpointIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/UpdateWebhookEndpointRequest\"},\"examples\":{\"disable\":{\"value\":{\"enabled\":false}},\"rotate\":{\"value\":{\"rotateSecret\":true}}}}}},\"responses\":{\"200\":{\"description\":\"The endpoint; `secret` iff rotated.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/UpdateWebhookEndpointResponse\"},\"examples\":{\"updated\":{\"value\":{\"endpointId\":\"whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\",\"url\":\"https://example.org/hooks/oracle\",\"events\":[\"claim.decided\",\"claim.review_required\",\"claim.failed\"],\"enabled\":false,\"createdAt\":\"2026-09-01T09:10:00.000Z\"}},\"rotated\":{\"value\":{\"endpointId\":\"whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\",\"url\":\"https://example.org/hooks/oracle\",\"events\":[\"claim.decided\",\"claim.review_required\",\"claim.failed\"],\"enabled\":true,\"createdAt\":\"2026-09-01T09:10:00.000Z\",\"secret\":\"whsec_8pL2nX5vB9cM1zQ7wR3tY6uK0sD4fG2h\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/RotationConflict\"},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"webhooks:manage\",\"x-capability\":\"webhooks/manage\",\"x-ucan-action\":\"webhooks/update\"},\"delete\":{\"operationId\":\"deleteWebhookEndpoint\",\"tags\":[\"webhooks\"],\"summary\":\"Delete a webhook endpoint\",\"description\":\"Pending deliveries to it stop.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/EndpointIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"204\":{\"description\":\"Deleted.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/IdempotencyConflict\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"webhooks:manage\",\"x-capability\":\"webhooks/manage\",\"x-ucan-action\":\"webhooks/delete\"}},\"/v1/api/webhooks/endpoints/{endpointId}/test\":{\"post\":{\"operationId\":\"testWebhookEndpoint\",\"tags\":[\"webhooks\"],\"summary\":\"Send a test event\",\"description\":\"Posts a `claim.decided` with sample data, signed like a real one.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/EndpointIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"202\":{\"description\":\"Queued; watch the delivery.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookDelivery\"},\"examples\":{\"queued\":{\"value\":{\"id\":\"wh:evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4:whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\",\"eventId\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"claim.decided\",\"status\":\"pending\",\"attempts\":0,\"lastStatusCode\":null,\"nextAttemptAt\":\"2026-09-22T12:00:07.412Z\",\"createdAt\":\"2026-09-22T12:00:07.412Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/TestEventConflict\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"webhooks:manage\",\"x-capability\":\"webhooks/manage\",\"x-ucan-action\":\"webhooks/test\"}},\"/v1/api/webhooks/deliveries\":{\"get\":{\"operationId\":\"listWebhookDeliveries\",\"tags\":[\"webhooks\"],\"summary\":\"The delivery log\",\"description\":\"Newest first; `dead` deliveries (8 attempts spent) stay listed for 30 days.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"name\":\"endpointId\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"pattern\":\"^whe_[0-9A-HJKMNP-TV-Z]{26}$\"},\"example\":\"whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\"},{\"name\":\"status\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"enum\":[\"pending\",\"delivered\",\"failed\",\"dead\"]},\"example\":\"dead\"},{\"name\":\"claimId\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\"},\"example\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\"},{\"$ref\":\"#/components/parameters/Limit\"},{\"$ref\":\"#/components/parameters/Cursor\"}],\"responses\":{\"200\":{\"description\":\"A page of deliveries.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DeliveryPage\"},\"examples\":{\"page\":{\"value\":{\"items\":[{\"id\":\"wh:evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4:whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\",\"eventId\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"claim.decided\",\"status\":\"delivered\",\"attempts\":1,\"lastStatusCode\":200,\"nextAttemptAt\":null,\"createdAt\":\"2026-09-22T12:00:07.412Z\"},{\"id\":\"wh:evt_01J8Z8E6G7H8J9K0M1N2P3Q4R5:claim\",\"eventId\":\"evt_01J8Z8E6G7H8J9K0M1N2P3Q4R5\",\"type\":\"claim.review_required\",\"status\":\"dead\",\"attempts\":8,\"lastStatusCode\":502,\"nextAttemptAt\":null,\"createdAt\":\"2026-09-21T11:58:09.300Z\"}],\"nextCursor\":null}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"webhooks:manage\",\"x-capability\":\"webhooks/manage\",\"x-ucan-action\":\"webhooks/read\"}},\"/v1/api/webhooks/deliveries/{deliveryId}\":{\"get\":{\"operationId\":\"getWebhookDelivery\",\"tags\":[\"webhooks\"],\"x-spec-delta\":true,\"summary\":\"One delivery, with what was sent\",\"description\":\"The delivery, its target and the envelope that was POSTed (null once the claim was erased). Only the LAST attempt's outcome is kept in v1.1 (`lastStatusCode`, `lastError`), not a per-attempt history.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/DeliveryIdPath\"}],\"responses\":{\"200\":{\"description\":\"The delivery.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookDeliveryDetail\"},\"examples\":{\"dead\":{\"value\":{\"id\":\"wh:evt_01J8Z8E6G7H8J9K0M1N2P3Q4R5:claim\",\"eventId\":\"evt_01J8Z8E6G7H8J9K0M1N2P3Q4R5\",\"type\":\"claim.review_required\",\"status\":\"dead\",\"attempts\":8,\"lastStatusCode\":502,\"nextAttemptAt\":null,\"createdAt\":\"2026-09-21T11:58:09.300Z\",\"endpointId\":null,\"targetUrl\":\"https://example.org/hooks/oracle\",\"request\":{\"body\":{\"id\":\"evt_01J8Z8E6G7H8J9K0M1N2P3Q4R5\",\"type\":\"claim.review_required\",\"createdAt\":\"2026-09-21T11:58:09.300Z\",\"apiVersion\":\"v1\",\"data\":{\"claimId\":\"apc_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"pending_review\",\"verdict\":\"review\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"decision\":{\"status\":\"pending_review\",\"verdict\":\"review\",\"class\":\"requires_human_review\",\"evaluationStatus\":5,\"action\":\"needs_human_review\",\"totalBps\":null,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":null,\"pending\":true,\"capped\":false}],\"pendingTasks\":[\"confirm_recipient\"],\"reasons\":[{\"code\":\"photo_unclear\",\"reason\":\"The delivery photo does not show the recipient\",\"class\":\"requires_human_review\"}]},\"explanation\":\"A reviewer must confirm the recipient.\",\"receipt\":null,\"chainStatus\":\"skipped\"},\"review\":{\"pendingTasks\":[{\"id\":\"confirm_recipient\",\"prompt\":\"Does the photo show the named recipient accepting the package?\",\"answer\":{\"type\":\"boolean\"}}],\"answeredAt\":null,\"foldedAt\":null,\"foldError\":null,\"answerBy\":\"2026-10-22T11:57:00.000Z\"},\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":null,\"status\":\"reserved\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"failed\",\"attempts\":2},\"error\":null,\"metadata\":{\"orderId\":\"88214\"},\"createdAt\":\"2026-09-22T11:58:00.000Z\",\"decidedAt\":\"2026-09-22T11:58:09.200Z\"}}},\"lastError\":\"502 Bad Gateway\"}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"webhooks:manage\",\"x-capability\":\"webhooks/manage\",\"x-ucan-action\":\"webhooks/read\"}},\"/v1/api/webhooks/deliveries/{deliveryId}/redeliver\":{\"post\":{\"operationId\":\"redeliverWebhook\",\"tags\":[\"webhooks\"],\"summary\":\"Redeliver one delivery\",\"description\":\"Resets any delivery — `delivered` ones too, not only `failed` or `dead` — to attempt zero and attempts it now; the event id is unchanged, so receivers still de-duplicate. It posts to where the delivery's target points NOW (v1.18) — an endpoint's delivery to the endpoint's current URL, signed with its secret; a delivery without an endpoint (`endpointId` null) to the claim's own `webhookUrl`, else the source's CURRENT default URL, signed with the source's secret. A delivery whose endpoint was deleted or turned off, or a default-URL delivery whose source no longer has a default URL, is refused `409 CONFLICT` (`details.reason` `endpoint-deleted`, `endpoint-disabled`, `no-webhook-url`) and left as it was; that answer is stored under its `Idempotency-Key`, so retry with a new key once fixed. A default-URL or claim-URL redeliver always goes to the current target, signed with the SOURCE's secret, even when an endpoint now has that same URL; receivers de-duplicate on `Oracle-Event-Id`.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/DeliveryIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"202\":{\"description\":\"Queued.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookDelivery\"},\"examples\":{\"queued\":{\"value\":{\"id\":\"wh:evt_01J8Z8E6G7H8J9K0M1N2P3Q4R5:claim\",\"eventId\":\"evt_01J8Z8E6G7H8J9K0M1N2P3Q4R5\",\"type\":\"claim.review_required\",\"status\":\"pending\",\"attempts\":0,\"lastStatusCode\":502,\"nextAttemptAt\":\"2026-09-22T12:01:00.000Z\",\"createdAt\":\"2026-09-21T11:58:09.300Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/RedeliverConflict\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"webhooks:manage\",\"x-capability\":\"webhooks/manage\",\"x-ucan-action\":\"webhooks/redeliver\"}},\"/v1/api/openapi.json\":{\"get\":{\"operationId\":\"getOpenApi\",\"tags\":[\"meta\"],\"summary\":\"This document, as JSON\",\"security\":[],\"responses\":{\"200\":{\"description\":\"OpenAPI 3.1.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"type\":\"object\",\"required\":[\"openapi\"],\"properties\":{\"openapi\":{\"type\":\"string\"}}},\"examples\":{\"doc\":{\"value\":{\"openapi\":\"3.1.0\",\"info\":{\"title\":\"IXO Decision API\",\"version\":\"1.1.0\"},\"paths\":{}}}}}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"}}}},\"/llms.txt\":{\"get\":{\"operationId\":\"getLlmsTxt\",\"tags\":[\"meta\"],\"summary\":\"The API surface for language models\",\"security\":[],\"responses\":{\"200\":{\"description\":\"llms.txt (Markdown).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"text/plain\":{\"schema\":{\"type\":\"string\"},\"example\":\"# IXO Decision API\\n\\n> Submit evidence, get a signed decision.\\n\\n- [OpenAPI](/v1/api/openapi.json)\\n\"}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"}}}},\"/v1/api/sources\":{\"get\":{\"operationId\":\"listMySources\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"The signed-in account's sources on this oracle\",\"description\":\"Account-level (no `X-Source-Id`): every source the invoking account is a member of here, with its role, grant state and the stored grant (`delegation`, base64 CAR) the console attaches as its invocation's proof; every source carries its organisation (`companyEntityDid`), so the console groups them. A controller of the organisation needs no membership and has `delegation: null`. A controller with no membership finds its organisation's sources with `GET /v1/api/organisations/{entityDid}/sources` (1.17.0); an `entity` query, the list's pre-1.17.0 form, is `400 VALIDATION` naming that route.\",\"security\":[{\"ucan\":[]}],\"responses\":{\"200\":{\"description\":\"The account's sources.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/MySourceList\"},\"examples\":{\"list\":{\"value\":{\"items\":[{\"source\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"active\",\"pausedReason\":null,\"billingMode\":\"x402\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}],\"refillFloorCents\":2000,\"defaultWebhookUrl\":\"https://example.org/hooks/oracle\",\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"},\"memberId\":\"mem_01J8Z5A1B2C3D4E5F6G7H8J9K1\",\"role\":\"owner\",\"status\":\"active\",\"capabilities\":[\"source/*\"],\"protocols\":null,\"expiresAt\":null,\"delegation\":null,\"delegationCid\":null},{\"source\":{\"sourceId\":\"src_01J8ZD9E0F1G2H3J4K5M6N7P8Q\",\"name\":\"Northwind Clinics\",\"ownerDid\":\"did:ixo:ixo1x7c9h2k4m6p8r0t2v4x6z8q0s2u4w6y8a0c2e4\",\"status\":\"active\",\"pausedReason\":null,\"billingMode\":\"none\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}],\"refillFloorCents\":null,\"defaultWebhookUrl\":null,\"contactEmail\":\"ops@northwind.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"},\"memberId\":\"mem_01J8ZE0F1G2H3J4K5M6N7P8Q9R\",\"role\":\"reviewer\",\"status\":\"active\",\"capabilities\":[\"claims/read\",\"claims/review\"],\"protocols\":null,\"expiresAt\":\"2026-12-31T23:59:59.000Z\",\"delegation\":\"OqJlcm9vdHOB2CpYJQABcRIgxL3y7uQm9p2cVb8nX4kW1tR6aH0sJ5fD3gE7yZ2qP9mMZ3ZlcnNpb24BjAFxEiDEvfLu5Cb2nZxVvydfhZbVtHpofSwnl8PeAT7JnapP2aJhc1hA7xk2oQ8bK4mR2vL7nW1tC5yS9pF3hJ6dE0gA8zQ4uX2kV7bN1sM5wT3rY9cL0fH6jD2eG8aB4iP7oU1nZ5xS3q\",\"delegationCid\":\"bafyreigq7hzk2wdn5vr3xl6m4c8tjp2yeaos6ubd7fhk3nwq5ziv4rlxte\"}]}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/AccountForbidden\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"account\",\"x-ucan-action\":\"sources/list\"},\"post\":{\"operationId\":\"createSource\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Add this oracle to an organisation (create a source)\",\"description\":\"Account-level: a plain self-signed invocation (`with: ixo:oracle/<oracle did:web>`, no `X-Source-Id`). The invoker must be a CURRENT controller (admin) of `entityDid`, read live on chain (`403` otherwise, `503` when the chain cannot be read) — a source is always an organisation's. It starts `pending-link`: no claims, keys, invites or webhooks until the organisation's link reaches the decision engine and `POST /v1/api/sources/{sourceId}/company/sync` reads it. The creator pays (`ownerDid`) but gets no membership: as a controller it is root. `webhookSecret` signs deliveries to claims' own `webhookUrl` and the source's default URL; it is shown here once (`POST /v1/api/source/webhook-secret` rotates it). Until the source is first active only the organisation's controllers can list it (`GET /v1/api/organisations/{entityDid}/sources`). No `Idempotency-Key`: a repeat creates a second source, which the console never sends.\",\"security\":[{\"ucan\":[]}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreateSourceRequest\"},\"examples\":{\"create\":{\"value\":{\"name\":\"Acme Logistics\",\"contactEmail\":\"ops@acme.example\",\"entityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\"}}}}}},\"responses\":{\"201\":{\"description\":\"Created.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreateSourceResponse\"},\"examples\":{\"created\":{\"value\":{\"source\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"pending-link\",\"pausedReason\":null,\"billingMode\":\"x402\",\"allowedProtocols\":[],\"refillFloorCents\":null,\"defaultWebhookUrl\":null,\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-22T09:00:00.000Z\",\"activatedAt\":null},\"webhookSecret\":\"whsec_Rk7pQ2vX9mT4nB8sW1yZ5cD3fG6hJ0aL\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/AccountForbidden\"},\"409\":{\"$ref\":\"#/components/responses/IdempotencyConflict\"},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"account\",\"x-ucan-action\":\"sources/create\",\"parameters\":[{\"$ref\":\"#/components/parameters/IdempotencyKey\"}]}},\"/v1/api/organisations/{entityDid}/sources\":{\"get\":{\"operationId\":\"listOrganisationSources\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"An organisation's sources on this oracle, in every state\",\"description\":\"Account-level: a plain self-signed invocation (`with: ixo:oracle/<oracle did:web>`, no `X-Source-Id`). The invoker must be a CURRENT controller (admin) of `entityDid`, read live on chain (`403` otherwise, saying nothing about any source; `503` when the chain cannot be read). Every source of the organisation here, newest first, keyset-paged — `pending-link`, `active`, `paused` and `disputed` alike, so a controller finds the source an abandoned \\\"Add oracle\\\" or a CLI sign-up left `pending-link` (sync it, or delete it) instead of creating a second one. A never-active source (`activatedAt: null`) never held claims. Nobody but the organisation's controllers sees a source before it is first active. (1.17.0)\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"name\":\"entityDid\",\"in\":\"path\",\"required\":true,\"description\":\"The organisation's on-chain entity.\",\"schema\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-f]{32}$\"},\"example\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\"},{\"$ref\":\"#/components/parameters/Limit\"},{\"$ref\":\"#/components/parameters/Cursor\"}],\"responses\":{\"200\":{\"description\":\"A page of the organisation's sources.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/SourcePage\"},\"examples\":{\"page\":{\"value\":{\"items\":[{\"sourceId\":\"src_01J8ZD9E0F1G2H3J4K5M6N7P8Q\",\"name\":\"Acme Logistics (EU)\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"pending-link\",\"pausedReason\":null,\"billingMode\":\"x402\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"}],\"refillFloorCents\":null,\"defaultWebhookUrl\":null,\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-22T09:00:00.000Z\",\"activatedAt\":null},{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"active\",\"pausedReason\":null,\"billingMode\":\"x402\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"}],\"refillFloorCents\":2000,\"defaultWebhookUrl\":\"https://example.org/hooks/oracle\",\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":\"courierId\",\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"}],\"nextCursor\":null}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/AccountForbidden\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"account\",\"x-ucan-action\":\"sources/list-organisation\"}},\"/v1/api/sources/{sourceId}\":{\"delete\":{\"operationId\":\"deleteSource\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Remove this oracle from the organisation (delete the source)\",\"description\":\"Root only: a CURRENT controller of the source's organisation, invoking with no proof (`X-Source-Id` = the path's id); anyone else `403`, a source you cannot see `404`. Deletes the source and every row that hangs off it — members, keys, webhooks, claims and their decisions, audit. The way out of `disputed`: delete it and add the oracle again. Nothing on chain or at the decision engine changes.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceIdPath\"},{\"$ref\":\"#/components/parameters/SourceHeader\"}],\"responses\":{\"204\":{\"description\":\"Deleted.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"source/*\",\"x-ucan-action\":\"sources/delete\"}},\"/v1/api/sources/{sourceId}/company/sync\":{\"post\":{\"operationId\":\"syncSourceCompany\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Read the organisation's link from the decision engine (activate the source)\",\"description\":\"Root only: a CURRENT controller of the source's organisation, invoking with no proof (`X-Source-Id` = the path's id). The link's only home is the decision engine: the controller signs a `SourceCompanyLink` and the console PUTs it to the engine's `PUT /v1/sources/{oracleDid}/{sourceId}/company`, then calls this. The oracle reads the engine's stored state (`GET …/company`, UCAN `company/read`) and mirrors it: a link for the source's own organisation makes it `active` (a paused source stays paused) and sets `payeeField` — a read older than the stored link is ignored; a link for another entity, or the engine's `disputed`, makes it `disputed` (alerted; delete it and add the oracle again); nothing stored leaves it `pending-link`. An engine that cannot be read (any non-2xx) is `503` and changes nothing. Answers the mirrored source and its members.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceIdPath\"},{\"$ref\":\"#/components/parameters/SourceHeader\"}],\"responses\":{\"200\":{\"description\":\"The mirrored source and its members.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CompanySyncResponse\"},\"examples\":{\"active\":{\"value\":{\"source\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"active\",\"pausedReason\":null,\"billingMode\":\"x402\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"}],\"refillFloorCents\":null,\"defaultWebhookUrl\":null,\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":\"courierId\",\"createdAt\":\"2026-09-22T09:00:00.000Z\",\"activatedAt\":\"2026-09-22T09:05:00.000Z\"},\"members\":[]}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"source/*\",\"x-ucan-action\":\"sources/company-sync\"}},\"/v1/api/source\":{\"patch\":{\"operationId\":\"updateSourceSettings\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Update the source's settings\",\"description\":\"The allow-list and the billing mode are the operator's (`PUT /v1/api/admin/sources/{sourceId}/protocols`, `…/billing-mode`): they are commercial terms. `defaultWebhookUrl` receives every `claim.*` event of a claim that names no `webhookUrl` of its own, whatever webhook endpoints the source also has (`null` turns it off).\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/SourceSettings\"},\"examples\":{\"webhook\":{\"value\":{\"defaultWebhookUrl\":\"https://example.org/hooks/oracle-v2\"}}}}}},\"responses\":{\"200\":{\"description\":\"The source.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Source\"},\"examples\":{\"updated\":{\"value\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"active\",\"pausedReason\":null,\"billingMode\":\"x402\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}],\"refillFloorCents\":2000,\"defaultWebhookUrl\":\"https://example.org/hooks/oracle-v2\",\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/IdempotencyConflict\"},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"settings/manage\",\"x-ucan-action\":\"settings/update\"}},\"/v1/api/source/webhook-secret\":{\"post\":{\"operationId\":\"rotateSourceWebhookSecret\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Rotate the source's webhook secret\",\"description\":\"Issues a new secret for deliveries to claims' own `webhookUrl` and the source's default URL (endpoints have their own, rotated by `PATCH …/endpoints/{endpointId}`). The old secret keeps signing beside the new one — two `v1=` in `Oracle-Signature` — until `previousExpiresAt` (24 h). The new secret is in this response only: an answer that carries a secret is never stored by the idempotency store. A second rotation before `previousExpiresAt` is refused (`409 CONFLICT`, `reason: rotation_in_progress`) rather than cut the overlap short.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"200\":{\"description\":\"Rotated; copy the secret now.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/RotateWebhookSecretResponse\"},\"examples\":{\"rotated\":{\"value\":{\"webhookSecret\":\"whsec_Tn4bV8xK2pR6mW0yC3fH7jL1qS5dG9aZ\",\"previousExpiresAt\":\"2026-09-23T12:00:00.000Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/RotationConflict\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"webhooks/manage\",\"x-ucan-action\":\"webhooks/rotate-secret\"}},\"/v1/api/source/collections\":{\"get\":{\"operationId\":\"listLinkedCollections\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"List the on-chain collections linked to the source\",\"description\":\"The claim collections whose chain claims read with the source's own. A member's link — `linkedBy` an account DID — owns the collection entity on chain, as of the last hourly re-check. A link the oracle made when the collection was registered — `linkedBy` the source's `companyEntityDid` (1.21.0), audited as `source.collection_linked` by `system:company-link` — holds while the decision engine names that organisation as the collection's company. A link is dropped (`source.collection_unlinked` in the audit log, with `details.reason`) when its linker no longer owns it (`not_owner`), is no longer a member who may link — revoked, removed, or no longer the owner role (`linker_not_member`, at once on a revoke or removal) — when the engine no longer names the company (`not_company`), or when two re-checks in a row find no such collection (`collection_not_found`). Only such a drop hides a link from the claim reads; a re-check that cannot read the chain or the engine keeps it, shown (1.23.0). A member narrowed by `nb.protocols` sees only its protocols' collections.\",\"security\":[{\"apiKey\":[]},{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"}],\"responses\":{\"200\":{\"description\":\"Linked collections, newest link first.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/LinkedCollectionList\"},\"examples\":{\"list\":{\"value\":{\"items\":[{\"collectionId\":\"1104\",\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"linkedBy\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"linkedAt\":\"2026-09-20T10:00:00.000Z\"},{\"collectionId\":\"1123\",\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\",\"linkedBy\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"linkedAt\":\"2026-09-18T08:30:00.000Z\"}]}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-required-scope\":\"claims:read\",\"x-capability\":\"claims/read\",\"x-ucan-action\":\"collections/read\"},\"post\":{\"operationId\":\"linkCollection\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Link an on-chain collection to the source\",\"description\":\"Checked ON CHAIN, uncached, against the signed-in member: they must be the collection entity's owner (`403 FORBIDDEN`, `reason: not_owner`, otherwise — an evaluator's grant is not enough). The collection's chain claims then read with the source's. Billing for them stays the collection owner's on-chain evaluation payment — nothing is charged here, never a 402. The same collection may be linked to several sources; linking it twice to one is `409 CONFLICT` (`reason: already_linked`). Console only.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/LinkCollectionRequest\"},\"examples\":{\"link\":{\"value\":{\"collectionId\":\"1104\"}}}}}},\"responses\":{\"201\":{\"description\":\"Linked.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/LinkedCollection\"},\"examples\":{\"linked\":{\"value\":{\"collectionId\":\"1104\",\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"linkedBy\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"linkedAt\":\"2026-09-20T10:00:00.000Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/LinkForbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/LinkConflict\"},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"settings/manage\",\"x-ucan-action\":\"collections/link\"}},\"/v1/api/source/collections/{collectionId}\":{\"delete\":{\"operationId\":\"unlinkCollection\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Unlink an on-chain collection\",\"description\":\"Its chain claims stop reading with the source's. Idempotent — a link already gone is `204` too. Console only.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/CollectionIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"204\":{\"description\":\"Unlinked (or was not linked).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/IdempotencyConflict\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-capability\":\"settings/manage\",\"x-ucan-action\":\"collections/unlink\"}},\"/v1/api/source/review-billing\":{\"get\":{\"operationId\":\"getReviewBilling\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Read the source's review-billing delegation\",\"description\":\"Per-review checker billing (1.22.0; only on an oracle that bills reviews, else `404`): where the source's stored payment delegation stands — never the token. `state`: `active`, `expired`, `exhausted` (what is left of `maxAmount` covers no review) or `payer_not_owner` (its signer is no longer the organisation's owner on chain). `spent` / `remaining` are the oracle's own count against `maxAmount` (the delegation is bound to this oracle alone). `credits` is the payer's balance at the facilitator, null until it answers this oracle. `pausedCollections` lists the collections this source pays for whose reviews are paused for want of payment (`payer-credits`: top up; `payer-delegation`: store a new delegation). `404` when none is stored. Console only.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"}],\"responses\":{\"200\":{\"description\":\"The stored delegation.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ReviewBilling\"},\"examples\":{\"active\":{\"$ref\":\"#/components/examples/ReviewBilling\"}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/SourceNotLinked\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-capability\":\"spend/read\",\"x-ucan-action\":\"review-billing/read\"},\"put\":{\"operationId\":\"setReviewBilling\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Store the source's review-billing delegation\",\"description\":\"Per-review checker billing (1.22.0; only on an oracle that bills reviews, else `404`). The body is an x402-ixo-pay payment delegation (base64 CAR, ≤ 16 KiB): one `billing/pay` on `billing:decision-api`, addressed to the oracle's facilitator, `nb: { maxAmount, denom: upay, oracles: [<this oracle's did:web>] }`, an `exp`, no proofs, no facts. It must be SIGNED by the organisation's CURRENT owner on chain (`403 FORBIDDEN`, `reason: not_org_owner`, otherwise) — the owner's subscription credits pay — whoever stores it (a member with `keys/manage`, or a controller). Refused, nothing stored: `409 CONFLICT` `reason: billing_mode_none` (the source is not billed) or `review_billing_elsewhere` (another source of the organisation pays; `details.sourceId`), `503 SOURCE_PAUSED` `payments-disabled`, `400 VALIDATION` with `reason` `not_a_payment_delegation` (`details.detail` says why), `wrong_audience`, `not_oracle_bound`, `expires_too_soon` (under 24 h left), `not_yet_valid`, `cap_below_price` (`maxAmount` below one review) or `bad_signature`. Any `exp` at least 24 h out is taken; the payer is emailed 30 and 7 days before it. Storing it again replaces it; the same CID keeps its count, a new one starts at 0, and the organisation's collections paused for want of payment resume at once when it now pays. Every claim of the organisation's per-review collections is reserved at the oracle's published price before it is decided, and settled on the engine's receipt. Console only.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/SetReviewBillingRequest\"},\"examples\":{\"set\":{\"value\":{\"delegation\":\"OqJlcm9vdHOB2CpYJQABcRIgq2Vb9v0k3m8yWm1hbXBsZS1kZWxlZ2F0aW9uLWNhcg==\"}}}}}},\"responses\":{\"200\":{\"description\":\"Stored; the delegation as `GET` reads it.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ReviewBilling\"},\"examples\":{\"stored\":{\"$ref\":\"#/components/examples/ReviewBilling\"}}}}},\"400\":{\"description\":\"`VALIDATION` — the body failed the schema, or the delegation is refused (`details.reason`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"NOT_ORACLE_BOUND\":{\"value\":{\"error\":{\"code\":\"VALIDATION\",\"message\":\"This delegation must name this oracle, and only it, in nb.oracles: [\\\"did:web:oracle.example.org\\\"].\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"not_oracle_bound\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#VALIDATION\"}}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"description\":\"`FORBIDDEN` (`reason: not_org_owner`) — the delegation is not signed by the organisation's owner on chain. Or `SCOPE` — an API key — or `FORBIDDEN` — the grant lacks `keys/manage`.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"NOT_ORG_OWNER\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"Review billing must be signed by the organisation's owner on chain: the owner's subscription credits pay for the reviews. Ask the owner to sign it.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"not_org_owner\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}}}}}},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"description\":\"`CONFLICT` (`reason: billing_mode_none` · `review_billing_elsewhere`), the source not linked (`SOURCE_PENDING_LINK` / `SOURCE_DISPUTED`), or an `Idempotency-Key` conflict.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"ELSEWHERE\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"Another source of this organisation already pays for its reviews on this oracle. Remove it there first.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"review_billing_elsewhere\",\"sourceId\":\"src_01J8Z6Q4X7N2M5K8P3R9T6V1W5\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}}}}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"keys/manage\",\"x-ucan-action\":\"review-billing/set\"},\"delete\":{\"operationId\":\"deleteReviewBilling\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Drop the source's review-billing delegation\",\"description\":\"The oracle forgets the delegation (only on an oracle that bills reviews, else `404`): the next review of the organisation's per-review collections pauses them (`payer-delegation`) until one is stored again. Idempotent: `deleted: false` when none was held. The delegation itself stays valid until its `exp` — a full stop means revoking it in the UCAN store, which the Decision Console does. Console only, `keys/manage`.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"200\":{\"description\":\"Dropped (or none was held).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ReviewBillingDeleted\"},\"examples\":{\"deleted\":{\"value\":{\"deleted\":true,\"message\":\"This oracle no longer holds a review-billing delegation for this source, so its collections' reviews pause until one is stored again. The delegation itself stays valid until it expires: to stop it everywhere, revoke it in the UCAN store (the Decision Console does this).\"}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"}},\"x-capability\":\"keys/manage\",\"x-ucan-action\":\"review-billing/delete\"}},\"/v1/api/keys\":{\"get\":{\"operationId\":\"listApiKeys\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"List API keys (masked)\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"}],\"responses\":{\"200\":{\"description\":\"Keys, revoked ones included.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/KeyList\"},\"examples\":{\"list\":{\"value\":{\"items\":[{\"prefix\":\"7f3a9c1d\",\"name\":\"production\",\"masked\":\"eo_live_7f3a9c1d_…\",\"environment\":\"live\",\"scopes\":[\"claims:write\",\"claims:read\"],\"maxSpendCentsPerDay\":50000,\"createdAt\":\"2026-09-01T09:05:00.000Z\",\"lastUsedAt\":\"2026-09-22T12:00:00.000Z\",\"revokedAt\":null},{\"prefix\":\"2b8e4d0a\",\"name\":null,\"masked\":\"eo_live_2b8e4d0a_…\",\"environment\":\"live\",\"scopes\":[\"claims:write\",\"claims:read\"],\"maxSpendCentsPerDay\":50000,\"createdAt\":\"2026-09-01T09:05:00.000Z\",\"lastUsedAt\":\"2026-08-30T17:00:00.000Z\",\"revokedAt\":\"2026-09-01T09:06:00.000Z\"}]}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"keys/manage\",\"x-ucan-action\":\"keys/read\"},\"post\":{\"operationId\":\"createApiKey\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Create an API key\",\"description\":\"Owner only. The full key is in this response and nowhere else, ever (§3.3).\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreateApiKeyRequest\"},\"examples\":{\"create\":{\"value\":{\"name\":\"production\",\"scopes\":[\"claims:write\",\"claims:read\"],\"maxSpendCentsPerDay\":50000}}}}}},\"responses\":{\"201\":{\"description\":\"Created; copy the key now.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/CreateApiKeyResponse\"},\"examples\":{\"created\":{\"value\":{\"prefix\":\"7f3a9c1d\",\"name\":\"production\",\"masked\":\"eo_live_7f3a9c1d_…\",\"environment\":\"live\",\"scopes\":[\"claims:write\",\"claims:read\"],\"maxSpendCentsPerDay\":50000,\"createdAt\":\"2026-09-01T09:05:00.000Z\",\"lastUsedAt\":null,\"revokedAt\":null,\"key\":\"eo_live_7f3a9c1d_Qm7xT2vK9pL4nR8sW1yZ5bC3dF6gH0jA\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/SourceNotLinked\"},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"keys/manage\",\"x-ucan-action\":\"keys/create\"}},\"/v1/api/keys/{prefix}\":{\"delete\":{\"operationId\":\"revokeApiKey\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Revoke an API key\",\"description\":\"Owner only. Immediate by default; `graceDays` (≤ 30) keeps the key working until `revokedAt` so a rotation can overlap (§3.3). The row stays for a year of audit.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/KeyPrefixPath\"},{\"name\":\"graceDays\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":30,\"default\":0},\"example\":7},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"200\":{\"description\":\"The key, with `revokedAt` set (in the future during a grace period).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiKey\"},\"examples\":{\"immediate\":{\"value\":{\"prefix\":\"7f3a9c1d\",\"name\":\"production\",\"masked\":\"eo_live_7f3a9c1d_…\",\"environment\":\"live\",\"scopes\":[\"claims:write\",\"claims:read\"],\"maxSpendCentsPerDay\":50000,\"createdAt\":\"2026-09-01T09:05:00.000Z\",\"lastUsedAt\":\"2026-09-22T12:00:00.000Z\",\"revokedAt\":\"2026-09-22T12:30:00.000Z\"}},\"grace\":{\"summary\":\"graceDays=7\",\"value\":{\"prefix\":\"7f3a9c1d\",\"name\":\"production\",\"masked\":\"eo_live_7f3a9c1d_…\",\"environment\":\"live\",\"scopes\":[\"claims:write\",\"claims:read\"],\"maxSpendCentsPerDay\":50000,\"createdAt\":\"2026-09-01T09:05:00.000Z\",\"lastUsedAt\":\"2026-09-22T12:00:00.000Z\",\"revokedAt\":\"2026-09-29T12:30:00.000Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/IdempotencyConflict\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"keys/manage\",\"x-ucan-action\":\"keys/revoke\"}},\"/v1/api/members\":{\"get\":{\"operationId\":\"listMembers\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"List members\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"}],\"responses\":{\"200\":{\"description\":\"Members.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/MemberList\"},\"examples\":{\"list\":{\"value\":{\"items\":[{\"memberId\":\"mem_01J8Z5A1B2C3D4E5F6G7H8J9K1\",\"did\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"email\":\"founder@acme.example\",\"role\":\"owner\",\"status\":\"active\",\"capabilities\":[\"source/*\"],\"protocols\":null,\"expiresAt\":null,\"delegationCid\":null,\"revokedAt\":null,\"reviewerDid\":\"did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK\",\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-01T09:00:00.000Z\",\"acceptedAt\":\"2026-09-01T09:00:00.000Z\"},{\"memberId\":\"mem_01J8ZB7C8D9E0F1G2H3J4K5M6N\",\"did\":\"did:ixo:ixo1v3n5q7s9u2w4y6a8c0e2g4j6l8n0p2r4t6w8y0\",\"email\":\"reviewer@acme.example\",\"role\":\"reviewer\",\"status\":\"active\",\"capabilities\":[\"claims/read\",\"claims/review\"],\"protocols\":[\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"],\"expiresAt\":\"2026-12-31T23:59:59.000Z\",\"delegationCid\":\"bafyreigq7hzk2wdn5vr3xl6m4c8tjp2yeaos6ubd7fhk3nwq5ziv4rlxte\",\"revokedAt\":null,\"reviewerDid\":\"did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH\",\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-10T08:00:00.000Z\",\"acceptedAt\":\"2026-09-10T08:30:00.000Z\"},{\"memberId\":\"mem_01J8Z9D4E5F6G7H8J9K0M1N2P3\",\"did\":null,\"email\":\"dev@acme.example\",\"role\":\"developer\",\"status\":\"invited\",\"capabilities\":[],\"protocols\":null,\"expiresAt\":null,\"delegationCid\":null,\"revokedAt\":null,\"reviewerDid\":null,\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-20T10:00:00.000Z\",\"acceptedAt\":null},{\"memberId\":\"mem_01J8ZF1G2H3J4K5M6N7P8Q9R0S\",\"did\":\"did:ixo:ixo1k2m4p6r8t0w2y4a6c8e0g2j4l6n8q0s2u4w6y8\",\"email\":null,\"role\":\"viewer\",\"status\":\"revoked\",\"capabilities\":[],\"protocols\":null,\"expiresAt\":\"2026-12-31T23:59:59.000Z\",\"delegationCid\":\"bafyreiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354\",\"revokedAt\":\"2026-09-21T16:00:00.000Z\",\"reviewerDid\":null,\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-10T08:00:00.000Z\",\"acceptedAt\":\"2026-09-10T08:30:00.000Z\"}]}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"description\":\"Any valid grant on the source may list its members (the console shows who can do what).\",\"x-capability\":null,\"x-ucan-action\":\"members/read\"},\"post\":{\"operationId\":\"inviteMember\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Invite a member\",\"description\":\"Names the role the owner will grant (`owner` makes a co-owner: a `source/*` grant); the grant itself is `PUT /v1/api/members/{memberId}/delegation`, signed in the owner's browser. By `email`: `status: invited`, the oracle emails the invitation to that address (the link `<CONSOLE_URL>/invite?token=…&oracle=<this oracle's URL>`, valid 7 days), and `inviteToken` (shown once) is the same link's token for the console to show if the email does not arrive. Inviting an email whose invite is still open is a re-invite: a fresh token and expiry, a fresh email, and the old token stops working. By `did`: the account exists, so the member is `accepted` at once and `inviteToken` is null.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/InviteMemberRequest\"},\"examples\":{\"email\":{\"value\":{\"email\":\"dev@acme.example\",\"role\":\"developer\"}},\"did\":{\"value\":{\"did\":\"did:ixo:ixo1x7c9h2k4m6p8r0t2v4x6z8q0s2u4w6y8a0c2e4\",\"role\":\"reviewer\"}}}}}},\"responses\":{\"201\":{\"description\":\"Invited.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/InviteMemberResponse\"},\"examples\":{\"email\":{\"value\":{\"memberId\":\"mem_01J8Z9D4E5F6G7H8J9K0M1N2P3\",\"did\":null,\"email\":\"dev@acme.example\",\"role\":\"developer\",\"status\":\"invited\",\"capabilities\":[],\"protocols\":null,\"expiresAt\":null,\"delegationCid\":null,\"revokedAt\":null,\"reviewerDid\":null,\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-20T10:00:00.000Z\",\"acceptedAt\":null,\"inviteToken\":\"inv_Hq3mT8vB1xK6pR9wZ2cF5jN7sL0dG4aY\"}},\"did\":{\"value\":{\"memberId\":\"mem_01J8ZB7C8D9E0F1G2H3J4K5M6N\",\"did\":\"did:ixo:ixo1v3n5q7s9u2w4y6a8c0e2g4j6l8n0p2r4t6w8y0\",\"email\":\"reviewer@acme.example\",\"role\":\"reviewer\",\"status\":\"accepted\",\"capabilities\":[],\"protocols\":null,\"expiresAt\":null,\"delegationCid\":null,\"revokedAt\":null,\"reviewerDid\":null,\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-10T08:00:00.000Z\",\"acceptedAt\":\"2026-09-10T08:30:00.000Z\",\"inviteToken\":null}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"description\":\"`CONFLICT` — the account (or an accepted member with this email) is already a member; or the idempotency 409s. `IDEMPOTENCY_MISMATCH` — this `Idempotency-Key` was used with a different request; `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"CONFLICT\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"dev@acme.example is already a member of this source.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"duplicate_member\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"source/*\",\"x-ucan-action\":\"members/invite\"}},\"/v1/api/members/accept\":{\"post\":{\"operationId\":\"acceptInvite\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Accept an email invite\",\"description\":\"Account-level (no `X-Source-Id`): the invoking IXO account becomes the invited member (`status: accepted`), and the inviter is emailed to approve it. It can call nothing until the owner uploads its grant. An unknown, already-used, replaced (re-invited) or expired (after 7 days) token is `404`; an account that already belongs to the source is `409 CONFLICT`.\",\"security\":[{\"ucan\":[]}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AcceptInviteRequest\"},\"examples\":{\"accept\":{\"value\":{\"inviteToken\":\"inv_Hq3mT8vB1xK6pR9wZ2cF5jN7sL0dG4aY\"}}}}}},\"responses\":{\"200\":{\"description\":\"The member.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Member\"},\"examples\":{\"accepted\":{\"value\":{\"memberId\":\"mem_01J8Z9D4E5F6G7H8J9K0M1N2P3\",\"did\":\"did:ixo:ixo1x7c9h2k4m6p8r0t2v4x6z8q0s2u4w6y8a0c2e4\",\"email\":\"dev@acme.example\",\"role\":\"developer\",\"status\":\"accepted\",\"capabilities\":[],\"protocols\":null,\"expiresAt\":null,\"delegationCid\":null,\"revokedAt\":null,\"reviewerDid\":null,\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-20T10:00:00.000Z\",\"acceptedAt\":\"2026-09-20T11:00:00.000Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/AccountForbidden\"},\"404\":{\"description\":\"`NOT_FOUND` — no such invite, it was already used or replaced, or it expired.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"NOT_FOUND\":{\"value\":{\"error\":{\"code\":\"NOT_FOUND\",\"message\":\"This invitation link is not valid or was already used. Ask the source's owner for a new one.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#NOT_FOUND\"}}},\"expired\":{\"value\":{\"error\":{\"code\":\"NOT_FOUND\",\"message\":\"This invitation has expired. Ask the source's owner to invite you again.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#NOT_FOUND\"}}}}}}},\"409\":{\"description\":\"`CONFLICT` — the account already belongs to the source; or the idempotency 409s. `IDEMPOTENCY_MISMATCH` — this `Idempotency-Key` was used with a different request; `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"CONFLICT\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"This account is already a member of this source.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"duplicate_member\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"account\",\"x-ucan-action\":\"members/accept\",\"parameters\":[{\"$ref\":\"#/components/parameters/IdempotencyKey\"}]}},\"/v1/api/members/{memberId}\":{\"patch\":{\"operationId\":\"updateMember\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Set your reviewer key or review emails\",\"description\":\"A member's own settings, on their own `memberId` only (another member's is `403`); a field left out is left alone. `reviewerDid`: registering one needs `reviewerProof`, a compact JWS signed by that did:key over `{ memberId, sourceId, reviewerDid, iat }`, so a stolen session cannot enrol a key it does not hold; `null` clears it. `notifyReviews`: whether claims waiting for review are emailed to you (the review room is unaffected). A role change is not a PATCH: revoke the grant and upload a new one.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/MemberIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/UpdateMemberRequest\"},\"examples\":{\"reviewerKey\":{\"value\":{\"reviewerDid\":\"did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK\",\"reviewerProof\":\"eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDprZXk6ejZNa2hhWGdCWkR2b3REa0w1MjU3ZmFpenRpR2lDMlF0S0xHcGJubkVHdGEyZG9LIn0.eyJtZW1iZXJJZCI6Im1lbV8wMUo4WjlENEU1RjZHN0g4SjlLME0xTjJQMyIsInNvdXJjZUlkIjoic3JjXzAxSjhaNUExQjJDM0Q0RTVGNkc3SDhKOUswIiwicmV2aWV3ZXJEaWQiOiJkaWQ6a2V5Ono2TWtoYVhnQlpEdm90RGtMNTI1N2ZhaXp0aUdpQzJRdEtMR3Bibm5FR3RhMmRvSyIsImlhdCI6MTc5MDAwMDAwMH0.c2lnbmVkLWJ5LXRoZS1uZXctZGlkLWtleQ\"}},\"clear\":{\"value\":{\"reviewerDid\":null}},\"emailsOff\":{\"value\":{\"notifyReviews\":false}}}}}},\"responses\":{\"200\":{\"description\":\"The member.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Member\"},\"examples\":{\"updated\":{\"value\":{\"memberId\":\"mem_01J8ZB7C8D9E0F1G2H3J4K5M6N\",\"did\":\"did:ixo:ixo1v3n5q7s9u2w4y6a8c0e2g4j6l8n0p2r4t6w8y0\",\"email\":\"reviewer@acme.example\",\"role\":\"reviewer\",\"status\":\"active\",\"capabilities\":[\"claims/read\",\"claims/review\"],\"protocols\":[\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"],\"expiresAt\":\"2026-12-31T23:59:59.000Z\",\"delegationCid\":\"bafyreigq7hzk2wdn5vr3xl6m4c8tjp2yeaos6ubd7fhk3nwq5ziv4rlxte\",\"revokedAt\":null,\"reviewerDid\":\"did:key:z6MkhaXgBZDvotDkL5257faiztiGiC2QtKLGpbnnEGta2doK\",\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-10T08:00:00.000Z\",\"acceptedAt\":\"2026-09-10T08:30:00.000Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"description\":\"`CONFLICT` — the reviewer key is already registered to another member; or the idempotency 409s. `IDEMPOTENCY_MISMATCH` — this `Idempotency-Key` was used with a different request; `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"CONFLICT\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"This reviewer key is already registered by another member. Each member needs their own key.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"duplicate_reviewer_key\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"claims/review\",\"x-ucan-action\":\"members/update\"},\"delete\":{\"operationId\":\"removeMember\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Remove a member\",\"description\":\"Removes the member and revokes their grant at once (its CID joins the source's revocation list). Never the owner (`409 CONFLICT`).\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/MemberIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"204\":{\"description\":\"Removed.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"description\":\"`CONFLICT` — the source's owner is its root and is never removed; or the idempotency 409s. `IDEMPOTENCY_MISMATCH` — this `Idempotency-Key` was used with a different request; `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"CONFLICT\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"The source's owner can't be removed: the owner always keeps full access.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"root_member\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"source/*\",\"x-ucan-action\":\"members/remove\"}},\"/v1/api/members/{memberId}/delegation\":{\"put\":{\"operationId\":\"grantMember\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Upload a member's grant\",\"description\":\"The owner's signed delegation to the member (§3.4 step 3), base64 of the delegation CAR, made in the owner's browser. Checked before it is stored — `400 VALIDATION` when it does not verify, is not issued by the owner (or a co-owner holding `source/*` from the owner), is not to this member's DID, is not over this source's resource `ixo:oracle/<oracle did:web>/source/<sourceId>`, its capabilities are not EXACTLY `role`'s preset, or it has expired. `nb.protocols` may narrow `claims/*`. Replacing a grant revokes the previous one. Once stored, the member is emailed that their access is ready (when the row has an email).\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/MemberIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/GrantMemberRequest\"},\"examples\":{\"reviewer\":{\"value\":{\"delegation\":\"OqJlcm9vdHOB2CpYJQABcRIgxL3y7uQm9p2cVb8nX4kW1tR6aH0sJ5fD3gE7yZ2qP9mMZ3ZlcnNpb24BjAFxEiDEvfLu5Cb2nZxVvydfhZbVtHpofSwnl8PeAT7JnapP2aJhc1hA7xk2oQ8bK4mR2vL7nW1tC5yS9pF3hJ6dE0gA8zQ4uX2kV7bN1sM5wT3rY9cL0fH6jD2eG8aB4iP7oU1nZ5xS3q\",\"role\":\"reviewer\"}}}}}},\"responses\":{\"200\":{\"description\":\"The member, with the live grant.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Member\"},\"examples\":{\"active\":{\"value\":{\"memberId\":\"mem_01J8ZB7C8D9E0F1G2H3J4K5M6N\",\"did\":\"did:ixo:ixo1v3n5q7s9u2w4y6a8c0e2g4j6l8n0p2r4t6w8y0\",\"email\":\"reviewer@acme.example\",\"role\":\"reviewer\",\"status\":\"active\",\"capabilities\":[\"claims/read\",\"claims/review\"],\"protocols\":[\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"],\"expiresAt\":\"2026-12-31T23:59:59.000Z\",\"delegationCid\":\"bafyreigq7hzk2wdn5vr3xl6m4c8tjp2yeaos6ubd7fhk3nwq5ziv4rlxte\",\"revokedAt\":null,\"reviewerDid\":null,\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-10T08:00:00.000Z\",\"acceptedAt\":\"2026-09-10T08:30:00.000Z\"}}}}}},\"400\":{\"description\":\"`VALIDATION` — the delegation does not verify, or does not match the member, source, role or clock.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"VALIDATION\":{\"value\":{\"error\":{\"code\":\"VALIDATION\",\"message\":\"This role grant can't be accepted: it must give exactly the reviewer role's permissions (claims/read, claims/review).\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"capabilities_mismatch\",\"expected\":[\"claims/read\",\"claims/review\"],\"got\":[\"claims/read\"]},\"docsUrl\":\"https://console.ixo.earth/docs/errors#VALIDATION\"}}},\"VALIDATION_audience\":{\"value\":{\"error\":{\"code\":\"VALIDATION\",\"message\":\"This role grant can't be accepted: it is issued to a different account than this member's.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"wrong_audience\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#VALIDATION\"}}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"description\":\"`CONFLICT` — the member is the source's root (never granted), or has not accepted the invite yet; or the idempotency 409s. `IDEMPOTENCY_MISMATCH` — this `Idempotency-Key` was used with a different request; `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"CONFLICT\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"This person hasn't accepted their invitation yet; a role can be given once they have.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"not_accepted\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"CONFLICT_root\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"The source's owner can't be granted a role: the owner always keeps full access.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"root_member\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"source/*\",\"x-ucan-action\":\"members/grant\"}},\"/v1/api/members/{memberId}/revoke\":{\"post\":{\"operationId\":\"revokeMember\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Revoke a member's grant\",\"description\":\"Effective at once: the grant's CID joins the source's revocation list, so any invocation proved by it is `403 FORBIDDEN`. The member stays listed (`status: revoked`) until removed; a new grant re-activates it. Never the owner (`409 CONFLICT`).\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/MemberIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"200\":{\"description\":\"The member.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Member\"},\"examples\":{\"revoked\":{\"value\":{\"memberId\":\"mem_01J8ZB7C8D9E0F1G2H3J4K5M6N\",\"did\":\"did:ixo:ixo1v3n5q7s9u2w4y6a8c0e2g4j6l8n0p2r4t6w8y0\",\"email\":\"reviewer@acme.example\",\"role\":\"reviewer\",\"status\":\"revoked\",\"capabilities\":[],\"protocols\":[\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"],\"expiresAt\":\"2026-12-31T23:59:59.000Z\",\"delegationCid\":\"bafyreigq7hzk2wdn5vr3xl6m4c8tjp2yeaos6ubd7fhk3nwq5ziv4rlxte\",\"revokedAt\":\"2026-09-22T15:00:00.000Z\",\"reviewerDid\":\"did:key:z6MkpTHR8VNsBxYAAWHut2Geadd9jSwuBV8xRoAnwWsdvktH\",\"notifyReviews\":true,\"reviewerDelegationExpiresAt\":null,\"invitedAt\":\"2026-09-10T08:00:00.000Z\",\"acceptedAt\":\"2026-09-10T08:30:00.000Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"description\":\"`CONFLICT` — the source's owner is its root and is never revoked; or the idempotency 409s. `IDEMPOTENCY_MISMATCH` — this `Idempotency-Key` was used with a different request; `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"CONFLICT\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"The source's owner can't be revoked: the owner always keeps full access.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"root_member\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"source/*\",\"x-ucan-action\":\"members/revoke\"}},\"/v1/api/audit\":{\"get\":{\"operationId\":\"listAudit\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"The audit log\",\"description\":\"Every console, CLI and operator action on the source, newest first.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"},{\"$ref\":\"#/components/parameters/Limit\"},{\"$ref\":\"#/components/parameters/Cursor\"}],\"responses\":{\"200\":{\"description\":\"A page of entries.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AuditPage\"},\"examples\":{\"page\":{\"value\":{\"items\":[{\"id\":\"aud_01J8Z9F6G7H8J9K0M1N2P3Q4R5\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"actor\":{\"kind\":\"member\",\"id\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\"},\"action\":\"key.created\",\"target\":\"7f3a9c1d\",\"at\":\"2026-09-01T09:05:00.000Z\",\"details\":{\"scopes\":[\"claims:write\",\"claims:read\"],\"maxSpendCentsPerDay\":50000}}],\"nextCursor\":null}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"audit/read\",\"x-ucan-action\":\"audit/read\"}},\"/v1/api/export\":{\"get\":{\"operationId\":\"exportSourceData\",\"tags\":[\"console\"],\"x-spec-delta\":true,\"summary\":\"Export the source's personal data\",\"description\":\"Owner only (§6.3). One JSON document of the source's personal data — its settings, members (emails, DIDs), webhook endpoints (URLs, never secrets), every stored claim (body, metadata, submitter, attachment descriptors; an erased body exports as null), the uploaded files (`uploads`: id, claim, media type, size, created — listed, not linked), the webhook delivery log (`webhookDeliveries`: id, event type, target URL, status, created — never payloads) and the review answers on its claims (`reviews`) — behind a short-lived signed URL served as an attachment. The file is deleted after a day, and can never be named as a claim's attachment.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceHeader\"}],\"responses\":{\"200\":{\"description\":\"Where to download it.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DataExport\"},\"examples\":{\"ready\":{\"value\":{\"url\":\"https://oracle.example.org/v1/api/files/upl_01J8ZA1B2C3D4E5F6G7H8J9K0M?exp=1790003600&sig=Xk2pQ9mZ7vB4nR1cT8yW3uL6sA0dF5gH\",\"expiresAt\":\"2026-09-22T13:00:00.000Z\"}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/Forbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"501\":{\"$ref\":\"#/components/responses/UploadsDisabled\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"source/*\",\"x-ucan-action\":\"source/export\"}},\"/v1/api/admin/sources\":{\"get\":{\"operationId\":\"adminListSources\",\"tags\":[\"operator\"],\"x-spec-delta\":true,\"summary\":\"All sources\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"name\":\"status\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"enum\":[\"active\",\"paused\"]},\"example\":\"paused\"},{\"$ref\":\"#/components/parameters/Limit\"},{\"$ref\":\"#/components/parameters/Cursor\"}],\"responses\":{\"200\":{\"description\":\"A page of sources.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/SourcePage\"},\"examples\":{\"page\":{\"value\":{\"items\":[{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"paused\",\"pausedReason\":\"rubric-unusable\",\"billingMode\":\"x402\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}],\"refillFloorCents\":2000,\"defaultWebhookUrl\":\"https://example.org/hooks/oracle\",\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"}],\"nextCursor\":null}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/OperatorForbidden\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"operator\",\"x-ucan-action\":\"admin/sources-read\"}},\"/v1/api/admin/sources/{sourceId}/pause\":{\"post\":{\"operationId\":\"adminPauseSource\",\"tags\":[\"operator\"],\"x-spec-delta\":true,\"summary\":\"Pause a source\",\"description\":\"An operator's hand pause: `pausedReason: operator`; `source.paused` is emitted.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":false,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/PauseSourceRequest\"},\"examples\":{\"note\":{\"value\":{\"note\":\"Chargeback investigation\"}}}}}},\"responses\":{\"200\":{\"description\":\"The source.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Source\"},\"examples\":{\"paused\":{\"value\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"paused\",\"pausedReason\":\"operator\",\"billingMode\":\"x402\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}],\"refillFloorCents\":2000,\"defaultWebhookUrl\":\"https://example.org/hooks/oracle\",\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/OperatorForbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/IdempotencyConflict\"},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"operator\",\"x-ucan-action\":\"admin/sources-pause\"}},\"/v1/api/admin/sources/{sourceId}/resume\":{\"post\":{\"operationId\":\"adminResumeSource\",\"tags\":[\"operator\"],\"x-spec-delta\":true,\"summary\":\"Resume a source\",\"description\":\"Clears any pause, automatic ones included (e.g. after a `rubric-unusable` protocol is fixed); `source.resumed` is emitted.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"responses\":{\"200\":{\"description\":\"The source.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Source\"},\"examples\":{\"resumed\":{\"$ref\":\"#/components/examples/Source\"}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/OperatorForbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/IdempotencyConflict\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"operator\",\"x-ucan-action\":\"admin/sources-resume\"}},\"/v1/api/admin/sources/{sourceId}/protocols\":{\"put\":{\"operationId\":\"adminSetSourceProtocols\",\"tags\":[\"operator\"],\"x-spec-delta\":true,\"summary\":\"Set the allow-list\",\"description\":\"Replaces the whole list. Every protocol costs the oracle's one published price (payments spec §3.1); a partner who should not pay gets billing mode `none` instead of a price.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/SetSourceProtocolsRequest\"},\"examples\":{\"set\":{\"value\":{\"protocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}]}}}}}},\"responses\":{\"200\":{\"description\":\"The source.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Source\"},\"examples\":{\"updated\":{\"$ref\":\"#/components/examples/Source\"}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/OperatorForbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/IdempotencyConflict\"},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"operator\",\"x-ucan-action\":\"admin/sources-protocols\"}},\"/v1/api/admin/sources/{sourceId}/billing-mode\":{\"put\":{\"operationId\":\"adminSetSourceBillingMode\",\"tags\":[\"operator\"],\"x-spec-delta\":true,\"summary\":\"Set how the source pays\",\"description\":\"`x402` — the source pays per decision (§11); `none` — the operator's own organisation or a partner it does not charge: no 402, no charge row, `credits` null on `/me`. The engine bills the oracle's owner its fee either way. Operators only, never the source's members.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/SourceIdPath\"},{\"$ref\":\"#/components/parameters/IdempotencyKey\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/SetBillingModeRequest\"},\"examples\":{\"none\":{\"value\":{\"billingMode\":\"none\"}}}}}},\"responses\":{\"200\":{\"description\":\"The source.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Source\"},\"examples\":{\"updated\":{\"value\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"active\",\"pausedReason\":null,\"billingMode\":\"none\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}],\"refillFloorCents\":2000,\"defaultWebhookUrl\":\"https://example.org/hooks/oracle\",\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/OperatorForbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"409\":{\"$ref\":\"#/components/responses/IdempotencyConflict\"},\"413\":{\"$ref\":\"#/components/responses/PayloadTooLarge\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"operator\",\"x-ucan-action\":\"admin/sources-billing\"}},\"/v1/api/admin/claims\":{\"get\":{\"operationId\":\"adminListClaims\",\"tags\":[\"operator\"],\"x-spec-delta\":true,\"summary\":\"Every claim, both lanes, newest first\",\"description\":\"Every source's API claims and every watched collection's chain claims in one keyset stream, newest first by the record's `createdAt`, as `ClaimRecord`s. The source list's filters plus `lane`, `sourceId` (API claims only) and `collectionId` (chain claims only).\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"name\":\"lane\",\"in\":\"query\",\"required\":false,\"schema\":{\"$ref\":\"#/components/schemas/ClaimLane\"},\"example\":\"chain\"},{\"name\":\"sourceId\",\"in\":\"query\",\"required\":false,\"description\":\"One source's API claims.\",\"schema\":{\"type\":\"string\",\"pattern\":\"^src_[0-9A-HJKMNP-TV-Z]{26}$\"},\"example\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\"},{\"name\":\"collectionId\",\"in\":\"query\",\"required\":false,\"description\":\"One on-chain collection's chain claims.\",\"schema\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"example\":\"1104\"},{\"name\":\"status\",\"in\":\"query\",\"required\":false,\"schema\":{\"$ref\":\"#/components/schemas/ClaimStatus\"},\"example\":\"processed\"},{\"name\":\"decision\",\"in\":\"query\",\"required\":false,\"description\":\"The decision's status; `pending_review` is the review queue.\",\"schema\":{\"$ref\":\"#/components/schemas/DecisionStatus\"},\"example\":\"pending_review\"},{\"name\":\"protocol\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"},\"example\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"name\":\"verdict\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"enum\":[\"approve\",\"partial\",\"reject\",\"review\"]},\"example\":\"approve\"},{\"name\":\"since\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"format\":\"date-time\"},\"example\":\"2026-09-22T00:00:00Z\"},{\"name\":\"until\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"string\",\"format\":\"date-time\"},\"example\":\"2026-09-23T00:00:00Z\"},{\"$ref\":\"#/components/parameters/Limit\"},{\"$ref\":\"#/components/parameters/Cursor\"}],\"responses\":{\"200\":{\"description\":\"A page of records.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AdminClaimPage\"},\"examples\":{\"page\":{\"value\":{\"items\":[{\"claimId\":\"bafyreigq4zsipbk5w3uqkbmh2w2633c4tcwudryvoqkfrq6hilstjr5ymq\",\"lane\":\"chain\",\"sourceId\":null,\"sourceName\":null,\"collectionId\":\"1104\",\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"7c1e9a3f5b7d9e1a3c5e7f9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"class\":\"supported\",\"evaluationStatus\":1,\"action\":\"auto_approve\",\"totalBps\":9100,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":9100,\"pending\":false,\"capped\":false}],\"pendingTasks\":[],\"reasons\":[{\"code\":\"all_gates_passed\",\"reason\":\"Every gate passed and the score cleared 7000 bps\",\"class\":\"supported\"}]},\"explanation\":\"Approved: proof attached, delivery quality 91%.\",\"receipt\":{\"cid\":\"bafyreib5x2ldcq7n4ykzq3wgjv6hqe2fzt5o7m4kdrc3u6sw2ayxnvqm4e\",\"jws\":\"eyJhbGciOiJFZERTQSIsInR5cCI6InZjK2p3dCIsImtpZCI6ImRpZDp3ZWI6ZXZhbC1lbmdpbmUuaXhvLmVhcnRoI2tleS0xIn0.eyJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiRGVjaXNpb25DcmVkZW50aWFsIl19.8Qk3n2Vb1yZ7xT0pL4mR6sW9aE5cH2jK8fN1gD3vB7uX0qY4tI6oP9lM2wS5rA\"},\"chainStatus\":\"submitted\"},\"review\":null,\"payment\":null,\"webhook\":null,\"error\":null,\"metadata\":null,\"createdAt\":\"2026-09-22T12:01:30.000Z\",\"decidedAt\":\"2026-09-22T12:01:36.905Z\"},{\"claimId\":\"apc_01J8Z6R8B3C4D5E6F7G8H9J0K1\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"sourceName\":\"Acme Logistics\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":\"did:ixo:ixo1r7s9u3w5y7a9c3e5g7j9l3n5q7s9u3w5y7a9c3\",\"submittedVia\":{\"name\":\"Claude\",\"verified\":true},\"status\":\"queued\",\"decision\":null,\"review\":null,\"payment\":null,\"webhook\":null,\"error\":null,\"metadata\":null,\"createdAt\":\"2026-09-22T12:00:00.000Z\",\"decidedAt\":null}],\"nextCursor\":\"WyIyMDI2LTA5LTIyVDEyOjAwOjAwLjAwMFoiLCJhcGNfMDFKOFo2UjhCM0M0RDVFNkY3RzhIOUowSzEiXQ==\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/OperatorForbidden\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"operator\",\"x-ucan-action\":\"admin/claims-read\"}},\"/v1/api/admin/claims/{claimId}\":{\"get\":{\"operationId\":\"adminGetClaim\",\"tags\":[\"operator\"],\"x-spec-delta\":true,\"summary\":\"Read any claim's record\",\"description\":\"Any lane, any source — the `ClaimRecord` the source's own read shows.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/AnyClaimIdPath\"}],\"responses\":{\"200\":{\"description\":\"The record (§4.4).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/AdminClaimRecord\"},\"examples\":{\"chain\":{\"value\":{\"claimId\":\"bafyreigq4zsipbk5w3uqkbmh2w2633c4tcwudryvoqkfrq6hilstjr5ymq\",\"lane\":\"chain\",\"sourceId\":null,\"sourceName\":null,\"collectionId\":\"1104\",\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"7c1e9a3f5b7d9e1a3c5e7f9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"class\":\"supported\",\"evaluationStatus\":1,\"action\":\"auto_approve\",\"totalBps\":9100,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":9100,\"pending\":false,\"capped\":false}],\"pendingTasks\":[],\"reasons\":[{\"code\":\"all_gates_passed\",\"reason\":\"Every gate passed and the score cleared 7000 bps\",\"class\":\"supported\"}]},\"explanation\":\"Approved: proof attached, delivery quality 91%.\",\"receipt\":{\"cid\":\"bafyreib5x2ldcq7n4ykzq3wgjv6hqe2fzt5o7m4kdrc3u6sw2ayxnvqm4e\",\"jws\":\"eyJhbGciOiJFZERTQSIsInR5cCI6InZjK2p3dCIsImtpZCI6ImRpZDp3ZWI6ZXZhbC1lbmdpbmUuaXhvLmVhcnRoI2tleS0xIn0.eyJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiRGVjaXNpb25DcmVkZW50aWFsIl19.8Qk3n2Vb1yZ7xT0pL4mR6sW9aE5cH2jK8fN1gD3vB7uX0qY4tI6oP9lM2wS5rA\"},\"chainStatus\":\"submitted\"},\"review\":null,\"payment\":null,\"webhook\":null,\"error\":null,\"metadata\":null,\"createdAt\":\"2026-09-22T12:01:30.000Z\",\"decidedAt\":\"2026-09-22T12:01:36.905Z\"}},\"api\":{\"summary\":\"An API claim, named for the operator\",\"value\":{\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"sourceName\":\"Acme Logistics\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"class\":\"supported\",\"evaluationStatus\":1,\"action\":\"auto_approve\",\"totalBps\":8600,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"},{\"code\":\"not_duplicate\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":8600,\"pending\":false,\"capped\":false}],\"pendingTasks\":[],\"reasons\":[{\"code\":\"all_gates_passed\",\"reason\":\"Every gate passed and the score cleared 7000 bps\",\"class\":\"supported\"}]},\"explanation\":\"Approved: proof attached, not a duplicate, delivery quality 86%.\",\"receipt\":{\"cid\":\"bafyreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku\",\"jws\":\"eyJhbGciOiJFZERTQSIsInR5cCI6InZjK2p3dCIsImtpZCI6ImRpZDp3ZWI6ZXZhbC1lbmdpbmUuaXhvLmVhcnRoI2tleS0xIn0.eyJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiRGVjaXNpb25DcmVkZW50aWFsIl19.8Qk3n2Vb1yZ7xT0pL4mR6sW9aE5cH2jK8fN1gD3vB7uX0qY4tI6oP9lM2wS5rA\"},\"chainStatus\":\"skipped\"},\"review\":null,\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":\"0e36f2f712202b9aa2c54eb2d427bb143a063f3106a1e0daeadbffe8ad8ae871\",\"status\":\"settled\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"delivered\",\"attempts\":1},\"error\":null,\"metadata\":{\"orderId\":\"88213\"},\"createdAt\":\"2026-09-22T12:00:00.000Z\",\"decidedAt\":\"2026-09-22T12:00:07.412Z\"}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/OperatorForbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"operator\",\"x-ucan-action\":\"admin/claims-read\"}},\"/v1/api/admin/claims/{claimId}/events\":{\"get\":{\"operationId\":\"adminGetClaimEvents\",\"tags\":[\"operator\"],\"x-spec-delta\":true,\"summary\":\"Any claim's timeline\",\"description\":\"An API claim's stored timeline, or a chain claim's derived from its ledger's timestamps (accepted, facts produced, decided or review required → answered → folded, failed, and `chain_submitted` once the evaluation is on chain). Names, codes and digests — never a fact value.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/AnyClaimIdPath\"}],\"responses\":{\"200\":{\"description\":\"Oldest first.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ClaimEvents\"},\"examples\":{\"chain\":{\"value\":{\"claimId\":\"bafyreigq4zsipbk5w3uqkbmh2w2633c4tcwudryvoqkfrq6hilstjr5ymq\",\"items\":[{\"id\":\"evt_01J8Z6T0A1B2C3D4E5F6G7H8J9\",\"type\":\"accepted\",\"at\":\"2026-09-22T12:01:30.000Z\",\"data\":{\"collectionId\":\"1104\"}},{\"id\":\"evt_01J8Z6T6X7N2M5K8P3R9T6V1W4\",\"type\":\"facts_produced\",\"at\":\"2026-09-22T12:01:36.904Z\",\"data\":{\"ext\":[\"addressCheck\"],\"ai\":[\"photoShowsDelivery\"]}},{\"id\":\"evt_01J8Z6T6X7N2M5K8P3R9T6V1W5\",\"type\":\"decided\",\"at\":\"2026-09-22T12:01:36.905Z\",\"data\":{\"status\":\"decided\",\"verdict\":\"approve\",\"resultDigest\":\"7c1e9a3f5b7d9e1a3c5e7f9b1d3f5a7c9e1b3d5f7a9c1e3b5d7f9a1c3e5b7d9f\",\"receiptCid\":\"bafyreib5x2ldcq7n4ykzq3wgjv6hqe2fzt5o7m4kdrc3u6sw2ayxnvqm4e\"}},{\"id\":\"evt_01J8Z6TA2B3C4D5E6F7G8H9J0K\",\"type\":\"chain_submitted\",\"at\":\"2026-09-22T12:01:41.220Z\",\"data\":{\"chainStatus\":\"submitted\",\"txHash\":\"9F2C4E1A7B3D5F8E0C6A2B4D9E1F3A5C7B8D0E2F4A6C8E0B2D4F6A8C0E2B4D6F\"}}]}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/OperatorForbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"operator\",\"x-ucan-action\":\"admin/claims-read\"}},\"/v1/api/admin/claims/{claimId}/receipt\":{\"get\":{\"operationId\":\"adminGetClaimReceipt\",\"tags\":[\"operator\"],\"x-spec-delta\":true,\"summary\":\"Any claim's signed receipt\",\"description\":\"As the source's receipt read; 404 until the decision is final.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/AnyClaimIdPath\"}],\"responses\":{\"200\":{\"description\":\"The receipt.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/Receipt\"},\"examples\":{\"receipt\":{\"value\":{\"cid\":\"bafyreib5x2ldcq7n4ykzq3wgjv6hqe2fzt5o7m4kdrc3u6sw2ayxnvqm4e\",\"jws\":\"eyJhbGciOiJFZERTQSIsInR5cCI6InZjK2p3dCIsImtpZCI6ImRpZDp3ZWI6ZXZhbC1lbmdpbmUuaXhvLmVhcnRoI2tleS0xIn0.eyJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiRGVjaXNpb25DcmVkZW50aWFsIl19.8Qk3n2Vb1yZ7xT0pL4mR6sW9aE5cH2jK8fN1gD3vB7uX0qY4tI6oP9lM2wS5rA\",\"issuerKeysUrl\":\"https://eval-engine.ixo.earth/v1/issuer-keys\",\"verifyUrl\":\"https://eval-engine.ixo.earth/v1/receipts/bafyreib5x2ldcq7n4ykzq3wgjv6hqe2fzt5o7m4kdrc3u6sw2ayxnvqm4e\"}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/OperatorForbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"operator\",\"x-ucan-action\":\"admin/claims-read\"}},\"/v1/api/admin/claims/{claimId}/report\":{\"get\":{\"operationId\":\"adminGetClaimReport\",\"tags\":[\"operator\"],\"x-spec-delta\":true,\"summary\":\"Any claim's decision report\",\"description\":\"As the source's report read — proxied from the engine; HTML or JSON by `Accept`.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"$ref\":\"#/components/parameters/AnyClaimIdPath\"}],\"responses\":{\"200\":{\"description\":\"The report.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"text/html\":{\"schema\":{\"type\":\"string\"},\"examples\":{\"html\":{\"value\":\"<!doctype html><html><head><title>Decision bafyreigq4zsipbk5w3uqkbmh2w2633c4tcwudryvoqkfrq6hilstjr5ymq</title></head><body><h1>Approved</h1><p>Every gate passed; delivery quality 91%.</p></body></html>\"}}},\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/DecisionReport\"},\"examples\":{\"report\":{\"value\":{\"claimId\":\"bafyreigq4zsipbk5w3uqkbmh2w2633c4tcwudryvoqkfrq6hilstjr5ymq\",\"verdict\":\"approve\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"sections\":[{\"title\":\"Gates\",\"items\":[\"proof_attached: passed\"]}]}}}}}},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/OperatorForbidden\"},\"404\":{\"$ref\":\"#/components/responses/NotFound\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"operator\",\"x-ucan-action\":\"admin/claims-read\"}},\"/v1/api/admin/facilitator-delegation\":{\"get\":{\"operationId\":\"adminGetFacilitatorDelegation\",\"tags\":[\"operator\"],\"x-spec-delta\":true,\"summary\":\"A facilitator delegation for the operator\",\"description\":\"A fresh UCAN delegation, signed by this oracle's did:web (the key `/.well-known/did.json` publishes), to the invoking operator's did:ixo — what the card facilitator takes as the proof of an operator's actions. Its `att` is exactly one `{ with: \\\"ixo:ixo-pay-facilitator\\\", can: <action> }` per requested action (no `nb`, never `*`), and `capabilities` echoes it. It carries `nbf` = its issue time − 60 s (a UCAN is valid only once `now > nbf`, so it is backdated past skew) and `exp` = `min(issue + ttl, nbf + 3600)` (unix seconds; `expiresAt` is that `exp`), so `exp − nbf ≤ 3600` always — the default gives `exp` = issue + 3540; the facilitator refuses a grant without `nbf` or living longer. `delegation` is a base64 CAR, the same encoding as a console role grant. Every call mints a new one (a nonce each; `Cache-Control: no-store`) and is audited with its CID, never the token. Console sign-in only: an API key is `401 UNAUTHORIZED`, an account outside `ORACLE_ADMIN_DIDS` or a source-scoped invocation `403 FORBIDDEN`. Never a payout action: the payouts facilitator holds each company's payout team itself (`GET /v1/payouts/info`). `503 UNAVAILABLE` when the oracle has no signing key configured.\",\"security\":[{\"ucan\":[]}],\"parameters\":[{\"name\":\"actions\",\"in\":\"query\",\"required\":false,\"description\":\"Comma-separated facilitator actions to delegate, deduplicated; the delegation lists them in the order below. Default all four. Anything else — `*`, the retired `operators/manage`, any `payouts/*` action, an unknown name, an empty list — is `400 VALIDATION`.\",\"schema\":{\"type\":\"string\",\"default\":\"operators/onboard,operators/read,operators/refund,operators/evidence\"},\"example\":\"operators/read,operators/evidence\"},{\"name\":\"ttl\",\"in\":\"query\",\"required\":false,\"description\":\"Seconds until the delegation expires, 60–3600.\",\"schema\":{\"type\":\"integer\",\"minimum\":60,\"maximum\":3600,\"default\":3600},\"example\":900}],\"responses\":{\"200\":{\"description\":\"The delegation.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Cache-Control\":{\"description\":\"`no-store` — every answer is a new credential.\",\"schema\":{\"type\":\"string\"},\"example\":\"no-store\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/FacilitatorDelegation\"},\"examples\":{\"delegation\":{\"value\":{\"delegation\":\"OqJlcm9vdHOB2CpYJQABcRIgN+R4NMfEZM6OSej4zkJ6zK+lp8JjYsVSUdjQKzfx49hndmVyc2lvbgHkAwFxEiB2nAzc6mRM7en48guvsYIBbG31lqBP7SD1ehO0bSF/Vqlhc1hE7aEDQJSMQm0jK/q+7LDYJtIqS5K6XaGQfEY8FUW7wa5DlC+9fw2R+PTFAG9G6qQBQZ54cheP0RC9Q7efjtKbHDI9VQNhdmUwLjkuMWNhdHSEomNjYW5xb3BlcmF0b3JzL29uYm9hcmRkd2l0aHdpeG86aXhvLXBheS1mYWNpbGl0YXRvcqJjY2Fubm9wZXJhdG9ycy9yZWFkZHdpdGh3aXhvOml4by1wYXktZmFjaWxpdGF0b3KiY2NhbnBvcGVyYXRvcnMvcmVmdW5kZHdpdGh3aXhvOml4by1wYXktZmFjaWxpdGF0b3KiY2NhbnJvcGVyYXRvcnMvZXZpZGVuY2Vkd2l0aHdpeG86aXhvLXBheS1mYWNpbGl0YXRvcmNhdWRYMJ0aaXhvOml4bzFxOXgzdjhrMm01bjdwNHI2dDh3MHkyejRhNmM4ZTBnMmo0bDZuOGNleHAaar0H0GNmY3SBoWVub25jZXgkMGM1ZTNmMWEtN2IyZC00ZTlmLThhNmMtMWQzYjVmN2U5YTJjY2lzc1gYnRp3ZWI6b3JhY2xlLmV4YW1wbGUub3JnY25iZhpqvPn8Y3ByZoBZAXESIDfkeDTHxGTOjkno+M5CesyvpafCY2LFUlHY0Cs38ePYoWp1Y2FuQDAuOS4x2CpYJQABcRIgdpwM3OpkTO3p+PILr7GCAWxt9ZagT+0g9XoTtG0hf1Y=\",\"issuer\":\"did:web:oracle.example.org\",\"audience\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"capabilities\":[{\"with\":\"ixo:ixo-pay-facilitator\",\"can\":\"operators/onboard\"},{\"with\":\"ixo:ixo-pay-facilitator\",\"can\":\"operators/read\"},{\"with\":\"ixo:ixo-pay-facilitator\",\"can\":\"operators/refund\"},{\"with\":\"ixo:ixo-pay-facilitator\",\"can\":\"operators/evidence\"}],\"expiresAt\":\"2026-09-30T13:00:00.000Z\"}}}}}},\"400\":{\"$ref\":\"#/components/responses/Validation\"},\"401\":{\"$ref\":\"#/components/responses/Unauthorized\"},\"403\":{\"$ref\":\"#/components/responses/OperatorForbidden\"},\"429\":{\"$ref\":\"#/components/responses/RateLimited\"},\"500\":{\"$ref\":\"#/components/responses/Internal\"},\"503\":{\"$ref\":\"#/components/responses/Unavailable\"}},\"x-capability\":\"operator\",\"x-ucan-action\":\"admin/facilitator-delegation\"}}},\"webhooks\":{\"claim.accepted\":{\"post\":{\"operationId\":\"webhookClaimAccepted\",\"tags\":[\"webhooks\"],\"summary\":\"`claim.accepted`\",\"description\":\"POSTed to every endpoint subscribed to this type (and `claim.*` also to the claim's own `webhookUrl`, or else to the source's default URL — whatever endpoints exist). Verify `Oracle-Signature` before trusting the body; de-duplicate on `Oracle-Event-Id`. Answer 2xx within 10 s or it is retried: 8 attempts over 24 h.\",\"parameters\":[{\"$ref\":\"#/components/parameters/OracleSignature\"},{\"$ref\":\"#/components/parameters/OracleEventId\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEnvelope\"},\"examples\":{\"claim.accepted\":{\"value\":{\"id\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"claim.accepted\",\"createdAt\":\"2026-09-22T12:00:07.412Z\",\"apiVersion\":\"v1\",\"data\":{\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"queued\",\"decision\":null,\"review\":null,\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":null,\"status\":\"reserved\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":null,\"error\":null,\"metadata\":{\"orderId\":\"88213\"},\"createdAt\":\"2026-09-22T12:00:00.000Z\",\"decidedAt\":null}}}}}}},\"responses\":{\"2XX\":{\"description\":\"Acknowledged. Anything else, or no answer within 10 s, is retried.\"}}}},\"claim.decided\":{\"post\":{\"operationId\":\"webhookClaimDecided\",\"tags\":[\"webhooks\"],\"summary\":\"`claim.decided`\",\"description\":\"POSTed to every endpoint subscribed to this type (and `claim.*` also to the claim's own `webhookUrl`, or else to the source's default URL — whatever endpoints exist). Verify `Oracle-Signature` before trusting the body; de-duplicate on `Oracle-Event-Id`. Answer 2xx within 10 s or it is retried: 8 attempts over 24 h.\",\"parameters\":[{\"$ref\":\"#/components/parameters/OracleSignature\"},{\"$ref\":\"#/components/parameters/OracleEventId\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEnvelope\"},\"examples\":{\"claim.decided\":{\"value\":{\"id\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"claim.decided\",\"createdAt\":\"2026-09-22T12:00:07.412Z\",\"apiVersion\":\"v1\",\"data\":{\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"submitter\":\"user-4471\",\"status\":\"processed\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"class\":\"supported\",\"evaluationStatus\":1,\"action\":\"auto_approve\",\"totalBps\":8600,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"},{\"code\":\"not_duplicate\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":8600,\"pending\":false,\"capped\":false}],\"pendingTasks\":[],\"reasons\":[{\"code\":\"all_gates_passed\",\"reason\":\"Every gate passed and the score cleared 7000 bps\",\"class\":\"supported\"}]},\"explanation\":\"Approved: proof attached, not a duplicate, delivery quality 86%.\",\"receipt\":{\"cid\":\"bafkreigv3m5k2xq7y6wzl4n3c2b5a7d6e8f9g0h1i2j3k4l5m6n7o8p9qa\",\"jws\":\"eyJhbGciOiJFZERTQSIsImN0eSI6InZjIiwia2lkIjoiZGlkOndlYjpldmFsLWVuZ2luZS5peG8uZWFydGgja2V5LTEiLCJ0eXAiOiJ2Yytqd3QifQ.eyJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiRGVjaXNpb25DcmVkZW50aWFsIiwiQ2xhaW1EZWNpc2lvbkNyZWRlbnRpYWwiLCJEZWNpc2lvblRvUGF5Q3JlZGVudGlhbCJdfQ.3pQx7Lk2Vb9yZ1xT0pL4mR6sW9aE5cH2jK8fN1gD3vB7uX0qY4tI6oP9lM2wS5rA\"},\"chainStatus\":\"skipped\"},\"review\":null,\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":\"0e36f2f712202b9aa2c54eb2d427bb143a063f3106a1e0daeadbffe8ad8ae871\",\"status\":\"settled\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"delivered\",\"attempts\":1},\"error\":null,\"metadata\":{\"orderId\":\"88213\"},\"createdAt\":\"2026-09-22T12:00:00.000Z\",\"decidedAt\":\"2026-09-22T12:00:07.412Z\"}}}}}}},\"responses\":{\"2XX\":{\"description\":\"Acknowledged. Anything else, or no answer within 10 s, is retried.\"}}}},\"claim.review_required\":{\"post\":{\"operationId\":\"webhookClaimReviewRequired\",\"tags\":[\"webhooks\"],\"summary\":\"`claim.review_required`\",\"description\":\"POSTed to every endpoint subscribed to this type (and `claim.*` also to the claim's own `webhookUrl`, or else to the source's default URL — whatever endpoints exist). Verify `Oracle-Signature` before trusting the body; de-duplicate on `Oracle-Event-Id`. Answer 2xx within 10 s or it is retried: 8 attempts over 24 h.\",\"parameters\":[{\"$ref\":\"#/components/parameters/OracleSignature\"},{\"$ref\":\"#/components/parameters/OracleEventId\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEnvelope\"},\"examples\":{\"claim.review_required\":{\"value\":{\"id\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"claim.review_required\",\"createdAt\":\"2026-09-22T12:00:07.412Z\",\"apiVersion\":\"v1\",\"data\":{\"claimId\":\"apc_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"pending_review\",\"verdict\":\"review\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"decision\":{\"status\":\"pending_review\",\"verdict\":\"review\",\"class\":\"requires_human_review\",\"evaluationStatus\":5,\"action\":\"needs_human_review\",\"totalBps\":null,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":null,\"pending\":true,\"capped\":false}],\"pendingTasks\":[\"confirm_recipient\"],\"reasons\":[{\"code\":\"photo_unclear\",\"reason\":\"The delivery photo does not show the recipient\",\"class\":\"requires_human_review\"}]},\"explanation\":\"A reviewer must confirm the recipient.\",\"receipt\":null,\"chainStatus\":\"skipped\"},\"review\":{\"pendingTasks\":[{\"id\":\"confirm_recipient\",\"prompt\":\"Does the photo show the named recipient accepting the package?\",\"answer\":{\"type\":\"boolean\"}}],\"answeredAt\":null,\"foldedAt\":null,\"foldError\":null,\"answerBy\":\"2026-10-22T11:57:00.000Z\"},\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":null,\"status\":\"reserved\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"failed\",\"attempts\":2},\"error\":null,\"metadata\":{\"orderId\":\"88214\"},\"createdAt\":\"2026-09-22T11:58:00.000Z\",\"decidedAt\":\"2026-09-22T11:58:09.200Z\"}}}}}}},\"responses\":{\"2XX\":{\"description\":\"Acknowledged. Anything else, or no answer within 10 s, is retried.\"}}}},\"claim.review_expired\":{\"post\":{\"operationId\":\"webhookClaimReviewExpired\",\"tags\":[\"webhooks\"],\"summary\":\"`claim.review_expired`\",\"description\":\"A paid claim's review passed its `review.answerBy` unanswered (contracts v1.3.1): its payment reservation ran out, so the claim is closed UNPAID. Sent once. The record keeps the engine's `pending_review` — nothing was decided — so this event is the result; answers are refused `409 REVIEW_EXPIRED` from here on. POSTed to every endpoint subscribed to this type (and `claim.*` also to the claim's own `webhookUrl`, or else to the source's default URL — whatever endpoints exist). Verify `Oracle-Signature` before trusting the body; de-duplicate on `Oracle-Event-Id`. Answer 2xx within 10 s or it is retried: 8 attempts over 24 h.\",\"parameters\":[{\"$ref\":\"#/components/parameters/OracleSignature\"},{\"$ref\":\"#/components/parameters/OracleEventId\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEnvelope\"},\"examples\":{\"claim.review_expired\":{\"value\":{\"id\":\"evt_01JB3M7Q2R4S6T8V0W2X4Y6Z8A\",\"type\":\"claim.review_expired\",\"createdAt\":\"2026-10-22T11:57:00.000Z\",\"apiVersion\":\"v1\",\"data\":{\"claimId\":\"apc_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"pending_review\",\"verdict\":\"review\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"decision\":{\"status\":\"pending_review\",\"verdict\":\"review\",\"class\":\"requires_human_review\",\"evaluationStatus\":5,\"action\":\"needs_human_review\",\"totalBps\":null,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":null,\"pending\":true,\"capped\":false}],\"pendingTasks\":[\"confirm_recipient\"],\"reasons\":[{\"code\":\"photo_unclear\",\"reason\":\"The delivery photo does not show the recipient\",\"class\":\"requires_human_review\"}]},\"explanation\":\"A reviewer must confirm the recipient.\",\"receipt\":null,\"chainStatus\":\"skipped\"},\"review\":{\"pendingTasks\":[{\"id\":\"confirm_recipient\",\"prompt\":\"Does the photo show the named recipient accepting the package?\",\"answer\":{\"type\":\"boolean\"}}],\"answeredAt\":null,\"foldedAt\":null,\"foldError\":null,\"answerBy\":\"2026-10-22T11:57:00.000Z\"},\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":null,\"status\":\"reserved\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"failed\",\"attempts\":2},\"error\":null,\"metadata\":{\"orderId\":\"88214\"},\"createdAt\":\"2026-09-22T11:58:00.000Z\",\"decidedAt\":\"2026-09-22T11:58:09.200Z\"}}}}}}},\"responses\":{\"2XX\":{\"description\":\"Acknowledged. Anything else, or no answer within 10 s, is retried.\"}}}},\"claim.folded\":{\"post\":{\"operationId\":\"webhookClaimFolded\",\"tags\":[\"webhooks\"],\"summary\":\"`claim.folded`\",\"description\":\"POSTed to every endpoint subscribed to this type (and `claim.*` also to the claim's own `webhookUrl`, or else to the source's default URL — whatever endpoints exist). Verify `Oracle-Signature` before trusting the body; de-duplicate on `Oracle-Event-Id`. Answer 2xx within 10 s or it is retried: 8 attempts over 24 h.\",\"parameters\":[{\"$ref\":\"#/components/parameters/OracleSignature\"},{\"$ref\":\"#/components/parameters/OracleEventId\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEnvelope\"},\"examples\":{\"claim.folded\":{\"value\":{\"id\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"claim.folded\",\"createdAt\":\"2026-09-22T12:00:07.412Z\",\"apiVersion\":\"v1\",\"data\":{\"claimId\":\"apc_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"class\":\"supported\",\"evaluationStatus\":1,\"action\":\"auto_approve\",\"totalBps\":8600,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"},{\"code\":\"not_duplicate\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":8600,\"pending\":false,\"capped\":false}],\"pendingTasks\":[],\"reasons\":[{\"code\":\"all_gates_passed\",\"reason\":\"Every gate passed and the score cleared 7000 bps\",\"class\":\"supported\"}]},\"explanation\":\"Approved: proof attached, not a duplicate, delivery quality 86%.\",\"receipt\":{\"cid\":\"bafyreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku\",\"jws\":\"eyJhbGciOiJFZERTQSIsInR5cCI6InZjK2p3dCIsImtpZCI6ImRpZDp3ZWI6ZXZhbC1lbmdpbmUuaXhvLmVhcnRoI2tleS0xIn0.eyJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiRGVjaXNpb25DcmVkZW50aWFsIl19.8Qk3n2Vb1yZ7xT0pL4mR6sW9aE5cH2jK8fN1gD3vB7uX0qY4tI6oP9lM2wS5rA\"},\"chainStatus\":\"skipped\"},\"review\":{\"pendingTasks\":[],\"answeredAt\":\"2026-09-22T14:10:00.000Z\",\"foldedAt\":\"2026-09-22T14:10:04.000Z\",\"foldError\":null,\"answerBy\":null},\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":\"ddcdf559e322d51dd85b1acc84fefcd164216f34de5d0032eeeee66486740525\",\"status\":\"settled\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"failed\",\"attempts\":2},\"error\":null,\"metadata\":{\"orderId\":\"88214\"},\"createdAt\":\"2026-09-22T11:58:00.000Z\",\"decidedAt\":\"2026-09-22T14:10:04.000Z\"}}}}}}},\"responses\":{\"2XX\":{\"description\":\"Acknowledged. Anything else, or no answer within 10 s, is retried.\"}}}},\"claim.unusable\":{\"post\":{\"operationId\":\"webhookClaimUnusable\",\"tags\":[\"webhooks\"],\"summary\":\"`claim.unusable`\",\"description\":\"POSTed to every endpoint subscribed to this type (and `claim.*` also to the claim's own `webhookUrl`, or else to the source's default URL — whatever endpoints exist). Verify `Oracle-Signature` before trusting the body; de-duplicate on `Oracle-Event-Id`. Answer 2xx within 10 s or it is retried: 8 attempts over 24 h.\",\"parameters\":[{\"$ref\":\"#/components/parameters/OracleSignature\"},{\"$ref\":\"#/components/parameters/OracleEventId\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEnvelope\"},\"examples\":{\"claim.unusable\":{\"value\":{\"id\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"claim.unusable\",\"createdAt\":\"2026-09-22T12:00:07.412Z\",\"apiVersion\":\"v1\",\"data\":{\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"unusable\",\"verdict\":null,\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":null,\"resultDigest\":null,\"decision\":null,\"explanation\":null,\"receipt\":null,\"chainStatus\":\"skipped\"},\"review\":null,\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":\"0e36f2f712202b9aa2c54eb2d427bb143a063f3106a1e0daeadbffe8ad8ae871\",\"status\":\"settled\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"delivered\",\"attempts\":1},\"error\":null,\"metadata\":{\"orderId\":\"88213\"},\"createdAt\":\"2026-09-22T12:00:00.000Z\",\"decidedAt\":\"2026-09-22T12:00:07.412Z\"}}}}}}},\"responses\":{\"2XX\":{\"description\":\"Acknowledged. Anything else, or no answer within 10 s, is retried.\"}}}},\"claim.failed\":{\"post\":{\"operationId\":\"webhookClaimFailed\",\"tags\":[\"webhooks\"],\"summary\":\"`claim.failed`\",\"description\":\"POSTed to every endpoint subscribed to this type (and `claim.*` also to the claim's own `webhookUrl`, or else to the source's default URL — whatever endpoints exist). Verify `Oracle-Signature` before trusting the body; de-duplicate on `Oracle-Event-Id`. Answer 2xx within 10 s or it is retried: 8 attempts over 24 h.\",\"parameters\":[{\"$ref\":\"#/components/parameters/OracleSignature\"},{\"$ref\":\"#/components/parameters/OracleEventId\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEnvelope\"},\"examples\":{\"claim.failed\":{\"value\":{\"id\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"claim.failed\",\"createdAt\":\"2026-09-22T12:00:07.412Z\",\"apiVersion\":\"v1\",\"data\":{\"claimId\":\"apc_01J8Z6R8B3C4D5E6F7G8H9J0K1\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"failed\",\"decision\":{\"status\":\"invalid_facts\",\"verdict\":null,\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":null,\"resultDigest\":null,\"decision\":null,\"explanation\":null,\"receipt\":null,\"chainStatus\":\"skipped\"},\"review\":null,\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":\"8f08baed795f984d38a0e319ea1e59682f676fa2222ced72cb907d7831d221ea\",\"status\":\"settled\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"delivered\",\"attempts\":1},\"error\":{\"code\":\"invalid_facts\",\"message\":\"The oracle could not produce the facts this protocol needs.\"},\"metadata\":null,\"createdAt\":\"2026-09-22T11:50:00.000Z\",\"decidedAt\":null}}}}}}},\"responses\":{\"2XX\":{\"description\":\"Acknowledged. Anything else, or no answer within 10 s, is retried.\"}}}},\"source.paused\":{\"post\":{\"operationId\":\"webhookSourcePaused\",\"tags\":[\"webhooks\"],\"summary\":\"`source.paused`\",\"description\":\"POSTed to every endpoint subscribed to this type (and `claim.*` also to the claim's own `webhookUrl`, or else to the source's default URL — whatever endpoints exist). Verify `Oracle-Signature` before trusting the body; de-duplicate on `Oracle-Event-Id`. Answer 2xx within 10 s or it is retried: 8 attempts over 24 h.\",\"parameters\":[{\"$ref\":\"#/components/parameters/OracleSignature\"},{\"$ref\":\"#/components/parameters/OracleEventId\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEnvelope\"},\"examples\":{\"source.paused\":{\"value\":{\"id\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"source.paused\",\"createdAt\":\"2026-09-22T12:00:07.412Z\",\"apiVersion\":\"v1\",\"data\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"status\":\"paused\",\"pausedReason\":\"rubric-unusable\",\"issues\":[{\"code\":\"FORM_DRIFT\",\"message\":\"The claim form changed since the rubric was pinned\",\"path\":\"#vct\"}]}}}}}}},\"responses\":{\"2XX\":{\"description\":\"Acknowledged. Anything else, or no answer within 10 s, is retried.\"}}}},\"source.resumed\":{\"post\":{\"operationId\":\"webhookSourceResumed\",\"tags\":[\"webhooks\"],\"summary\":\"`source.resumed`\",\"description\":\"POSTed to every endpoint subscribed to this type (and `claim.*` also to the claim's own `webhookUrl`, or else to the source's default URL — whatever endpoints exist). Verify `Oracle-Signature` before trusting the body; de-duplicate on `Oracle-Event-Id`. Answer 2xx within 10 s or it is retried: 8 attempts over 24 h.\",\"parameters\":[{\"$ref\":\"#/components/parameters/OracleSignature\"},{\"$ref\":\"#/components/parameters/OracleEventId\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEnvelope\"},\"examples\":{\"source.resumed\":{\"value\":{\"id\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"source.resumed\",\"createdAt\":\"2026-09-22T12:00:07.412Z\",\"apiVersion\":\"v1\",\"data\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"status\":\"active\",\"pausedReason\":null}}}}}}},\"responses\":{\"2XX\":{\"description\":\"Acknowledged. Anything else, or no answer within 10 s, is retried.\"}}}},\"payment.settled\":{\"post\":{\"operationId\":\"webhookPaymentSettled\",\"tags\":[\"webhooks\"],\"summary\":\"`payment.settled`\",\"description\":\"POSTed to every endpoint subscribed to this type (and `claim.*` also to the claim's own `webhookUrl`, or else to the source's default URL — whatever endpoints exist). Verify `Oracle-Signature` before trusting the body; de-duplicate on `Oracle-Event-Id`. Answer 2xx within 10 s or it is retried: 8 attempts over 24 h.\",\"parameters\":[{\"$ref\":\"#/components/parameters/OracleSignature\"},{\"$ref\":\"#/components/parameters/OracleEventId\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEnvelope\"},\"examples\":{\"payment.settled\":{\"value\":{\"id\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"payment.settled\",\"createdAt\":\"2026-09-22T12:00:07.412Z\",\"apiVersion\":\"v1\",\"data\":{\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"settlementId\":\"0e36f2f712202b9aa2c54eb2d427bb143a063f3106a1e0daeadbffe8ad8ae871\",\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"status\":\"settled\"}}}}}}},\"responses\":{\"2XX\":{\"description\":\"Acknowledged. Anything else, or no answer within 10 s, is retried.\"}}}},\"balance.low\":{\"post\":{\"operationId\":\"webhookBalanceLow\",\"tags\":[\"webhooks\"],\"summary\":\"`balance.low`\",\"description\":\"POSTed to every endpoint subscribed to this type (and `claim.*` also to the claim's own `webhookUrl`, or else to the source's default URL — whatever endpoints exist). Verify `Oracle-Signature` before trusting the body; de-duplicate on `Oracle-Event-Id`. Answer 2xx within 10 s or it is retried: 8 attempts over 24 h.\",\"parameters\":[{\"$ref\":\"#/components/parameters/OracleSignature\"},{\"$ref\":\"#/components/parameters/OracleEventId\"}],\"requestBody\":{\"required\":true,\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/WebhookEnvelope\"},\"examples\":{\"balance.low\":{\"value\":{\"id\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\",\"type\":\"balance.low\",\"createdAt\":\"2026-09-22T12:00:07.412Z\",\"apiVersion\":\"v1\",\"data\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"balanceCents\":1850,\"floorCents\":2000}}}}}}},\"responses\":{\"2XX\":{\"description\":\"Acknowledged. Anything else, or no answer within 10 s, is retried.\"}}}}},\"components\":{\"securitySchemes\":{\"apiKey\":{\"type\":\"http\",\"scheme\":\"bearer\",\"bearerFormat\":\"eo_(live|test)_<8-char prefix>_<secret>\",\"description\":\"A source's API key. Its scopes gate routes: `claims:write`, `claims:read`, `webhooks:manage` (`403 SCOPE`).\"},\"ucan\":{\"type\":\"http\",\"scheme\":\"bearer\",\"bearerFormat\":\"UCAN\",\"description\":\"The Decision Console's credential (§3.4): a UCAN invocation from the member's `did:ixo`, audience the oracle's did:web, ONE capability whose `can` is the operation's `x-ucan-action` — any other `can`, `*` included, is `403 FORBIDDEN`. Source routes: `{ with: \\\"ixo:oracle/<oracle did:web>/source/<sourceId>\\\", can: <x-ucan-action> }` with header `X-Source-Id` naming the source, and as proof the member's grant (none for a root). The roots are the source's organisation's CURRENT controllers, read live on chain (D10) — not `ownerDid`, the creator who pays. The oracle checks the route's `x-capability` against the proof chain — rooted at a root, or at a co-owner holding `source/*` from one, at most 2 links; `source/*` covers every capability; `nb.protocols` narrows `claims/read` and `claims/review` to those protocols. A grant that lacks the capability, has expired, or is revoked (its CID on the source's revocation list) is `403 FORBIDDEN`. Account-level operations (`x-capability: account` — sign-up, my sources, accept an invite) take `{ with: \\\"ixo:oracle/<oracle did:web>\\\", can: <x-ucan-action> }`, self-signed, no `X-Source-Id`. Operator routes (`x-capability: operator`) need the invoker in `ORACLE_ADMIN_DIDS`.\"}},\"parameters\":{\"IdempotencyKey\":{\"name\":\"Idempotency-Key\",\"in\":\"header\",\"required\":false,\"description\":\"Same key + same request ⇒ the same answer for 24 h and never a second charge; same key + a different request (method, path, query or body) ⇒ `409 IDEMPOTENCY_MISMATCH`; the same key while its first request is still running ⇒ `409 CONFLICT` with `Retry-After: 1`. On a submit the claimId derives from it (`apc_` + 40 hex of sha256(sourceId|key)). An answer that carries a secret (a new API key, a webhook secret) is never stored by the idempotency store.\",\"schema\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":255},\"example\":\"order-88213\"},\"Prefer\":{\"name\":\"Prefer\",\"in\":\"header\",\"required\":false,\"description\":\"`wait=N` (N ≤ 90): hold the request until the decision lands or N seconds pass. Honoured ⇒ `Preference-Applied`; otherwise `202` + `Location` + `Retry-After`. At most 20 waiters per source; beyond that an immediate 202.\",\"schema\":{\"type\":\"string\"},\"example\":\"wait=60\"},\"PaymentSignature\":{\"name\":\"PAYMENT-SIGNATURE\",\"in\":\"header\",\"required\":false,\"description\":\"base64 of UTF-8 JSON, the x402 v2 PaymentPayload: `IxoPayPaymentPayload` (PAY: the 402's ixo-pay terms echoed as `accepted`, and the developer's payment delegation with the 402's nonce) or, since 1.4, `CardPaymentPayload` (card: the 402's card terms echoed, and the authorized PaymentIntent and Customer). Sent on the retry of a 402; the SDK attaches it.\",\"schema\":{\"type\":\"string\",\"contentEncoding\":\"base64\"},\"example\":\"eyJ4NDAyVmVyc2lvbiI6MiwicmVzb3VyY2UiOnsidXJsIjoiaHR0cHM6Ly9vcmFjbGUuZXhhbXBsZS5vcmcvdjEvYXBpL2NsYWltcyNhcGNfOWYyYzRlMWE3YjNkNWY4ZTBjNmEyYjRkOWUxZjNhNWM3YjhkMGUyZiJ9LCJhY2NlcHRlZCI6eyJzY2hlbWUiOiJpeG8tcGF5IiwibmV0d29yayI6ImNvc21vczppeG8tNSIsImFzc2V0IjoidXBheSIsImFtb3VudCI6IjEyMDAwMDAiLCJwYXlUbyI6Iml4bzFyN3M5dTN3NXk3YTljM2U1ZzdqOWwzbjVxN3M5dTN3NXk3YTljMyIsIm1heFRpbWVvdXRTZWNvbmRzIjoxMjAsImV4dHJhIjp7Im5vbmNlIjoiN2MxZTJhNGItOWQzZi00ZThhLWI2YzUtMmYxZDBlOWE4YjdjIiwiZnVuZGluZ1VybCI6Imh0dHBzOi8vY29uc29sZS5peG8uZWFydGgvY3JlZGl0cyJ9fSwicGF5bG9hZCI6eyJkZWxlZ2F0aW9uIjoiZXlKcGMzTWlPaUprYVdRNmFYaHZPbWw0YnpFemNtRnhObUYyYkhNelpEVXdjM3A1WTNSNE5XWmpOWE56ZERocmJEWnVlRGx3TUdNMk1pSXNJbUYxWkNJNkltUnBaRHAzWldJNlptRmphV3hwZEdGMGIzSXVaR1YyYm1WMExtbDRieTVsWVhKMGFDSXNJbUYwZENJNlczc2lkMmwwYUNJNkltSnBiR3hwYm1jNlpHVmphWE5wYjI0dFlYQnBJaXdpWTJGdUlqb2lZbWxzYkdsdVp5OXdZWGtpTENKdVlpSTZleUp0WVhoQmJXOTFiblFpT2lJMU1EQXdNREF3TUNJc0ltUmxibTl0SWpvaWRYQmhlU0o5ZlYwc0ltVjRjQ0k2TVRjNU1EQXdNREF3TUgwPSIsIm5vbmNlIjoiN2MxZTJhNGItOWQzZi00ZThhLWI2YzUtMmYxZDBlOWE4YjdjIn19\"},\"SourceHeader\":{\"name\":\"X-Source-Id\",\"in\":\"header\",\"required\":false,\"description\":\"Required with the `ucan` scheme on source routes: the source the invocation's resource names (`ixo:oracle/<oracle did:web>/source/<sourceId>`). Ignored with an API key, whose source is its own.\",\"schema\":{\"type\":\"string\",\"pattern\":\"^src_[0-9A-HJKMNP-TV-Z]{26}$\"},\"example\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\"},\"ClaimIdPath\":{\"name\":\"claimId\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"pattern\":\"^apc_([0-9a-f]{40}|[0-9A-HJKMNP-TV-Z]{26})$\"},\"example\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\"},\"AnyClaimIdPath\":{\"name\":\"claimId\",\"in\":\"path\",\"required\":true,\"description\":\"An API claim's `apc_…` id, or a chain claim's own id (URL-encoded).\",\"schema\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":512},\"example\":\"bafyreigq4zsipbk5w3uqkbmh2w2633c4tcwudryvoqkfrq6hilstjr5ymq\"},\"EndpointIdPath\":{\"name\":\"endpointId\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"pattern\":\"^whe_[0-9A-HJKMNP-TV-Z]{26}$\"},\"example\":\"whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\"},\"DeliveryIdPath\":{\"name\":\"deliveryId\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\"},\"example\":\"wh:evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4:whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\"},\"MemberIdPath\":{\"name\":\"memberId\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"pattern\":\"^mem_[0-9A-HJKMNP-TV-Z]{26}$\"},\"example\":\"mem_01J8Z9D4E5F6G7H8J9K0M1N2P3\"},\"KeyPrefixPath\":{\"name\":\"prefix\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"pattern\":\"^[0-9a-z]{8}$\"},\"example\":\"7f3a9c1d\"},\"SourceIdPath\":{\"name\":\"sourceId\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"pattern\":\"^src_[0-9A-HJKMNP-TV-Z]{26}$\"},\"example\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\"},\"ProtocolDidPath\":{\"name\":\"did\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"},\"example\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},\"UploadIdPath\":{\"name\":\"uploadId\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"pattern\":\"^upl_[0-9A-HJKMNP-TV-Z]{26}$\"},\"example\":\"upl_01J8Z6B2C3D4E5F6G7H8J9K0M1\"},\"CollectionIdPath\":{\"name\":\"collectionId\",\"in\":\"path\",\"required\":true,\"schema\":{\"type\":\"string\",\"pattern\":\"^[0-9]{1,20}$\"},\"example\":\"1104\"},\"Limit\":{\"name\":\"limit\",\"in\":\"query\",\"required\":false,\"schema\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":500,\"default\":100},\"example\":100},\"Cursor\":{\"name\":\"cursor\",\"in\":\"query\",\"required\":false,\"description\":\"Opaque; the previous page's `nextCursor`.\",\"schema\":{\"type\":\"string\",\"maxLength\":1024},\"example\":\"WyIyMDI2LTA5LTIyVDEyOjAwOjAwLjAwMFoiLCJhcGNfMDFKOFo2UTRYN04yTTVLOFAzUjlUNlYxVzQiXQ==\"},\"WaitQuery\":{\"name\":\"wait\",\"in\":\"query\",\"required\":false,\"description\":\"Long-poll up to N seconds (≤ 90) for the decision to land.\",\"schema\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":90},\"example\":30},\"OracleSignature\":{\"name\":\"Oracle-Signature\",\"in\":\"header\",\"required\":true,\"description\":\"HMAC-SHA256 with the endpoint's secret over `\\\"<t>.<raw body>\\\"`: `t=<unix seconds>,v1=<hex>` (one `v1=` per live secret during a rotation).\",\"schema\":{\"type\":\"string\",\"pattern\":\"^t=(\\\\d+)(,v1=[0-9a-f]{64})+$\"},\"example\":\"t=1790000000,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd\"},\"OracleEventId\":{\"name\":\"Oracle-Event-Id\",\"in\":\"header\",\"required\":true,\"description\":\"Equals the envelope's `id`; de-duplicate on it.\",\"schema\":{\"type\":\"string\"},\"example\":\"evt_01J8Z8E5F6G7H8J9K0M1N2P3Q4\"}},\"headers\":{\"X-Request-Id\":{\"description\":\"The request's id — on every response and in every error body; support asks for it.\",\"schema\":{\"type\":\"string\"},\"example\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\"},\"RateLimit-Limit\":{\"description\":\"Requests allowed in the current window (per key and per source; the tighter one).\",\"schema\":{\"type\":\"integer\"},\"example\":600},\"RateLimit-Remaining\":{\"description\":\"Requests left in the current window.\",\"schema\":{\"type\":\"integer\"},\"example\":598},\"RateLimit-Reset\":{\"description\":\"Seconds until the window resets.\",\"schema\":{\"type\":\"integer\"},\"example\":42},\"Retry-After\":{\"description\":\"Seconds to wait before retrying (429, 503, a 409 whose Idempotency-Key is still in flight, and a 202 that did not wait out the decision).\",\"schema\":{\"type\":\"integer\"},\"example\":5},\"Location\":{\"description\":\"Where to poll for the claim's record.\",\"schema\":{\"type\":\"string\",\"format\":\"uri\"},\"example\":\"https://oracle.example.org/v1/api/claims/apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\"},\"Preference-Applied\":{\"description\":\"`wait` when the request's `Prefer: wait=N` was honoured and the decision landed in time.\",\"schema\":{\"type\":\"string\"},\"example\":\"wait=60\"},\"PAYMENT-REQUIRED\":{\"description\":\"base64 of UTF-8 JSON, an x402 v2 PaymentRequired (`X402PaymentRequired`): the `ixo-pay` offer of §11.2, AUTHORITATIVE for x402 clients (the body repeats it in `error.details.paymentRequired`). Only on `402 PAYMENT_REQUIRED` — a `SPEND_CAP` or `INSUFFICIENT_CREDITS` has nothing to pay.\",\"required\":false,\"schema\":{\"type\":\"string\",\"contentEncoding\":\"base64\"},\"example\":\"eyJ4NDAyVmVyc2lvbiI6MiwiZXJyb3IiOiJQQVlNRU5ULVNJR05BVFVSRSBoZWFkZXIgaXMgcmVxdWlyZWQiLCJyZXNvdXJjZSI6eyJ1cmwiOiJodHRwczovL29yYWNsZS5leGFtcGxlLm9yZy92MS9hcGkvY2xhaW1zI2FwY185ZjJjNGUxYTdiM2Q1ZjhlMGM2YTJiNGQ5ZTFmM2E1YzdiOGQwZTJmIiwiZGVzY3JpcHRpb24iOiJPbmUgZGVjaXNpb24gdW5kZXIgcHJvdG9jb2wgZGlkOml4bzplbnRpdHk6NWU4ZjNjMWE5YjdkMmU0ZjZhOGMwYjFkM2U1ZjdhOWMiLCJtaW1lVHlwZSI6ImFwcGxpY2F0aW9uL2pzb24ifSwiYWNjZXB0cyI6W3sic2NoZW1lIjoiaXhvLXBheSIsIm5ldHdvcmsiOiJjb3Ntb3M6aXhvLTUiLCJhc3NldCI6InVwYXkiLCJhbW91bnQiOiIxMjAwMDAwIiwicGF5VG8iOiJpeG8xcjdzOXUzdzV5N2E5YzNlNWc3ajlsM241cTdzOXUzdzV5N2E5YzMiLCJtYXhUaW1lb3V0U2Vjb25kcyI6MTIwLCJleHRyYSI6eyJub25jZSI6IjdjMWUyYTRiLTlkM2YtNGU4YS1iNmM1LTJmMWQwZTlhOGI3YyIsImZ1bmRpbmdVcmwiOiJodHRwczovL2NvbnNvbGUuaXhvLmVhcnRoL2NyZWRpdHMifX1dfQ==\"},\"PAYMENT-RESPONSE\":{\"description\":\"base64 of UTF-8 JSON, the facilitator's x402 `/settle` answer for the claim's receipt, forwarded verbatim (`X402PaymentResponse`) — `success` with the real `transaction` once the transfer paid it, else `settlement_pending` with an empty `transaction`; the `settlementId` is in `extensions[\\\"org.udid.receipt@1\\\"]`. Only on a paid `200` that carries a decision.\",\"required\":false,\"schema\":{\"type\":\"string\",\"contentEncoding\":\"base64\"},\"example\":\"eyJzdWNjZXNzIjpmYWxzZSwiZXJyb3JSZWFzb24iOiJzZXR0bGVtZW50X3BlbmRpbmciLCJ0cmFuc2FjdGlvbiI6IiIsIm5ldHdvcmsiOiJjb3Ntb3M6aXhvLTUiLCJwYXllciI6ImRpZDppeG86aXhvMXE5eDN2OGsybTVuN3A0cjZ0OHcweTJ6NGE2YzhlMGcyajRsNm44IiwiZXh0ZW5zaW9ucyI6eyJvcmcudWRpZC5yZWNlaXB0QDEiOnsic2V0dGxlbWVudElkIjoiMGUzNmYyZjcxMjIwMmI5YWEyYzU0ZWIyZDQyN2JiMTQzYTA2M2YzMTA2YTFlMGRhZWFkYmZmZThhZDhhZTg3MSIsIm9mZmVySWQiOiI3YzFlMmE0Yi05ZDNmLTRlOGEtYjZjNS0yZjFkMGU5YThiN2MiLCJyZXBsYXllZCI6ZmFsc2UsImNsYWltcyI6W3siY2xhaW1JZCI6ImFwY185ZjJjNGUxYTdiM2Q1ZjhlMGM2YTJiNGQ5ZTFmM2E1YzdiOGQwZTJmIiwic3RhdGUiOiJzZXR0bGVkIn1dfX19\"},\"Deprecation\":{\"description\":\"Set on a route scheduled for removal (RFC 9745): the date it was deprecated.\",\"schema\":{\"type\":\"string\"},\"example\":\"@1798761600\"},\"Sunset\":{\"description\":\"Set with `Deprecation`: when the route stops answering (RFC 8594), at least 12 months later.\",\"schema\":{\"type\":\"string\"},\"example\":\"Sat, 01 Jan 2028 00:00:00 GMT\"}},\"responses\":{\"Validation\":{\"description\":\"`VALIDATION` — the body, query or path failed the schema; `details` lists the paths.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"VALIDATION\":{\"value\":{\"error\":{\"code\":\"VALIDATION\",\"message\":\"Some fields in the request are missing or invalid — details.issues lists each one.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"issues\":[{\"path\":\"attachments.0.url\",\"message\":\"must be an https URL\"}]},\"docsUrl\":\"https://console.ixo.earth/docs/errors#VALIDATION\"}}}}}}},\"SubmitRejected\":{\"description\":\"`VALIDATION` (schema, the protocol's answers JSON Schema, https-only URLs, metadata ≤ 4 KB) or `PROTOCOL_NOT_ALLOWED`.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"VALIDATION\":{\"value\":{\"error\":{\"code\":\"VALIDATION\",\"message\":\"Some fields in the request are missing or invalid — details.issues lists each one.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"issues\":[{\"path\":\"answers.packageCount\",\"message\":\"expected integer, received string\"}]},\"docsUrl\":\"https://console.ixo.earth/docs/errors#VALIDATION\"}}},\"PROTOCOL_NOT_ALLOWED\":{\"value\":{\"error\":{\"code\":\"PROTOCOL_NOT_ALLOWED\",\"message\":\"Protocol did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b is not enabled for this source. Use one of its protocols, or ask this oracle's operator to enable it.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#PROTOCOL_NOT_ALLOWED\"}}}}}}},\"ReviewRejected\":{\"description\":\"`VALIDATION` (answers must cover exactly the pending tasks), one of the attestation codes the engine also answers, or `REVIEWER_GRANT_INVALID` — the `reviewerGrant` is missing or malformed (`details.reason`, the engine's vocabulary).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"VALIDATION\":{\"value\":{\"error\":{\"code\":\"VALIDATION\",\"message\":\"Answer every open review task, and only those — details lists the missing and the extra ones.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"missing\":[\"confirm_recipient\"],\"extra\":[]},\"docsUrl\":\"https://console.ixo.earth/docs/errors#VALIDATION\"}}},\"ATTESTATION_REQUIRED\":{\"value\":{\"error\":{\"code\":\"ATTESTATION_REQUIRED\",\"message\":\"Review answers must be signed by the reviewer. Answer from the Decision Console, which signs them for you.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#ATTESTATION_REQUIRED\"}}},\"REVIEWER_GRANT_INVALID\":{\"value\":{\"error\":{\"code\":\"REVIEWER_GRANT_INVALID\",\"message\":\"An organisation controller's review must carry reviewerGrant: a claims/review grant from your account to itself on this source, signed with the key that signed the answers. Answer from the Decision Console, which signs it for you.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"absent\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#REVIEWER_GRANT_INVALID\"}}},\"ATTESTATION_INVALID\":{\"value\":{\"error\":{\"code\":\"ATTESTATION_INVALID\",\"message\":\"The review answers' signature could not be read. Answer again from the Decision Console.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"failures\":[\"signature\"]},\"docsUrl\":\"https://console.ixo.earth/docs/errors#ATTESTATION_INVALID\"}}},\"ATTESTATION_KEY_UNKNOWN\":{\"value\":{\"error\":{\"code\":\"ATTESTATION_KEY_UNKNOWN\",\"message\":\"These answers are not signed with the reviewer key of a member allowed to review this claim. Register your reviewer key in the console (your member settings), or ask the source's owner for a role that can review.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"failures\":[\"kid\"]},\"docsUrl\":\"https://console.ixo.earth/docs/errors#ATTESTATION_KEY_UNKNOWN\"}}},\"ATTESTATION_MISMATCH\":{\"value\":{\"error\":{\"code\":\"ATTESTATION_MISMATCH\",\"message\":\"The review answers' signature was rejected (details.failures says why). Answer again from the Decision Console.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"failures\":[\"answers\"]},\"docsUrl\":\"https://console.ixo.earth/docs/errors#ATTESTATION_MISMATCH\"}}}}}}},\"Unauthorized\":{\"description\":\"`UNAUTHORIZED` — missing, unknown or revoked credential.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"UNAUTHORIZED\":{\"value\":{\"error\":{\"code\":\"UNAUTHORIZED\",\"message\":\"This API key isn't valid: it may have been revoked, mistyped or cut short. Check the key, or create a new one in the console (Keys).\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#UNAUTHORIZED\"}}}}}}},\"FileUnauthorized\":{\"description\":\"`UNAUTHORIZED` — the signed URL is expired or its signature does not match.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"UNAUTHORIZED\":{\"value\":{\"error\":{\"code\":\"UNAUTHORIZED\",\"message\":\"This file link has expired or is not valid. Get a fresh link by reading the claim or upload again.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#UNAUTHORIZED\"}}}}}}},\"Forbidden\":{\"description\":\"`SCOPE` — the API key lacks the route's scope; `FORBIDDEN` — the console member's grant lacks the route's capability (or its protocol), or has expired or been revoked.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"SCOPE\":{\"value\":{\"error\":{\"code\":\"SCOPE\",\"message\":\"This API key doesn't have the claims:write permission. Create a key with it in the console (Keys) or ask the source's owner.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"required\":\"claims:write\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#SCOPE\"}}},\"FORBIDDEN\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"Your role on this source doesn't allow this (it needs the claims/review permission). Ask the source's owner for a role that includes it.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"required\":\"claims/review\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}},\"FORBIDDEN_revoked\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"Your access to this source has been revoked — ask its owner to invite you again.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"revoked\",\"delegationCid\":\"bafyreib4sxiqwtqdv3s6cj5e2p7yxkmuhj4qzfr2nd6w7lcvgteoa3zyme\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}},\"FORBIDDEN_not_member\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"You were invited to this source but haven't accepted the invitation yet. Open the invitation link to accept it, then try again.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}}}}}},\"SubmitForbidden\":{\"description\":\"`SCOPE` / `FORBIDDEN`, or `PAYER_NOT_MEMBER` — the payment delegation's payer is neither the source's owner nor one of its members (payments spec §4.3); nothing was charged.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"SCOPE\":{\"value\":{\"error\":{\"code\":\"SCOPE\",\"message\":\"This API key doesn't have the claims:write permission. Create a key with it in the console (Keys) or ask the source's owner.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"required\":\"claims:write\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#SCOPE\"}}},\"FORBIDDEN\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"Your role on this source doesn't allow this (it needs the claims/submit permission). Ask the source's owner for a role that includes it.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"required\":\"claims/submit\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}},\"PAYER_NOT_MEMBER\":{\"value\":{\"error\":{\"code\":\"PAYER_NOT_MEMBER\",\"message\":\"The account paying for this claim is not the source's owner or one of its members. Pay from an account that belongs to this source.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"payer\":\"did:ixo:ixo13raq6avls3d50szyctx5fc5sst8kl6nx9p0c62\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#PAYER_NOT_MEMBER\"}}}}}}},\"ReviewForbidden\":{\"description\":\"`SCOPE` / `FORBIDDEN`, `ATTESTATION_ISSUER_MISMATCH` — the attestation's issuer is not a registered reviewer key of this source, or `REVIEWER_NOT_AUTHORIZED` — the grant names an identity that may not review (this oracle's own), a member's first link is not its current access (`revoked`), or its issuer is no longer a controller (`root-not-controller`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"SCOPE\":{\"value\":{\"error\":{\"code\":\"SCOPE\",\"message\":\"This API key doesn't have the claims:write permission. Create a key with it in the console (Keys) or ask the source's owner.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"required\":\"claims:write\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#SCOPE\"}}},\"FORBIDDEN\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"Your role on this source doesn't cover protocol did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b. Ask the source's owner for access to it.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"required\":\"claims/review\",\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}},\"ATTESTATION_ISSUER_MISMATCH\":{\"value\":{\"error\":{\"code\":\"ATTESTATION_ISSUER_MISMATCH\",\"message\":\"The review answers' signature was rejected (details.failures says why). Answer again from the Decision Console.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"failures\":[\"issuer\"]},\"docsUrl\":\"https://console.ixo.earth/docs/errors#ATTESTATION_ISSUER_MISMATCH\"}}},\"REVIEWER_NOT_AUTHORIZED\":{\"value\":{\"error\":{\"code\":\"REVIEWER_NOT_AUTHORIZED\",\"message\":\"This reviewer grant does not authorize a review: this oracle may not review the claims it evaluates.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"oracle\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#REVIEWER_NOT_AUTHORIZED\"}}}}}}},\"OperatorForbidden\":{\"description\":\"`FORBIDDEN` — the invoker is not in `ORACLE_ADMIN_DIDS`.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"FORBIDDEN\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"Only this oracle's operators can do this, and your account is not one of them.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}}}}}},\"PaymentRequired\":{\"description\":\"`PAYMENT_REQUIRED` — no valid `PAYMENT-SIGNATURE`: pay the offer in `PAYMENT-REQUIRED` (repeated in `error.details.paymentRequired`) and retry; the SDK does. `SPEND_CAP` (the key's daily cap or the delegation's cap) and `INSUFFICIENT_CREDITS` (top up at `fundingUrl`) carry NO offer: nothing to auto-pay, so an SDK branches on `error.code` and surfaces them. The offer's `payTo` is the real recipient, the operator's earnings address (`ixo1…`, `EARNINGS_ADDRESS`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"PAYMENT-REQUIRED\":{\"$ref\":\"#/components/headers/PAYMENT-REQUIRED\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/PaymentRequiredBody\"},\"examples\":{\"PAYMENT_REQUIRED\":{\"value\":{\"error\":{\"code\":\"PAYMENT_REQUIRED\",\"message\":\"This decision has to be paid for first: pay the offer in the PAYMENT-REQUIRED header, then resend the same request with the payment in a PAYMENT-SIGNATURE header.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"paymentRequired\":{\"x402Version\":2,\"error\":\"PAYMENT-SIGNATURE header is required\",\"resource\":{\"url\":\"https://oracle.example.org/v1/api/claims#apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"description\":\"One decision under protocol did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"mimeType\":\"application/json\"},\"accepts\":[{\"scheme\":\"ixo-pay\",\"network\":\"cosmos:ixo-5\",\"asset\":\"upay\",\"amount\":\"1200000\",\"payTo\":\"ixo1r7s9u3w5y7a9c3e5g7j9l3n5q7s9u3w5y7a9c3\",\"maxTimeoutSeconds\":120,\"extra\":{\"nonce\":\"7c1e2a4b-9d3f-4e8a-b6c5-2f1d0e9a8b7c\",\"fundingUrl\":\"https://console.ixo.earth/credits\"}}]},\"price\":{\"amountMicroUsd\":1200000,\"amountCents\":120,\"currency\":\"USD\",\"amount\":\"1200000\",\"asset\":\"upay\"},\"fundingUrl\":\"https://console.ixo.earth/credits\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#PAYMENT_REQUIRED\"}}},\"SPEND_CAP\":{\"value\":{\"error\":{\"code\":\"SPEND_CAP\",\"message\":\"This source has reached its spending cap for today. Wait until tomorrow, or have its owner raise the cap in the console.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"price\":{\"amountMicroUsd\":1200000,\"amountCents\":120,\"currency\":\"USD\",\"amount\":\"1200000\",\"asset\":\"upay\"},\"fundingUrl\":\"https://console.ixo.earth/credits\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#SPEND_CAP\"}}},\"INSUFFICIENT_CREDITS\":{\"value\":{\"error\":{\"code\":\"INSUFFICIENT_CREDITS\",\"message\":\"There aren't enough PAY credits to pay for this decision. Top up in the console (details.fundingUrl) and retry.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"price\":{\"amountMicroUsd\":1200000,\"amountCents\":120,\"currency\":\"USD\",\"amount\":\"1200000\",\"asset\":\"upay\"},\"fundingUrl\":\"https://console.ixo.earth/credits\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#INSUFFICIENT_CREDITS\"}}}}}}},\"NotFound\":{\"description\":\"`NOT_FOUND` — unknown, or another source's (never 403 across sources).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"NOT_FOUND\":{\"value\":{\"error\":{\"code\":\"NOT_FOUND\",\"message\":\"Claim apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f was not found for this source.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#NOT_FOUND\"}}},\"NOT_FOUND_source\":{\"value\":{\"error\":{\"code\":\"NOT_FOUND\",\"message\":\"Source src_01J8Z5A1B2C3D4E5F6G7H8J9K0 was not found, or you are not a member of it. Check that you are signed in with the right account.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#NOT_FOUND\"}}}}}}},\"IdempotencyMismatch\":{\"description\":\"`IDEMPOTENCY_MISMATCH` — this `Idempotency-Key` was used with a different body.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"IDEMPOTENCY_MISMATCH\":{\"value\":{\"error\":{\"code\":\"IDEMPOTENCY_MISMATCH\",\"message\":\"This Idempotency-Key was already used for a different request. Use a new key for a new request, or resend the original request unchanged.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#IDEMPOTENCY_MISMATCH\"}}}}}}},\"SubmitConflict\":{\"description\":\"`IDEMPOTENCY_MISMATCH` — this `Idempotency-Key` was used with a different body. (A refused payment is not a 409: it answers a fresh payable `402`, or — once the claim already has a charge — `402 PAYMENT_REQUIRED` with `details.reason`.)\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"IDEMPOTENCY_MISMATCH\":{\"value\":{\"error\":{\"code\":\"IDEMPOTENCY_MISMATCH\",\"message\":\"This Idempotency-Key was already used for a different request. Use a new key for a new request, or resend the original request unchanged.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#IDEMPOTENCY_MISMATCH\"}}}}}}},\"NotPendingReview\":{\"description\":\"`NOT_PENDING_REVIEW` — the claim is not awaiting answers (never was, already folded, its body was erased, or `answeredAgainst` is stale).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"NOT_PENDING_REVIEW\":{\"value\":{\"error\":{\"code\":\"NOT_PENDING_REVIEW\",\"message\":\"This claim isn't waiting for review answers; it may already be decided. Reload it to see its current status.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#NOT_PENDING_REVIEW\"}}}}}}},\"PayloadTooLarge\":{\"description\":\"`PAYLOAD_TOO_LARGE` — over 1 MiB of JSON, or over 25 MB of upload.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"PAYLOAD_TOO_LARGE\":{\"value\":{\"error\":{\"code\":\"PAYLOAD_TOO_LARGE\",\"message\":\"The request body is larger than 1 MB. Send a smaller body; large files go through uploads.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"limit\":1048576},\"docsUrl\":\"https://console.ixo.earth/docs/errors#PAYLOAD_TOO_LARGE\"}}}}}}},\"RateLimited\":{\"description\":\"`RATE_LIMITED` — per key or per source; wait `Retry-After`.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"},\"RateLimit-Limit\":{\"$ref\":\"#/components/headers/RateLimit-Limit\"},\"RateLimit-Remaining\":{\"$ref\":\"#/components/headers/RateLimit-Remaining\"},\"RateLimit-Reset\":{\"$ref\":\"#/components/headers/RateLimit-Reset\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"RATE_LIMITED\":{\"value\":{\"error\":{\"code\":\"RATE_LIMITED\",\"message\":\"Rate limit reached for this API key or its source (600 requests a minute). Wait and retry; the Retry-After header says how many seconds.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#RATE_LIMITED\"}}}}}}},\"Internal\":{\"description\":\"`INTERNAL` — our fault; details hidden. Quote the requestId.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"INTERNAL\":{\"value\":{\"error\":{\"code\":\"INTERNAL\",\"message\":\"Something went wrong on our side. It has been logged; retry in a moment, and quote the requestId if it keeps happening.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#INTERNAL\"}}}}}}},\"UploadsDisabled\":{\"description\":\"`UPLOADS_DISABLED` — this oracle has no `API_UPLOADS` bucket: no uploads (send attachment URLs instead) and no data export.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"UPLOADS_DISABLED\":{\"value\":{\"error\":{\"code\":\"UPLOADS_DISABLED\",\"message\":\"This oracle doesn't accept file uploads. Attach files by URL instead.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#UPLOADS_DISABLED\"}}}}}}},\"Unavailable\":{\"description\":\"`UNAVAILABLE` — a dependency is down; retry after `Retry-After`.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"UNAVAILABLE\":{\"value\":{\"error\":{\"code\":\"UNAVAILABLE\",\"message\":\"This service is temporarily unavailable. Nothing was lost — retry in a moment.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#UNAVAILABLE\"}}},\"UNAVAILABLE_did\":{\"value\":{\"error\":{\"code\":\"UNAVAILABLE\",\"message\":\"This service is temporarily unavailable. Nothing was lost — retry in a moment.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#UNAVAILABLE\"}}}}}}},\"SubmitUnavailable\":{\"description\":\"`SOURCE_PAUSED` (`details.reason`: `rubric-unusable` · `engine-credits` · `payments-disabled` · `operator`) or `UNAVAILABLE`. Nothing was accepted or charged.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"SOURCE_PAUSED\":{\"value\":{\"error\":{\"code\":\"SOURCE_PAUSED\",\"message\":\"Payments are unavailable on this oracle right now, so it can't take paid claims. Retry in a few minutes (the Retry-After header says when); if it keeps happening, contact the oracle's operator.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"payments-disabled\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#SOURCE_PAUSED\"}}},\"UNAVAILABLE\":{\"value\":{\"error\":{\"code\":\"UNAVAILABLE\",\"message\":\"This service is temporarily unavailable. Nothing was lost — retry in a moment.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#UNAVAILABLE\"}}}}}}},\"ReviewUnavailable\":{\"description\":\"`ATTESTATION_UNRESOLVABLE` (the reviewer's DID could not be resolved — retry) or `UNAVAILABLE`.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"ATTESTATION_UNRESOLVABLE\":{\"value\":{\"error\":{\"code\":\"ATTESTATION_UNRESOLVABLE\",\"message\":\"The reviewer's identity couldn't be checked right now. Nothing was recorded — retry in a moment.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"failures\":[\"resolve\"]},\"docsUrl\":\"https://console.ixo.earth/docs/errors#ATTESTATION_UNRESOLVABLE\"}}},\"UNAVAILABLE\":{\"value\":{\"error\":{\"code\":\"UNAVAILABLE\",\"message\":\"This service is temporarily unavailable. Nothing was lost — retry in a moment.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#UNAVAILABLE\"}}}}}}},\"IdempotencyConflict\":{\"description\":\"`IDEMPOTENCY_MISMATCH` — this `Idempotency-Key` was used with a different request; `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"SourceNotLinked\":{\"description\":\"`SOURCE_PENDING_LINK` / `SOURCE_DISPUTED` (v1.8) — the source is not linked to its organisation yet, or its link is disputed: it takes no claims, keys, uploads, invites or webhooks. Or, from the `Idempotency-Key`, `IDEMPOTENCY_MISMATCH` or `CONFLICT` (in flight, `Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"SOURCE_PENDING_LINK\":{\"$ref\":\"#/components/examples/SourcePendingLinkError\"},\"SOURCE_DISPUTED\":{\"$ref\":\"#/components/examples/SourceDisputedError\"},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"RotationConflict\":{\"description\":\"`CONFLICT` (`reason: rotation_in_progress`) — the last rotation's previous secret is still in its 24 h overlap; rotate again once it expires. Or, from the `Idempotency-Key`, `IDEMPOTENCY_MISMATCH` — the key was used with a different request — or `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"ROTATION_IN_PROGRESS\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"The previous webhook secret still works for 24 hours after a rotation; rotate again once that overlap ends.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"rotation_in_progress\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"RedeliverConflict\":{\"description\":\"`CONFLICT` (v1.18) — the delivery has nowhere to go any more: its endpoint was deleted (`details.reason: endpoint-deleted`) or turned off (`endpoint-disabled` — turn it on first), or it went to the source's default URL, which is no longer set (`no-webhook-url`); nothing is reset or posted. Or, from the `Idempotency-Key`, `IDEMPOTENCY_MISMATCH` — the key was used with a different request — or `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"ENDPOINT_DELETED\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"That webhook endpoint was deleted, so this delivery can't be sent again; a new endpoint receives new events.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"endpoint-deleted\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"TestEventConflict\":{\"description\":\"`CONFLICT` — the endpoint is disabled (enable it first); or, from the `Idempotency-Key`, `IDEMPOTENCY_MISMATCH` — the key was used with a different request — or `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"ENDPOINT_DISABLED\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"This webhook endpoint is turned off. Turn it on first, then send the test event.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"LinkForbidden\":{\"description\":\"`FORBIDDEN` (`reason: not_owner`) — on chain, the signed-in member is not the collection entity's owner. Or `SCOPE` — an API key (linking is console only) — or `FORBIDDEN` — the grant lacks `settings/manage`.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"NOT_OWNER\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"Only the owner of collection 1104 on chain can link it. Sign in with the account that owns it.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"not_owner\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}},\"SCOPE\":{\"value\":{\"error\":{\"code\":\"SCOPE\",\"message\":\"This can only be done from the Decision Console, not with an API key. Sign in to the console to do it.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#SCOPE\"}}},\"FORBIDDEN\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"Your role on this source doesn't allow this (it needs the settings/manage permission). Ask the source's owner for a role that includes it.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"required\":\"settings/manage\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}}}}}},\"LinkConflict\":{\"description\":\"`CONFLICT` (`reason: already_linked`) — the collection is already linked to this source. Or, from the `Idempotency-Key`, `IDEMPOTENCY_MISMATCH` — the key was used with a different request — or `CONFLICT` — a request with this key is still in flight (`Retry-After: 1`).\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"},\"Retry-After\":{\"$ref\":\"#/components/headers/Retry-After\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"ALREADY_LINKED\":{\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"This collection is already linked to this source; there is nothing to do.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"details\":{\"reason\":\"already_linked\"},\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}},\"IDEMPOTENCY_MISMATCH\":{\"$ref\":\"#/components/examples/IdempotencyMismatchError\"},\"CONFLICT_in_flight\":{\"$ref\":\"#/components/examples/IdempotencyInFlightError\"}}}}},\"AccountForbidden\":{\"description\":\"`FORBIDDEN` — the invocation carries a proof (an account invokes as itself), is not over this oracle's account resource, or its invoker is not a `did:ixo` account.\",\"headers\":{\"X-Request-Id\":{\"$ref\":\"#/components/headers/X-Request-Id\"}},\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/components/schemas/ApiErrorEnvelope\"},\"examples\":{\"FORBIDDEN\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"Account requests are signed by your own account alone, without a source's access attached. Reload the console and try again.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}},\"FORBIDDEN_resource\":{\"value\":{\"error\":{\"code\":\"FORBIDDEN\",\"message\":\"This request was signed for ixo:oracle/did:web:oracle.example.org/source/src_01J8Z5A1B2C3D4E5F6G7H8J9K0, but account requests must be signed for ixo:oracle/did:web:oracle.example.org. Reload the console and try again.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#FORBIDDEN\"}}}}}}}},\"examples\":{\"ReviewBilling\":{\"summary\":\"An active review-billing delegation\",\"value\":{\"sourceId\":\"src_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"state\":\"active\",\"payer\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"delegationCid\":\"bafyreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy\",\"maxAmount\":\"1000000000000000\",\"spent\":\"3600000\",\"remaining\":\"999999996400000\",\"expiresAt\":\"2027-10-14T00:00:00.000Z\",\"credits\":{\"asset\":\"upay\",\"balance\":\"250000000\",\"sendLimit\":\"200000000\",\"reserved\":\"1200000\",\"settled\":\"0\",\"paying\":\"0\",\"available\":\"248800000\"},\"pricePerReview\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"amount\":\"1200000\",\"amountCents\":120}],\"pausedCollections\":[],\"createdBy\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"createdAt\":\"2026-10-14T10:00:00.000Z\",\"updatedAt\":\"2026-10-14T10:00:00.000Z\"}},\"SubmitFull\":{\"summary\":\"With an attachment, submitter, metadata and a webhook\",\"value\":{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"answers\":{\"deliveryDate\":\"2026-09-21\",\"recipientName\":\"Ama Mensah\",\"packageCount\":3,\"signedByRecipient\":true},\"attachments\":[{\"question\":\"deliveryProof\",\"name\":\"site.jpg\",\"mediaType\":\"image/jpeg\",\"url\":\"https://files.example.org/deliveries/88213/site.jpg\",\"cid\":\"bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy\"},{\"question\":\"signedWaybill\",\"uploadId\":\"upl_01J8Z6B2C3D4E5F6G7H8J9K0M1\",\"cid\":\"bafkreigh2akiscaildcqabsyg3dfr6chu3fgpregiymsck7e7aqa4s52zy\",\"mediaType\":\"application/pdf\"}],\"submitter\":\"user-4471\",\"metadata\":{\"orderId\":\"88213\"},\"webhookUrl\":\"https://example.org/hooks/oracle\"}},\"ClaimDecided\":{\"summary\":\"Approved\",\"value\":{\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"class\":\"supported\",\"evaluationStatus\":1,\"action\":\"auto_approve\",\"totalBps\":8600,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"},{\"code\":\"not_duplicate\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":8600,\"pending\":false,\"capped\":false}],\"pendingTasks\":[],\"reasons\":[{\"code\":\"all_gates_passed\",\"reason\":\"Every gate passed and the score cleared 7000 bps\",\"class\":\"supported\"}]},\"explanation\":\"Approved: proof attached, not a duplicate, delivery quality 86%.\",\"receipt\":{\"cid\":\"bafyreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku\",\"jws\":\"eyJhbGciOiJFZERTQSIsInR5cCI6InZjK2p3dCIsImtpZCI6ImRpZDp3ZWI6ZXZhbC1lbmdpbmUuaXhvLmVhcnRoI2tleS0xIn0.eyJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiRGVjaXNpb25DcmVkZW50aWFsIl19.8Qk3n2Vb1yZ7xT0pL4mR6sW9aE5cH2jK8fN1gD3vB7uX0qY4tI6oP9lM2wS5rA\"},\"chainStatus\":\"skipped\"},\"review\":null,\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":\"0e36f2f712202b9aa2c54eb2d427bb143a063f3106a1e0daeadbffe8ad8ae871\",\"status\":\"settled\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"delivered\",\"attempts\":1},\"error\":null,\"metadata\":{\"orderId\":\"88213\"},\"createdAt\":\"2026-09-22T12:00:00.000Z\",\"decidedAt\":\"2026-09-22T12:00:07.412Z\"}},\"ClaimCardRefunded\":{\"summary\":\"Approved, then its card payment refunded in part\",\"value\":{\"claimId\":\"apc_9f2c4e1a7b3d5f8e0c6a2b4d9e1f3a5c7b8d0e2f\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"decision\":{\"status\":\"decided\",\"verdict\":\"approve\",\"class\":\"supported\",\"evaluationStatus\":1,\"action\":\"auto_approve\",\"totalBps\":8600,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"},{\"code\":\"not_duplicate\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":8600,\"pending\":false,\"capped\":false}],\"pendingTasks\":[],\"reasons\":[{\"code\":\"all_gates_passed\",\"reason\":\"Every gate passed and the score cleared 7000 bps\",\"class\":\"supported\"}]},\"explanation\":\"Approved: proof attached, not a duplicate, delivery quality 86%.\",\"receipt\":{\"cid\":\"bafyreihdwdcefgh4dqkjv67uzcmw7ojee6xedzdetojuzjevtenxquvyku\",\"jws\":\"eyJhbGciOiJFZERTQSIsInR5cCI6InZjK2p3dCIsImtpZCI6ImRpZDp3ZWI6ZXZhbC1lbmdpbmUuaXhvLmVhcnRoI2tleS0xIn0.eyJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiRGVjaXNpb25DcmVkZW50aWFsIl19.8Qk3n2Vb1yZ7xT0pL4mR6sW9aE5cH2jK8fN1gD3vB7uX0qY4tI6oP9lM2wS5rA\"},\"chainStatus\":\"skipped\"},\"review\":null,\"payment\":{\"scheme\":\"stripe-manual-capture\",\"amount\":\"60\",\"asset\":\"usd\",\"settlementId\":\"0e36f2f712202b9aa2c54eb2d427bb143a063f3106a1e0daeadbffe8ad8ae871\",\"status\":\"partially_refunded\",\"transaction\":\"pi_3Q8x2LJb9vKc1mN40aZ7yT5e\",\"refundedAt\":\"2026-09-23T09:15:00.000Z\",\"refundId\":\"re_3Q9a1MJb9vKc1mN41bX8zU6f\",\"refundedAmountCents\":20},\"webhook\":{\"status\":\"delivered\",\"attempts\":1},\"error\":null,\"metadata\":{\"orderId\":\"88213\"},\"createdAt\":\"2026-09-22T12:00:00.000Z\",\"decidedAt\":\"2026-09-22T12:00:07.412Z\"}},\"ClaimPendingReview\":{\"summary\":\"Awaiting a reviewer\",\"value\":{\"claimId\":\"apc_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"processed\",\"decision\":{\"status\":\"pending_review\",\"verdict\":\"review\",\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":\"b41e7c2d9a5f3e8b1c6d4a2f0e9b7c5d3a1f8e6b4c2d0a9f7e5b3c1d8a6f4e2b\",\"resultDigest\":\"e2d8a4c6f0b2d4e6a8c0e2f4a6b8c0d2e4f6a8b0c2d4e6f8a0b2c4d6e8f0a2b4\",\"decision\":{\"status\":\"pending_review\",\"verdict\":\"review\",\"class\":\"requires_human_review\",\"evaluationStatus\":5,\"action\":\"needs_human_review\",\"totalBps\":null,\"gates\":[{\"code\":\"proof_attached\",\"outcome\":\"passed\"}],\"criteria\":[{\"code\":\"delivery_quality\",\"scoreBps\":null,\"pending\":true,\"capped\":false}],\"pendingTasks\":[\"confirm_recipient\"],\"reasons\":[{\"code\":\"photo_unclear\",\"reason\":\"The delivery photo does not show the recipient\",\"class\":\"requires_human_review\"}]},\"explanation\":\"A reviewer must confirm the recipient.\",\"receipt\":null,\"chainStatus\":\"skipped\"},\"review\":{\"pendingTasks\":[{\"id\":\"confirm_recipient\",\"prompt\":\"Does the photo show the named recipient accepting the package?\",\"answer\":{\"type\":\"boolean\"}}],\"answeredAt\":null,\"foldedAt\":null,\"foldError\":null,\"answerBy\":\"2026-10-22T11:57:00.000Z\"},\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":null,\"status\":\"reserved\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"failed\",\"attempts\":2},\"error\":null,\"metadata\":{\"orderId\":\"88214\"},\"createdAt\":\"2026-09-22T11:58:00.000Z\",\"decidedAt\":\"2026-09-22T11:58:09.200Z\"}},\"ClaimFailed\":{\"summary\":\"Failed: invalid_facts\",\"value\":{\"claimId\":\"apc_01J8Z6R8B3C4D5E6F7G8H9J0K1\",\"lane\":\"api\",\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"collectionId\":null,\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\",\"contentDigest\":\"sha256:0876da3071052cd4513fba1b58715349a1764a30c6ae960c5c91df5b350f9725\",\"submittedBy\":null,\"submittedVia\":null,\"status\":\"failed\",\"decision\":{\"status\":\"invalid_facts\",\"verdict\":null,\"rubricId\":\"3f9c2a7e5b1d8f4c6a0e2b9d7f3c1a5e8b6d4f2a0c9e7b5d3f1a8c6e4b2d0f9a\",\"factsDigest\":null,\"resultDigest\":null,\"decision\":null,\"explanation\":null,\"receipt\":null,\"chainStatus\":\"skipped\"},\"review\":null,\"payment\":{\"scheme\":\"ixo-pay\",\"amount\":\"1200000\",\"asset\":\"upay\",\"settlementId\":null,\"status\":\"released\",\"transaction\":null,\"refundedAt\":null,\"refundId\":null,\"refundedAmountCents\":null},\"webhook\":{\"status\":\"delivered\",\"attempts\":1},\"error\":{\"code\":\"invalid_facts\",\"message\":\"The oracle could not produce the facts this protocol needs.\"},\"metadata\":null,\"createdAt\":\"2026-09-22T11:50:00.000Z\",\"decidedAt\":null}},\"Endpoint\":{\"value\":{\"endpointId\":\"whe_01J8Z7C3D4E5F6G7H8J9K0M1N2\",\"url\":\"https://example.org/hooks/oracle\",\"events\":[\"claim.decided\",\"claim.review_required\",\"claim.failed\"],\"enabled\":true,\"createdAt\":\"2026-09-01T09:10:00.000Z\"}},\"Source\":{\"value\":{\"sourceId\":\"src_01J8Z5A1B2C3D4E5F6G7H8J9K0\",\"name\":\"Acme Logistics\",\"ownerDid\":\"did:ixo:ixo1q9x3v8k2m5n7p4r6t8w0y2z4a6c8e0g2j4l6n8\",\"status\":\"active\",\"pausedReason\":null,\"billingMode\":\"x402\",\"allowedProtocols\":[{\"protocolDid\":\"did:ixo:entity:5e8f3c1a9b7d2e4f6a8c0b1d3e5f7a9c\"},{\"protocolDid\":\"did:ixo:entity:2b7a9c4e6f8d0a1c3e5b7d9f1a3c5e7b\"}],\"refillFloorCents\":2000,\"defaultWebhookUrl\":\"https://example.org/hooks/oracle\",\"contactEmail\":\"ops@acme.example\",\"companyEntityDid\":\"did:ixo:entity:7c1e9a3b5d7f9a1c3e5b7d9f1a3c5e7b\",\"payeeField\":null,\"createdAt\":\"2026-09-01T09:00:00.000Z\",\"activatedAt\":\"2026-09-01T09:05:00.000Z\"}},\"SourcePendingLinkError\":{\"summary\":\"The source is not linked to its organisation yet\",\"value\":{\"error\":{\"code\":\"SOURCE_PENDING_LINK\",\"message\":\"This source isn't linked to its organisation yet, so it can't do this. An admin of the organisation signs the link in the Decision Console, which then syncs it.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#SOURCE_PENDING_LINK\"}}},\"SourceDisputedError\":{\"summary\":\"The source's organisation link is disputed\",\"value\":{\"error\":{\"code\":\"SOURCE_DISPUTED\",\"message\":\"This source's organisation link is disputed (the decision engine holds a link for another organisation), so it can't do this. Delete the source and add the oracle to the organisation again.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#SOURCE_DISPUTED\"}}},\"IdempotencyMismatchError\":{\"summary\":\"The key was used with a different request\",\"value\":{\"error\":{\"code\":\"IDEMPOTENCY_MISMATCH\",\"message\":\"This Idempotency-Key was already used for a different request. Use a new key for a new request, or resend the original request unchanged.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#IDEMPOTENCY_MISMATCH\"}}},\"IdempotencyInFlightError\":{\"summary\":\"A request with this key is still running\",\"value\":{\"error\":{\"code\":\"CONFLICT\",\"message\":\"A request with this Idempotency-Key is still being processed. Retry in a second (see Retry-After) to get its result.\",\"requestId\":\"req_01J8Z6Q4X7N2M5K8P3R9T6V1W4\",\"docsUrl\":\"https://console.ixo.earth/docs/errors#CONFLICT\"}}}},\"schemas\":{\"ApiErrorCode\":{\"type\":\"string\",\"enum\":[\"UNAUTHORIZED\",\"SCOPE\",\"FORBIDDEN\",\"PAYMENT_REQUIRED\",\"SPEND_CAP\",\"INSUFFICIENT_CREDITS\",\"PAYER_NOT_MEMBER\",\"VALIDATION\",\"PROTOCOL_NOT_ALLOWED\",\"NOT_FOUND\",\"CONFLICT\",\"IDEMPOTENCY_MISMATCH\",\"NOT_PENDING_REVIEW\",\"REVIEW_EXPIRED\",\"SOURCE_PENDING_LINK\",\"SOURCE_DISPUTED\",\"PAYLOAD_TOO_LARGE\",\"RATE_LIMITED\",\"INTERNAL\",\"UPLOADS_DISABLED\",\"SOURCE_PAUSED\",\"UNAVAILABLE\",\"ATTESTATION_INVALID\",\"ATTESTATION_KEY_UNKNOWN\",\"ATTESTATION_ISSUER_MISMATCH\",\"ATTESTATION_MISMATCH\",\"ATTESTATION_UNRESOLVABLE\",\"ATTESTATION_REQUIRED\",\"REVIEWER_GRANT_INVALID\",\"REVIEWER_NOT_AUTHORIZED\"]},\"ApiErrorEnvelope\":{\"type\":\"object\",\"properties\":{\"error\":{\"type\":\"object\",\"properties\":{\"code\":{\"$ref\":\"#/components/schemas/ApiErrorCode\"},\"message\":{\"type\":\"string\"},\"requestId\":{\"type\":\"string\",\"minLength\":1},\"details\":{},\"docsUrl\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"code\",\"message\",\"requestId\",\"docsUrl\"]}},\"required\":[\"error\"]},\"SourcePausedReason\":{\"type\":\"string\",\"enum\":[\"rubric-unusable\",\"engine-credits\",\"payments-disabled\",\"operator\"]},\"SourcePausedDetails\":{\"type\":\"object\",\"properties\":{\"reason\":{\"$ref\":\"#/components/schemas/SourcePausedReason\"}},\"required\":[\"reason\"]},\"PaymentRequiredBody\":{\"type\":\"object\",\"properties\":{\"error\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\",\"enum\":[\"PAYMENT_REQUIRED\",\"SPEND_CAP\",\"INSUFFICIENT_CREDITS\"]},\"message\":{\"type\":\"string\"},\"requestId\":{\"type\":\"string\",\"minLength\":1},\"details\":{\"type\":\"object\",\"properties\":{\"paymentRequired\":{\"$ref\":\"#/components/schemas/X402PaymentRequired\"},\"price\":{\"$ref\":\"#/components/schemas/Price\"},\"fundingUrl\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"price\",\"fundingUrl\"]},\"docsUrl\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"code\",\"message\",\"requestId\",\"details\",\"docsUrl\"]}},\"required\":[\"error\"]},\"ResourceInfo\":{\"type\":\"object\",\"properties\":{\"url\":{\"type\":\"string\",\"maxLength\":2048,\"format\":\"uri\"},\"description\":{\"type\":\"string\"},\"mimeType\":{\"type\":\"string\"}},\"required\":[\"url\"],\"additionalProperties\":{}},\"PaymentRequirements\":{\"type\":\"object\",\"properties\":{\"scheme\":{\"type\":\"string\",\"minLength\":1},\"network\":{\"type\":\"string\",\"pattern\":\"^[-a-z0-9]{3,8}:[-_a-zA-Z0-9]{1,32}$\"},\"amount\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"asset\":{\"type\":\"string\",\"minLength\":1},\"payTo\":{\"type\":\"string\",\"minLength\":1},\"maxTimeoutSeconds\":{\"type\":\"integer\",\"minimum\":1},\"extra\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}}},\"required\":[\"scheme\",\"network\",\"amount\",\"asset\",\"payTo\",\"maxTimeoutSeconds\"],\"additionalProperties\":{}},\"IxoPayRequirements\":{\"type\":\"object\",\"properties\":{\"scheme\":{\"type\":\"string\",\"const\":\"ixo-pay\"},\"network\":{\"type\":\"string\",\"pattern\":\"^cosmos:[-_a-zA-Z0-9]{1,32}$\"},\"asset\":{\"type\":\"string\",\"const\":\"upay\"},\"amount\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"payTo\":{\"type\":\"string\",\"pattern\":\"^ixo1[02-9ac-hj-np-z]{38,58}$\"},\"maxTimeoutSeconds\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":3600},\"extra\":{\"type\":\"object\",\"properties\":{\"nonce\":{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\"},\"fundingUrl\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"nonce\",\"fundingUrl\"],\"additionalProperties\":false}},\"required\":[\"scheme\",\"network\",\"asset\",\"amount\",\"payTo\",\"maxTimeoutSeconds\",\"extra\"],\"additionalProperties\":false},\"X402PaymentRequired\":{\"type\":\"object\",\"properties\":{\"x402Version\":{\"type\":\"integer\",\"const\":2},\"error\":{\"type\":\"string\"},\"resource\":{\"$ref\":\"#/components/schemas/ResourceInfo\"},\"accepts\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/PaymentRequirements\"},\"contains\":{\"$ref\":\"#/components/schemas/IxoPayRequirements\"}},\"extensions\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}}},\"required\":[\"x402Version\",\"resource\",\"accepts\"]},\"IxoPayPaymentPayload\":{\"type\":\"object\",\"properties\":{\"x402Version\":{\"type\":\"integer\",\"const\":2},\"resource\":{\"$ref\":\"#/components/schemas/ResourceInfo\"},\"accepted\":{\"$ref\":\"#/components/schemas/IxoPayRequirements\"},\"payload\":{\"type\":\"object\",\"properties\":{\"delegation\":{\"type\":\"string\",\"minLength\":16,\"pattern\":\"^[A-Za-z0-9+/_-]+={0,2}$\"},\"nonce\":{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\"}},\"required\":[\"delegation\",\"nonce\"],\"additionalProperties\":false},\"extensions\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}}},\"required\":[\"x402Version\",\"accepted\",\"payload\"],\"additionalProperties\":false},\"CardRequirements\":{\"type\":\"object\",\"properties\":{\"scheme\":{\"type\":\"string\",\"const\":\"stripe-manual-capture\"},\"network\":{\"type\":\"string\",\"enum\":[\"stripe:test\",\"stripe:live\"]},\"amount\":{\"type\":\"string\",\"pattern\":\"^[1-9][0-9]{0,77}$\"},\"asset\":{\"type\":\"string\",\"const\":\"usd\"},\"payTo\":{\"type\":\"string\",\"pattern\":\"^acct_[a-zA-Z0-9]+$\"},\"maxTimeoutSeconds\":{\"type\":\"integer\",\"minimum\":10,\"maximum\":300},\"extra\":{\"type\":\"object\",\"properties\":{\"nonce\":{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\"}},\"required\":[\"nonce\"],\"additionalProperties\":false}},\"required\":[\"scheme\",\"network\",\"amount\",\"asset\",\"payTo\",\"maxTimeoutSeconds\",\"extra\"],\"additionalProperties\":false},\"CardPaymentPayload\":{\"type\":\"object\",\"properties\":{\"x402Version\":{\"type\":\"integer\",\"const\":2},\"resource\":{\"$ref\":\"#/components/schemas/ResourceInfo\"},\"accepted\":{\"$ref\":\"#/components/schemas/CardRequirements\"},\"payload\":{\"type\":\"object\",\"properties\":{\"paymentIntentId\":{\"type\":\"string\",\"pattern\":\"^pi_[a-zA-Z0-9]+$\"},\"customerId\":{\"type\":\"string\",\"pattern\":\"^cus_[a-zA-Z0-9]+$\"}},\"required\":[\"paymentIntentId\",\"customerId\"],\"additionalProperties\":false},\"extensions\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}}},\"required\":[\"x402Version\",\"accepted\",\"payload\"],\"additionalProperties\":false},\"SettlementClaim\":{\"type\":\"object\",\"properties\":{\"claimId\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^apc_([0-9a-f]{40}|[0-9A-HJKMNP-TV-Z]{26})$\"},{\"type\":\"string\",\"pattern\":\"^b[a-z2-7]{50,100}$\"}]},\"state\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"claimId\",\"state\"],\"additionalProperties\":{}},\"UdidReceipt\":{\"type\":\"object\",\"properties\":{\"settlementId\":{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{64}$\"},\"offerId\":{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$\"},\"replayed\":{\"type\":\"boolean\"},\"claims\":{\"minItems\":1,\"maxItems\":100,\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/SettlementClaim\"}},\"decision\":{\"type\":\"object\",\"properties\":{\"issuer\":{\"type\":\"string\",\"minLength\":1},\"id\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"issuer\",\"id\"]}},\"required\":[\"settlementId\",\"offerId\",\"replayed\",\"claims\"],\"additionalProperties\":{}},\"X402PaymentResponse\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"success\":{\"type\":\"boolean\",\"const\":true},\"transaction\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"network\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^cosmos:[-_a-zA-Z0-9]{1,32}$\"},{\"type\":\"string\",\"enum\":[\"stripe:test\",\"stripe:live\"]},{\"type\":\"string\",\"pattern\":\"^eip155:[1-9][0-9]{0,19}$\"}]},\"payer\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},{\"type\":\"string\",\"pattern\":\"^0x[0-9a-fA-F]{40}$\"}]},\"extensions\":{\"type\":\"object\",\"properties\":{\"org.udid.receipt@1\":{\"$ref\":\"#/components/schemas/UdidReceipt\"}},\"required\":[\"org.udid.receipt@1\"],\"additionalProperties\":{}}},\"required\":[\"success\",\"transaction\",\"network\",\"payer\",\"extensions\"],\"additionalProperties\":{}},{\"type\":\"object\",\"properties\":{\"success\":{\"type\":\"boolean\",\"const\":false},\"errorReason\":{\"type\":\"string\",\"const\":\"settlement_pending\"},\"transaction\":{\"type\":\"string\"},\"network\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^cosmos:[-_a-zA-Z0-9]{1,32}$\"},{\"type\":\"string\",\"enum\":[\"stripe:test\",\"stripe:live\"]},{\"type\":\"string\",\"pattern\":\"^eip155:[1-9][0-9]{0,19}$\"}]},\"payer\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},{\"type\":\"string\",\"pattern\":\"^0x[0-9a-fA-F]{40}$\"}]},\"extensions\":{\"type\":\"object\",\"properties\":{\"org.udid.receipt@1\":{\"$ref\":\"#/components/schemas/UdidReceipt\"}},\"required\":[\"org.udid.receipt@1\"],\"additionalProperties\":{}}},\"required\":[\"success\",\"errorReason\",\"transaction\",\"network\",\"payer\",\"extensions\"],\"additionalProperties\":{}}]},\"Price\":{\"type\":\"object\",\"properties\":{\"amountMicroUsd\":{\"type\":\"integer\",\"minimum\":0},\"amountCents\":{\"type\":\"integer\",\"minimum\":0},\"currency\":{\"type\":\"string\",\"const\":\"USD\"},\"amount\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"asset\":{\"type\":\"string\",\"const\":\"upay\"}},\"required\":[\"amountMicroUsd\",\"amountCents\",\"currency\",\"amount\",\"asset\"]},\"Attachment\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"question\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"mediaType\":{\"description\":\"Optional. Left out on a url attachment, the oracle detects it once at accept — from the URL's extension, else the Content-Type of one HEAD — and stores it with the claim; unknown stays application/octet-stream. An upload's type is the one sniffed at upload.\",\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"cid\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"url\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"question\",\"url\"],\"additionalProperties\":false},{\"type\":\"object\",\"properties\":{\"question\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"mediaType\":{\"description\":\"Optional. Left out on a url attachment, the oracle detects it once at accept — from the URL's extension, else the Content-Type of one HEAD — and stores it with the claim; unknown stays application/octet-stream. An upload's type is the one sniffed at upload.\",\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"cid\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256,\"description\":\"Required: the `cid` PUT /v1/api/uploads returned for this upload.\"},\"uploadId\":{\"type\":\"string\",\"pattern\":\"^upl_[0-9A-HJKMNP-TV-Z]{26}$\"}},\"required\":[\"question\",\"cid\",\"uploadId\"],\"additionalProperties\":false}]},\"SubmitClaimRequest\":{\"type\":\"object\",\"properties\":{\"protocolDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"},\"answers\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"attachments\":{\"maxItems\":100,\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Attachment\"}},\"submitter\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"metadata\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"webhookUrl\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"answers\"],\"additionalProperties\":false},\"Accepted\":{\"type\":\"object\",\"properties\":{\"claimId\":{\"type\":\"string\",\"pattern\":\"^apc_([0-9a-f]{40}|[0-9A-HJKMNP-TV-Z]{26})$\"},\"status\":{\"$ref\":\"#/components/schemas/ClaimStatus\"},\"pollUrl\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"claimId\",\"status\",\"pollUrl\"]},\"BatchSubmitRequest\":{\"type\":\"object\",\"properties\":{\"claims\":{\"minItems\":1,\"maxItems\":100,\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/SubmitClaimRequest\"}}},\"required\":[\"claims\"],\"additionalProperties\":false},\"BatchItemResult\":{\"oneOf\":[{\"$ref\":\"#/components/schemas/BatchItemResultAccepted\"},{\"$ref\":\"#/components/schemas/BatchItemResultRejected\"}],\"discriminator\":{\"propertyName\":\"status\",\"mapping\":{\"accepted\":\"#/components/schemas/BatchItemResultAccepted\",\"rejected\":\"#/components/schemas/BatchItemResultRejected\"}}},\"BatchItemResultAccepted\":{\"type\":\"object\",\"properties\":{\"index\":{\"type\":\"integer\",\"minimum\":0},\"status\":{\"type\":\"string\",\"const\":\"accepted\"},\"claimId\":{\"type\":\"string\",\"pattern\":\"^apc_([0-9a-f]{40}|[0-9A-HJKMNP-TV-Z]{26})$\"},\"pollUrl\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"index\",\"status\",\"claimId\",\"pollUrl\"]},\"BatchItemResultRejected\":{\"type\":\"object\",\"properties\":{\"index\":{\"type\":\"integer\",\"minimum\":0},\"status\":{\"type\":\"string\",\"const\":\"rejected\"},\"error\":{\"type\":\"object\",\"properties\":{\"code\":{\"$ref\":\"#/components/schemas/ApiErrorCode\"},\"message\":{\"type\":\"string\"},\"details\":{},\"docsUrl\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"code\",\"message\",\"docsUrl\"]}},\"required\":[\"index\",\"status\",\"error\"]},\"BatchSubmitResponse\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/BatchItemResult\"}}},\"required\":[\"items\"]},\"EngineDecision\":{\"type\":\"object\",\"properties\":{\"status\":{\"type\":\"string\",\"enum\":[\"decided\",\"pending_review\",\"unusable\"]},\"verdict\":{\"type\":\"string\",\"enum\":[\"approve\",\"partial\",\"reject\",\"review\"]},\"class\":{\"type\":\"string\",\"enum\":[\"supported\",\"partial\",\"refuted\",\"invalid_evidence\",\"out_of_authority\",\"insufficient_evidence\",\"requires_human_review\"]},\"evaluationStatus\":{\"anyOf\":[{\"type\":\"integer\",\"const\":1},{\"type\":\"integer\",\"const\":2},{\"type\":\"integer\",\"const\":5}]},\"action\":{\"type\":\"string\",\"enum\":[\"auto_approve\",\"auto_reject\",\"needs_human_review\"]},\"totalBps\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"null\"}]},\"gates\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"outcome\":{\"type\":\"string\",\"enum\":[\"passed\",\"failed\",\"skipped\",\"unevaluated\",\"not_reached\"]}},\"required\":[\"code\",\"outcome\"],\"additionalProperties\":{}}},\"criteria\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"scoreBps\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"null\"}]},\"pending\":{\"type\":\"boolean\"},\"capped\":{\"type\":\"boolean\"}},\"required\":[\"code\",\"scoreBps\",\"pending\",\"capped\"],\"additionalProperties\":{}}},\"pendingTasks\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"reasons\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"reason\":{\"type\":\"string\"},\"class\":{\"type\":\"string\",\"enum\":[\"supported\",\"partial\",\"refuted\",\"invalid_evidence\",\"out_of_authority\",\"insufficient_evidence\",\"requires_human_review\"]}},\"required\":[\"code\",\"reason\",\"class\"],\"additionalProperties\":{}}}},\"required\":[\"status\",\"verdict\",\"class\",\"evaluationStatus\",\"action\",\"totalBps\",\"gates\",\"criteria\",\"pendingTasks\",\"reasons\"],\"additionalProperties\":{}},\"ReviewAnswerShape\":{\"oneOf\":[{\"$ref\":\"#/components/schemas/ReviewAnswerShapeBoolean\"},{\"$ref\":\"#/components/schemas/ReviewAnswerShapeEnum\"},{\"$ref\":\"#/components/schemas/ReviewAnswerShapeNumber\"},{\"$ref\":\"#/components/schemas/ReviewAnswerShapeText\"}],\"discriminator\":{\"propertyName\":\"type\",\"mapping\":{\"boolean\":\"#/components/schemas/ReviewAnswerShapeBoolean\",\"enum\":\"#/components/schemas/ReviewAnswerShapeEnum\",\"number\":\"#/components/schemas/ReviewAnswerShapeNumber\",\"text\":\"#/components/schemas/ReviewAnswerShapeText\"}}},\"ReviewAnswerShapeBoolean\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"boolean\"}},\"required\":[\"type\"],\"additionalProperties\":{}},\"ReviewAnswerShapeEnum\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"enum\"},\"options\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}}},\"required\":[\"type\",\"options\"],\"additionalProperties\":{}},\"ReviewAnswerShapeNumber\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"number\"}},\"required\":[\"type\"],\"additionalProperties\":{}},\"ReviewAnswerShapeText\":{\"type\":\"object\",\"properties\":{\"type\":{\"type\":\"string\",\"const\":\"text\"}},\"required\":[\"type\"],\"additionalProperties\":{}},\"ReceiptRef\":{\"type\":\"object\",\"properties\":{\"cid\":{\"type\":\"string\",\"minLength\":1},\"jws\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"cid\",\"jws\"]},\"ClaimDecision\":{\"type\":\"object\",\"properties\":{\"status\":{\"$ref\":\"#/components/schemas/DecisionStatus\"},\"verdict\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"approve\",\"partial\",\"reject\",\"review\"]},{\"type\":\"null\"}]},\"rubricId\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"factsDigest\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"resultDigest\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"decision\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/EngineDecision\"},{\"type\":\"null\"}]},\"explanation\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"receipt\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ReceiptRef\"},{\"type\":\"null\"}]},\"chainStatus\":{\"$ref\":\"#/components/schemas/ChainStatus\"},\"erroredFacts\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1},\"detail\":{\"type\":\"string\",\"maxLength\":500}},\"required\":[\"name\",\"detail\"]}}},\"required\":[\"status\",\"verdict\",\"rubricId\",\"factsDigest\",\"resultDigest\",\"decision\",\"explanation\",\"receipt\",\"chainStatus\"]},\"ReviewTask\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"minLength\":1},\"prompt\":{\"type\":\"string\",\"minLength\":1},\"answer\":{\"$ref\":\"#/components/schemas/ReviewAnswerShape\"}},\"required\":[\"id\",\"prompt\",\"answer\"]},\"ClaimReviewState\":{\"type\":\"object\",\"properties\":{\"pendingTasks\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/ReviewTask\"}},\"answeredAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"foldedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"foldError\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"answerBy\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]}},\"required\":[\"pendingTasks\",\"answeredAt\",\"foldedAt\",\"foldError\",\"answerBy\"]},\"ClaimPayment\":{\"type\":\"object\",\"properties\":{\"scheme\":{\"type\":\"string\",\"enum\":[\"ixo-pay\",\"stripe-manual-capture\",\"exact\"]},\"amount\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"asset\":{\"type\":\"string\",\"enum\":[\"upay\",\"usd\",\"usdc\"]},\"settlementId\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{64}$\"},{\"type\":\"null\"}]},\"status\":{\"type\":\"string\",\"enum\":[\"reserved\",\"settled\",\"paid\",\"released\",\"failed\",\"refunded\",\"partially_refunded\"]},\"transaction\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},{\"type\":\"null\"}]},\"refundedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"refundId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},{\"type\":\"null\"}]},\"refundedAmountCents\":{\"anyOf\":[{\"type\":\"integer\",\"minimum\":0},{\"type\":\"null\"}]}},\"required\":[\"scheme\",\"amount\",\"asset\",\"settlementId\",\"status\",\"transaction\",\"refundedAt\",\"refundId\",\"refundedAmountCents\"]},\"ClaimWebhookState\":{\"type\":\"object\",\"properties\":{\"status\":{\"type\":\"string\",\"enum\":[\"pending\",\"delivered\",\"failed\",\"dead\"]},\"attempts\":{\"type\":\"integer\",\"minimum\":0}},\"required\":[\"status\",\"attempts\"]},\"ClaimErrorCode\":{\"type\":\"string\",\"enum\":[\"invalid_facts\",\"engine_rejected\",\"body_mismatch\",\"retries_exhausted\"]},\"ClaimStatus\":{\"type\":\"string\",\"enum\":[\"queued\",\"processing\",\"processed\",\"failed\"]},\"ClaimLane\":{\"type\":\"string\",\"enum\":[\"api\",\"chain\"]},\"ChainStatus\":{\"type\":\"string\",\"enum\":[\"pending\",\"submitted\",\"blocked\",\"skipped\",\"held\",\"owner_submitted\"]},\"DecisionStatus\":{\"type\":\"string\",\"enum\":[\"decided\",\"pending_review\",\"unusable\",\"invalid_facts\",\"content_mismatch\",\"payload_too_large\"]},\"ClaimRecord\":{\"type\":\"object\",\"properties\":{\"claimId\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":512},\"lane\":{\"$ref\":\"#/components/schemas/ClaimLane\"},\"sourceId\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^src_[0-9A-HJKMNP-TV-Z]{26}$\"},{\"type\":\"null\"}]},\"collectionId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"protocolDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"},\"submitter\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"submittedBy\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"submittedVia\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":100},\"verified\":{\"type\":\"boolean\"}},\"required\":[\"name\",\"verified\"],\"additionalProperties\":false},{\"type\":\"null\"}],\"example\":{\"name\":\"Claude\",\"verified\":true}},\"contentDigest\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"status\":{\"$ref\":\"#/components/schemas/ClaimStatus\"},\"decision\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ClaimDecision\"},{\"type\":\"null\"}]},\"review\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ClaimReviewState\"},{\"type\":\"null\"}]},\"payment\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ClaimPayment\"},{\"type\":\"null\"}]},\"webhook\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ClaimWebhookState\"},{\"type\":\"null\"}]},\"error\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"code\":{\"$ref\":\"#/components/schemas/ClaimErrorCode\"},\"message\":{\"type\":\"string\"}},\"required\":[\"code\",\"message\"]},{\"type\":\"null\"}]},\"metadata\":{\"anyOf\":[{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},{\"type\":\"null\"}]},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"decidedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]}},\"required\":[\"claimId\",\"lane\",\"sourceId\",\"collectionId\",\"protocolDid\",\"submittedBy\",\"submittedVia\",\"contentDigest\",\"status\",\"decision\",\"review\",\"payment\",\"webhook\",\"error\",\"metadata\",\"createdAt\",\"decidedAt\"]},\"ClaimPage\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/ClaimRecord\"}},\"nextCursor\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]}},\"required\":[\"items\",\"nextCursor\"]},\"AdminClaimRecord\":{\"type\":\"object\",\"properties\":{\"claimId\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":512},\"lane\":{\"$ref\":\"#/components/schemas/ClaimLane\"},\"sourceId\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^src_[0-9A-HJKMNP-TV-Z]{26}$\"},{\"type\":\"null\"}]},\"collectionId\":{\"anyOf\":[{\"type\":\"string\",\"minLength\":1},{\"type\":\"null\"}]},\"protocolDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"},\"submitter\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"submittedBy\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"submittedVia\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":100},\"verified\":{\"type\":\"boolean\"}},\"required\":[\"name\",\"verified\"],\"additionalProperties\":false},{\"type\":\"null\"}],\"example\":{\"name\":\"Claude\",\"verified\":true}},\"contentDigest\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"status\":{\"$ref\":\"#/components/schemas/ClaimStatus\"},\"decision\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ClaimDecision\"},{\"type\":\"null\"}]},\"review\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ClaimReviewState\"},{\"type\":\"null\"}]},\"payment\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ClaimPayment\"},{\"type\":\"null\"}]},\"webhook\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ClaimWebhookState\"},{\"type\":\"null\"}]},\"error\":{\"anyOf\":[{\"type\":\"object\",\"properties\":{\"code\":{\"$ref\":\"#/components/schemas/ClaimErrorCode\"},\"message\":{\"type\":\"string\"}},\"required\":[\"code\",\"message\"]},{\"type\":\"null\"}]},\"metadata\":{\"anyOf\":[{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},{\"type\":\"null\"}]},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"decidedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"sourceName\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]}},\"required\":[\"claimId\",\"lane\",\"sourceId\",\"collectionId\",\"protocolDid\",\"submittedBy\",\"submittedVia\",\"contentDigest\",\"status\",\"decision\",\"review\",\"payment\",\"webhook\",\"error\",\"metadata\",\"createdAt\",\"decidedAt\",\"sourceName\"]},\"AdminClaimPage\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/AdminClaimRecord\"}},\"nextCursor\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]}},\"required\":[\"items\",\"nextCursor\"]},\"ClaimEventType\":{\"type\":\"string\",\"enum\":[\"accepted\",\"paid\",\"facts_produced\",\"decided\",\"review_required\",\"review_answered\",\"folded\",\"unusable\",\"failed\",\"webhook_attempt\",\"erased\",\"chain_submitted\",\"review_expired\"]},\"ClaimEvent\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"$ref\":\"#/components/schemas/ClaimEventType\"},\"at\":{\"type\":\"string\",\"format\":\"date-time\"},\"data\":{\"anyOf\":[{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},{\"type\":\"null\"}]}},\"required\":[\"id\",\"type\",\"at\",\"data\"]},\"ClaimEvents\":{\"type\":\"object\",\"properties\":{\"claimId\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":512},\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/ClaimEvent\"}}},\"required\":[\"claimId\",\"items\"]},\"Receipt\":{\"type\":\"object\",\"properties\":{\"cid\":{\"type\":\"string\",\"minLength\":1},\"jws\":{\"type\":\"string\",\"minLength\":1},\"issuerKeysUrl\":{\"type\":\"string\",\"format\":\"uri\"},\"verifyUrl\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"cid\",\"jws\",\"issuerKeysUrl\",\"verifyUrl\"]},\"ReviewRequest\":{\"type\":\"object\",\"properties\":{\"answers\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":256},\"additionalProperties\":{\"anyOf\":[{\"type\":\"boolean\"},{\"type\":\"string\",\"maxLength\":4096}]}},\"attestation\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":16384},\"reviewerGrant\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":16384},\"answeredAgainst\":{\"type\":\"string\",\"minLength\":1}},\"required\":[\"answers\"],\"additionalProperties\":false},\"ReviewRow\":{\"type\":\"object\",\"properties\":{\"claimId\":{\"type\":\"string\",\"pattern\":\"^apc_([0-9a-f]{40}|[0-9A-HJKMNP-TV-Z]{26})$\"},\"answers\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{\"anyOf\":[{\"type\":\"boolean\"},{\"type\":\"string\"}]}},\"reviewerDid\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^did:key:z[1-9A-HJ-NP-Za-km-z]+$\"},{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"}]},\"answeredAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"foldedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"foldError\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]}},\"required\":[\"claimId\",\"answers\",\"reviewerDid\",\"answeredAt\",\"foldedAt\",\"foldError\"]},\"DecisionReport\":{\"type\":\"object\",\"properties\":{\"claimId\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":512},\"verdict\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"approve\",\"partial\",\"reject\",\"review\"]},{\"type\":\"null\"}]}},\"required\":[\"claimId\",\"verdict\"],\"additionalProperties\":{}},\"ReviewBlock\":{\"type\":\"string\",\"enum\":[\"oracle-owner\",\"not-reviewer\"]},\"CanAnswer\":{\"type\":\"object\",\"properties\":{\"ok\":{\"type\":\"boolean\"},\"reason\":{\"$ref\":\"#/components/schemas/ReviewBlock\"}},\"required\":[\"ok\"]},\"ReviewView\":{\"type\":\"object\",\"properties\":{\"claimId\":{\"type\":\"string\",\"pattern\":\"^apc_([0-9a-f]{40}|[0-9A-HJKMNP-TV-Z]{26})$\"},\"protocolDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"},\"resultDigest\":{\"type\":\"string\",\"minLength\":1},\"pendingTasks\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/ReviewTask\"}},\"answers\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"files\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"question\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"mediaType\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"url\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"question\",\"name\",\"mediaType\",\"url\"]}},\"submittedAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"answerBy\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"canAnswer\":{\"$ref\":\"#/components/schemas/CanAnswer\"},\"erroredFacts\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1},\"detail\":{\"type\":\"string\",\"maxLength\":500}},\"required\":[\"name\",\"detail\"]}},\"duplicates\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"taskId\":{\"type\":\"string\",\"minLength\":1},\"ruleId\":{\"type\":\"string\",\"minLength\":1},\"score\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":10000},\"prior\":{\"type\":\"object\",\"properties\":{\"outcome\":{\"anyOf\":[{\"type\":\"string\",\"enum\":[\"approve\",\"partial\",\"reject\",\"review\"]},{\"type\":\"null\"}]},\"claimId\":{\"type\":\"string\",\"pattern\":\"^apc_([0-9a-f]{40}|[0-9A-HJKMNP-TV-Z]{26})$\"},\"submittedAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"files\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"question\":{\"type\":\"string\",\"minLength\":1},\"name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"mediaType\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"url\":{\"type\":\"string\",\"format\":\"uri\"}},\"required\":[\"question\",\"name\",\"mediaType\",\"url\"]}}},\"required\":[\"outcome\"]}},\"required\":[\"taskId\",\"ruleId\",\"prior\"]}}},\"required\":[\"claimId\",\"protocolDid\",\"resultDigest\",\"pendingTasks\",\"answers\",\"files\",\"submittedAt\",\"answerBy\",\"canAnswer\"]},\"Upload\":{\"type\":\"object\",\"properties\":{\"uploadId\":{\"type\":\"string\",\"pattern\":\"^upl_[0-9A-HJKMNP-TV-Z]{26}$\"},\"url\":{\"type\":\"string\",\"format\":\"uri\"},\"cid\":{\"type\":\"string\",\"minLength\":1},\"mediaType\":{\"type\":\"string\",\"minLength\":1},\"size\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":25000000}},\"required\":[\"uploadId\",\"url\",\"cid\",\"mediaType\",\"size\"]},\"UploadLink\":{\"type\":\"object\",\"properties\":{\"uploadId\":{\"type\":\"string\",\"pattern\":\"^upl_[0-9A-HJKMNP-TV-Z]{26}$\"},\"uploadUrl\":{\"type\":\"string\",\"format\":\"uri\"},\"expiresAt\":{\"type\":\"string\",\"format\":\"date-time\"}},\"required\":[\"uploadId\",\"uploadUrl\",\"expiresAt\"]},\"ProtocolSummary\":{\"type\":\"object\",\"properties\":{\"protocolDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"},\"name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"price\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/Price\"},{\"type\":\"null\"}]}},\"required\":[\"protocolDid\",\"name\",\"price\"]},\"ProtocolList\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/ProtocolSummary\"}}},\"required\":[\"items\"]},\"FileQuestion\":{\"type\":\"object\",\"properties\":{\"question\":{\"type\":\"string\",\"minLength\":1},\"required\":{\"type\":\"boolean\"},\"mediaTypes\":{\"type\":\"array\",\"items\":{\"type\":\"string\",\"minLength\":1}},\"maxBytes\":{\"type\":\"integer\",\"minimum\":1,\"maximum\":25000000}},\"required\":[\"question\",\"required\",\"mediaTypes\",\"maxBytes\"]},\"ProtocolWorkOrder\":{\"type\":\"object\",\"properties\":{\"protocolDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"},\"name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"rubricId\":{\"type\":\"string\",\"minLength\":1},\"answers\":{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},\"files\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/FileQuestion\"}},\"facts\":{\"type\":\"object\",\"properties\":{\"ext\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"ai\":{\"type\":\"array\",\"items\":{\"type\":\"string\"}},\"unique\":{\"type\":\"boolean\"},\"frequency\":{\"type\":\"boolean\"}},\"required\":[\"ext\",\"ai\",\"unique\",\"frequency\"]},\"reviewTasks\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/ReviewTask\"}},\"price\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/Price\"},{\"type\":\"null\"}]},\"example\":{\"$ref\":\"#/components/schemas/SubmitClaimRequest\"}},\"required\":[\"protocolDid\",\"name\",\"rubricId\",\"answers\",\"files\",\"facts\",\"reviewTasks\",\"price\",\"example\"]},\"AllowedProtocol\":{\"type\":\"object\",\"properties\":{\"protocolDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"}},\"required\":[\"protocolDid\"]},\"BillingMode\":{\"type\":\"string\",\"enum\":[\"x402\",\"none\"]},\"Source\":{\"type\":\"object\",\"properties\":{\"sourceId\":{\"type\":\"string\",\"pattern\":\"^src_[0-9A-HJKMNP-TV-Z]{26}$\"},\"name\":{\"type\":\"string\",\"minLength\":1},\"ownerDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},\"status\":{\"type\":\"string\",\"enum\":[\"pending-link\",\"active\",\"paused\",\"disputed\"]},\"pausedReason\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/SourcePausedReason\"},{\"type\":\"null\"}]},\"billingMode\":{\"$ref\":\"#/components/schemas/BillingMode\"},\"allowedProtocols\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/AllowedProtocol\"}},\"refillFloorCents\":{\"anyOf\":[{\"type\":\"integer\",\"minimum\":0},{\"type\":\"null\"}]},\"defaultWebhookUrl\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"uri\"},{\"type\":\"null\"}]},\"contactEmail\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"email\",\"pattern\":\"^(?!\\\\.)(?!.*\\\\.\\\\.)([A-Za-z0-9_'+\\\\-\\\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\\\-]*\\\\.)+[A-Za-z]{2,}$\"},{\"type\":\"null\"}]},\"companyEntityDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-f]{32}$\"},\"payeeField\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"activatedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]}},\"required\":[\"sourceId\",\"name\",\"ownerDid\",\"status\",\"pausedReason\",\"billingMode\",\"allowedProtocols\",\"refillFloorCents\",\"defaultWebhookUrl\",\"contactEmail\",\"companyEntityDid\",\"payeeField\",\"createdAt\",\"activatedAt\"]},\"CreateSourceRequest\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"contactEmail\":{\"type\":\"string\",\"format\":\"email\",\"pattern\":\"^(?!\\\\.)(?!.*\\\\.\\\\.)([A-Za-z0-9_'+\\\\-\\\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\\\-]*\\\\.)+[A-Za-z]{2,}$\"},\"entityDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-f]{32}$\"}},\"required\":[\"name\",\"contactEmail\",\"entityDid\"],\"additionalProperties\":false},\"CreateSourceResponse\":{\"type\":\"object\",\"properties\":{\"source\":{\"$ref\":\"#/components/schemas/Source\"},\"webhookSecret\":{\"type\":\"string\",\"pattern\":\"^whsec_[0-9A-Za-z]{32,}$\"}},\"required\":[\"source\",\"webhookSecret\"]},\"RotateWebhookSecretResponse\":{\"type\":\"object\",\"properties\":{\"webhookSecret\":{\"type\":\"string\",\"pattern\":\"^whsec_[0-9A-Za-z]{32,}$\"},\"previousExpiresAt\":{\"type\":\"string\",\"format\":\"date-time\"}},\"required\":[\"webhookSecret\",\"previousExpiresAt\"]},\"Capability\":{\"type\":\"string\",\"enum\":[\"source/*\",\"claims/submit\",\"claims/read\",\"claims/review\",\"keys/manage\",\"webhooks/manage\",\"spend/read\",\"settings/manage\",\"audit/read\"]},\"MemberRole\":{\"type\":\"string\",\"enum\":[\"owner\",\"developer\",\"reviewer\",\"viewer\",\"submitter\"]},\"MemberStatus\":{\"type\":\"string\",\"enum\":[\"invited\",\"accepted\",\"active\",\"expired\",\"revoked\"]},\"Member\":{\"type\":\"object\",\"properties\":{\"memberId\":{\"type\":\"string\",\"pattern\":\"^mem_[0-9A-HJKMNP-TV-Z]{26}$\"},\"did\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},{\"type\":\"null\"}]},\"email\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"email\",\"pattern\":\"^(?!\\\\.)(?!.*\\\\.\\\\.)([A-Za-z0-9_'+\\\\-\\\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\\\-]*\\\\.)+[A-Za-z]{2,}$\"},{\"type\":\"null\"}]},\"role\":{\"$ref\":\"#/components/schemas/MemberRole\"},\"status\":{\"$ref\":\"#/components/schemas/MemberStatus\"},\"capabilities\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Capability\"}},\"protocols\":{\"anyOf\":[{\"type\":\"array\",\"items\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"}},{\"type\":\"null\"}]},\"expiresAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"delegationCid\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"revokedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"reviewerDid\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^did:key:z[1-9A-HJ-NP-Za-km-z]+$\"},{\"type\":\"null\"}]},\"reviewerDelegationExpiresAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"notifyReviews\":{\"type\":\"boolean\"},\"invitedAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"acceptedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]}},\"required\":[\"memberId\",\"did\",\"email\",\"role\",\"status\",\"capabilities\",\"protocols\",\"expiresAt\",\"delegationCid\",\"revokedAt\",\"reviewerDid\",\"reviewerDelegationExpiresAt\",\"notifyReviews\",\"invitedAt\",\"acceptedAt\"]},\"MemberList\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Member\"}}},\"required\":[\"items\"]},\"MySource\":{\"type\":\"object\",\"properties\":{\"source\":{\"$ref\":\"#/components/schemas/Source\"},\"memberId\":{\"type\":\"string\",\"pattern\":\"^mem_[0-9A-HJKMNP-TV-Z]{26}$\"},\"role\":{\"$ref\":\"#/components/schemas/MemberRole\"},\"status\":{\"$ref\":\"#/components/schemas/MemberStatus\"},\"capabilities\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Capability\"}},\"protocols\":{\"anyOf\":[{\"type\":\"array\",\"items\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"}},{\"type\":\"null\"}]},\"expiresAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"delegation\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"delegationCid\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]}},\"required\":[\"source\",\"memberId\",\"role\",\"status\",\"capabilities\",\"protocols\",\"expiresAt\",\"delegation\",\"delegationCid\"]},\"MySourceList\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/MySource\"}}},\"required\":[\"items\"]},\"CompanySyncResponse\":{\"type\":\"object\",\"properties\":{\"source\":{\"$ref\":\"#/components/schemas/Source\"},\"members\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Member\"}}},\"required\":[\"source\",\"members\"]},\"InviteMemberRequest\":{\"type\":\"object\",\"properties\":{\"email\":{\"type\":\"string\",\"format\":\"email\",\"pattern\":\"^(?!\\\\.)(?!.*\\\\.\\\\.)([A-Za-z0-9_'+\\\\-\\\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\\\-]*\\\\.)+[A-Za-z]{2,}$\"},\"did\":{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},\"role\":{\"$ref\":\"#/components/schemas/MemberRole\"}},\"required\":[\"role\"],\"additionalProperties\":false},\"InviteMemberResponse\":{\"type\":\"object\",\"properties\":{\"memberId\":{\"type\":\"string\",\"pattern\":\"^mem_[0-9A-HJKMNP-TV-Z]{26}$\"},\"did\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},{\"type\":\"null\"}]},\"email\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"email\",\"pattern\":\"^(?!\\\\.)(?!.*\\\\.\\\\.)([A-Za-z0-9_'+\\\\-\\\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\\\-]*\\\\.)+[A-Za-z]{2,}$\"},{\"type\":\"null\"}]},\"role\":{\"$ref\":\"#/components/schemas/MemberRole\"},\"status\":{\"$ref\":\"#/components/schemas/MemberStatus\"},\"capabilities\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Capability\"}},\"protocols\":{\"anyOf\":[{\"type\":\"array\",\"items\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"}},{\"type\":\"null\"}]},\"expiresAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"delegationCid\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"revokedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"reviewerDid\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^did:key:z[1-9A-HJ-NP-Za-km-z]+$\"},{\"type\":\"null\"}]},\"reviewerDelegationExpiresAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"notifyReviews\":{\"type\":\"boolean\"},\"invitedAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"acceptedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"inviteToken\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^inv_[0-9A-Za-z]{32,}$\"},{\"type\":\"null\"}]}},\"required\":[\"memberId\",\"did\",\"email\",\"role\",\"status\",\"capabilities\",\"protocols\",\"expiresAt\",\"delegationCid\",\"revokedAt\",\"reviewerDid\",\"reviewerDelegationExpiresAt\",\"notifyReviews\",\"invitedAt\",\"acceptedAt\",\"inviteToken\"]},\"AcceptInviteRequest\":{\"type\":\"object\",\"properties\":{\"inviteToken\":{\"type\":\"string\",\"pattern\":\"^inv_[0-9A-Za-z]{32,}$\"}},\"required\":[\"inviteToken\"],\"additionalProperties\":false},\"GrantMemberRequest\":{\"type\":\"object\",\"properties\":{\"delegation\":{\"type\":\"string\",\"minLength\":16,\"maxLength\":65536,\"pattern\":\"^[A-Za-z0-9+/_-]+={0,2}$\"},\"role\":{\"$ref\":\"#/components/schemas/MemberRole\"}},\"required\":[\"delegation\",\"role\"],\"additionalProperties\":false},\"UpdateMemberRequest\":{\"type\":\"object\",\"properties\":{\"reviewerDid\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^did:key:z[1-9A-HJ-NP-Za-km-z]+$\"},{\"type\":\"null\"}]},\"reviewerProof\":{\"type\":\"string\",\"pattern\":\"^[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+\\\\.[A-Za-z0-9_-]+$\"},\"notifyReviews\":{\"type\":\"boolean\"}},\"additionalProperties\":false},\"Scope\":{\"type\":\"string\",\"enum\":[\"claims:write\",\"claims:read\",\"webhooks:manage\"]},\"ApiKey\":{\"type\":\"object\",\"properties\":{\"prefix\":{\"type\":\"string\",\"pattern\":\"^[0-9a-z]{8}$\"},\"name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"masked\":{\"type\":\"string\",\"pattern\":\"^eo_(live|test)_[0-9a-z]{8}_\\\\u2026$\"},\"environment\":{\"type\":\"string\",\"enum\":[\"live\",\"test\"]},\"scopes\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Scope\"}},\"maxSpendCentsPerDay\":{\"anyOf\":[{\"type\":\"integer\",\"minimum\":1},{\"type\":\"null\"}]},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"lastUsedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"revokedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]}},\"required\":[\"prefix\",\"name\",\"masked\",\"environment\",\"scopes\",\"maxSpendCentsPerDay\",\"createdAt\",\"lastUsedAt\",\"revokedAt\"]},\"KeyList\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/ApiKey\"}}},\"required\":[\"items\"]},\"CreateApiKeyRequest\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":64},\"scopes\":{\"minItems\":1,\"maxItems\":3,\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Scope\"}},\"maxSpendCentsPerDay\":{\"type\":\"integer\",\"minimum\":1}},\"required\":[\"scopes\"],\"additionalProperties\":false},\"CreateApiKeyResponse\":{\"type\":\"object\",\"properties\":{\"prefix\":{\"type\":\"string\",\"pattern\":\"^[0-9a-z]{8}$\"},\"name\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"masked\":{\"type\":\"string\",\"pattern\":\"^eo_(live|test)_[0-9a-z]{8}_\\\\u2026$\"},\"environment\":{\"type\":\"string\",\"enum\":[\"live\",\"test\"]},\"scopes\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Scope\"}},\"maxSpendCentsPerDay\":{\"anyOf\":[{\"type\":\"integer\",\"minimum\":1},{\"type\":\"null\"}]},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"lastUsedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"revokedAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"key\":{\"type\":\"string\",\"pattern\":\"^eo_(live|test)_[0-9a-z]{8}_[0-9A-Za-z]{32,}$\"}},\"required\":[\"prefix\",\"name\",\"masked\",\"environment\",\"scopes\",\"maxSpendCentsPerDay\",\"createdAt\",\"lastUsedAt\",\"revokedAt\",\"key\"]},\"SourceSettings\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":128},\"defaultWebhookUrl\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"uri\"},{\"type\":\"null\"}]},\"contactEmail\":{\"type\":\"string\",\"format\":\"email\",\"pattern\":\"^(?!\\\\.)(?!.*\\\\.\\\\.)([A-Za-z0-9_'+\\\\-\\\\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\\\\-]*\\\\.)+[A-Za-z]{2,}$\"},\"refillFloorCents\":{\"anyOf\":[{\"type\":\"integer\",\"minimum\":0},{\"type\":\"null\"}]}},\"additionalProperties\":false},\"AuditEntry\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^aud_[0-9A-HJKMNP-TV-Z]{26}$\"},\"sourceId\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^src_[0-9A-HJKMNP-TV-Z]{26}$\"},{\"type\":\"null\"}]},\"actor\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"enum\":[\"member\",\"key\",\"operator\",\"system\",\"oauth\"]},\"id\":{\"type\":\"string\",\"minLength\":1},\"clientId\":{\"type\":\"string\"},\"clientName\":{\"type\":\"string\"}},\"required\":[\"kind\",\"id\"]},\"action\":{\"type\":\"string\",\"minLength\":1},\"target\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]},\"at\":{\"type\":\"string\",\"format\":\"date-time\"},\"details\":{\"anyOf\":[{\"type\":\"object\",\"propertyNames\":{\"type\":\"string\"},\"additionalProperties\":{}},{\"type\":\"null\"}]}},\"required\":[\"id\",\"sourceId\",\"actor\",\"action\",\"target\",\"at\",\"details\"]},\"AuditPage\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/AuditEntry\"}},\"nextCursor\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]}},\"required\":[\"items\",\"nextCursor\"]},\"WebhookEventType\":{\"type\":\"string\",\"enum\":[\"claim.accepted\",\"claim.decided\",\"claim.review_required\",\"claim.folded\",\"claim.unusable\",\"claim.failed\",\"claim.review_expired\",\"source.paused\",\"source.resumed\",\"payment.settled\",\"balance.low\"]},\"WebhookEndpoint\":{\"type\":\"object\",\"properties\":{\"endpointId\":{\"type\":\"string\",\"pattern\":\"^whe_[0-9A-HJKMNP-TV-Z]{26}$\"},\"url\":{\"type\":\"string\",\"format\":\"uri\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/WebhookEventType\"}},\"enabled\":{\"type\":\"boolean\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"}},\"required\":[\"endpointId\",\"url\",\"events\",\"enabled\",\"createdAt\"]},\"EndpointList\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/WebhookEndpoint\"}}},\"required\":[\"items\"]},\"CreateWebhookEndpointRequest\":{\"type\":\"object\",\"properties\":{\"url\":{\"type\":\"string\",\"format\":\"uri\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/WebhookEventType\"}}},\"required\":[\"url\",\"events\"],\"additionalProperties\":false},\"CreateWebhookEndpointResponse\":{\"type\":\"object\",\"properties\":{\"endpointId\":{\"type\":\"string\",\"pattern\":\"^whe_[0-9A-HJKMNP-TV-Z]{26}$\"},\"url\":{\"type\":\"string\",\"format\":\"uri\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/WebhookEventType\"}},\"enabled\":{\"type\":\"boolean\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"secret\":{\"type\":\"string\",\"pattern\":\"^whsec_[0-9A-Za-z]{32,}$\"}},\"required\":[\"endpointId\",\"url\",\"events\",\"enabled\",\"createdAt\",\"secret\"]},\"UpdateWebhookEndpointRequest\":{\"type\":\"object\",\"properties\":{\"url\":{\"type\":\"string\",\"format\":\"uri\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/WebhookEventType\"}},\"enabled\":{\"type\":\"boolean\"},\"rotateSecret\":{\"type\":\"boolean\",\"const\":true}},\"additionalProperties\":false},\"UpdateWebhookEndpointResponse\":{\"type\":\"object\",\"properties\":{\"endpointId\":{\"type\":\"string\",\"pattern\":\"^whe_[0-9A-HJKMNP-TV-Z]{26}$\"},\"url\":{\"type\":\"string\",\"format\":\"uri\"},\"events\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/WebhookEventType\"}},\"enabled\":{\"type\":\"boolean\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"secret\":{\"type\":\"string\",\"pattern\":\"^whsec_[0-9A-Za-z]{32,}$\"}},\"required\":[\"endpointId\",\"url\",\"events\",\"enabled\",\"createdAt\"]},\"WebhookDelivery\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^wh:evt_[0-9A-HJKMNP-TV-Z]{26}:(whe_[0-9A-HJKMNP-TV-Z]{26}|claim)$\"},\"eventId\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"$ref\":\"#/components/schemas/WebhookEventType\"},\"status\":{\"type\":\"string\",\"enum\":[\"pending\",\"delivered\",\"failed\",\"dead\"]},\"attempts\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":8},\"lastStatusCode\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"null\"}]},\"nextAttemptAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"}},\"required\":[\"id\",\"eventId\",\"type\",\"status\",\"attempts\",\"lastStatusCode\",\"nextAttemptAt\",\"createdAt\"]},\"DeliveryPage\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/WebhookDelivery\"}},\"nextCursor\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]}},\"required\":[\"items\",\"nextCursor\"]},\"WebhookDeliveryDetail\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^wh:evt_[0-9A-HJKMNP-TV-Z]{26}:(whe_[0-9A-HJKMNP-TV-Z]{26}|claim)$\"},\"eventId\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"$ref\":\"#/components/schemas/WebhookEventType\"},\"status\":{\"type\":\"string\",\"enum\":[\"pending\",\"delivered\",\"failed\",\"dead\"]},\"attempts\":{\"type\":\"integer\",\"minimum\":0,\"maximum\":8},\"lastStatusCode\":{\"anyOf\":[{\"type\":\"integer\"},{\"type\":\"null\"}]},\"nextAttemptAt\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"date-time\"},{\"type\":\"null\"}]},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"endpointId\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^whe_[0-9A-HJKMNP-TV-Z]{26}$\"},{\"type\":\"null\"}]},\"targetUrl\":{\"anyOf\":[{\"type\":\"string\",\"format\":\"uri\"},{\"type\":\"null\"}]},\"request\":{\"type\":\"object\",\"properties\":{\"body\":{\"anyOf\":[{},{\"type\":\"null\"}]}},\"required\":[\"body\"]},\"lastError\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]}},\"required\":[\"id\",\"eventId\",\"type\",\"status\",\"attempts\",\"lastStatusCode\",\"nextAttemptAt\",\"createdAt\",\"endpointId\",\"targetUrl\",\"request\",\"lastError\"]},\"Credits\":{\"type\":\"object\",\"properties\":{\"asset\":{\"type\":\"string\",\"const\":\"upay\"},\"balance\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"sendLimit\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},{\"type\":\"null\"}]},\"reserved\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"settled\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"paying\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"available\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"}},\"required\":[\"asset\",\"balance\",\"sendLimit\",\"reserved\",\"settled\",\"paying\",\"available\"]},\"SetReviewBillingRequest\":{\"type\":\"object\",\"properties\":{\"delegation\":{\"type\":\"string\",\"minLength\":1,\"maxLength\":16384}},\"required\":[\"delegation\"],\"additionalProperties\":false},\"ReviewBillingState\":{\"type\":\"string\",\"enum\":[\"active\",\"expired\",\"exhausted\",\"payer_not_owner\"]},\"PayerPausedReason\":{\"type\":\"string\",\"enum\":[\"payer-credits\",\"payer-delegation\"]},\"ReviewBilling\":{\"type\":\"object\",\"properties\":{\"sourceId\":{\"type\":\"string\",\"pattern\":\"^src_[0-9A-HJKMNP-TV-Z]{26}$\"},\"state\":{\"$ref\":\"#/components/schemas/ReviewBillingState\"},\"payer\":{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},\"delegationCid\":{\"type\":\"string\",\"minLength\":1},\"maxAmount\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"spent\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"remaining\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"expiresAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"credits\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/Credits\"},{\"type\":\"null\"}]},\"pricePerReview\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"protocolDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"},\"amount\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"amountCents\":{\"type\":\"integer\",\"minimum\":0}},\"required\":[\"protocolDid\",\"amount\",\"amountCents\"]}},\"pausedCollections\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"collectionId\":{\"type\":\"string\",\"pattern\":\"^[0-9]{1,20}$\"},\"reason\":{\"$ref\":\"#/components/schemas/PayerPausedReason\"},\"since\":{\"type\":\"string\",\"format\":\"date-time\"}},\"required\":[\"collectionId\",\"reason\",\"since\"]}},\"createdBy\":{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"updatedAt\":{\"type\":\"string\",\"format\":\"date-time\"}},\"required\":[\"sourceId\",\"state\",\"payer\",\"delegationCid\",\"maxAmount\",\"spent\",\"remaining\",\"expiresAt\",\"credits\",\"pricePerReview\",\"pausedCollections\",\"createdBy\",\"createdAt\",\"updatedAt\"]},\"ReviewBillingDeleted\":{\"type\":\"object\",\"properties\":{\"deleted\":{\"type\":\"boolean\"},\"message\":{\"type\":\"string\"}},\"required\":[\"deleted\",\"message\"]},\"Limits\":{\"type\":\"object\",\"properties\":{\"maxBodyBytes\":{\"type\":\"integer\"},\"maxUploadBytes\":{\"type\":\"integer\"},\"maxBatchClaims\":{\"type\":\"integer\"},\"maxWaitSeconds\":{\"type\":\"integer\"},\"maxConcurrentWaiters\":{\"type\":\"integer\"},\"maxPageLimit\":{\"type\":\"integer\"}},\"required\":[\"maxBodyBytes\",\"maxUploadBytes\",\"maxBatchClaims\",\"maxWaitSeconds\",\"maxConcurrentWaiters\",\"maxPageLimit\"]},\"Caller\":{\"oneOf\":[{\"$ref\":\"#/components/schemas/CallerKey\"},{\"$ref\":\"#/components/schemas/CallerMember\"},{\"$ref\":\"#/components/schemas/CallerController\"}],\"discriminator\":{\"propertyName\":\"kind\",\"mapping\":{\"key\":\"#/components/schemas/CallerKey\",\"member\":\"#/components/schemas/CallerMember\",\"controller\":\"#/components/schemas/CallerController\"}}},\"CallerKey\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"key\"},\"prefix\":{\"type\":\"string\",\"pattern\":\"^[0-9a-z]{8}$\"},\"scopes\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Scope\"}}},\"required\":[\"kind\",\"prefix\",\"scopes\"]},\"CallerMember\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"member\"},\"memberId\":{\"type\":\"string\",\"pattern\":\"^mem_[0-9A-HJKMNP-TV-Z]{26}$\"},\"did\":{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},\"role\":{\"$ref\":\"#/components/schemas/MemberRole\"},\"capabilities\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Capability\"}},\"protocols\":{\"anyOf\":[{\"type\":\"array\",\"items\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"}},{\"type\":\"null\"}]}},\"required\":[\"kind\",\"memberId\",\"did\",\"role\",\"capabilities\",\"protocols\"]},\"CallerController\":{\"type\":\"object\",\"properties\":{\"kind\":{\"type\":\"string\",\"const\":\"controller\"},\"did\":{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},\"capabilities\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Capability\"}}},\"required\":[\"kind\",\"did\",\"capabilities\"]},\"Me\":{\"type\":\"object\",\"properties\":{\"caller\":{\"$ref\":\"#/components/schemas/Caller\"},\"source\":{\"$ref\":\"#/components/schemas/Source\"},\"members\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Member\"}},\"keys\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/ApiKey\"}},\"credits\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/Credits\"},{\"type\":\"null\"}]},\"limits\":{\"$ref\":\"#/components/schemas/Limits\"},\"webhookEndpoints\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/WebhookEndpoint\"}},\"reviewBlocked\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/ReviewBlock\"},{\"type\":\"null\"}]}},\"required\":[\"caller\",\"source\",\"limits\",\"reviewBlocked\"]},\"SourcePage\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/Source\"}},\"nextCursor\":{\"anyOf\":[{\"type\":\"string\"},{\"type\":\"null\"}]}},\"required\":[\"items\",\"nextCursor\"]},\"PauseSourceRequest\":{\"type\":\"object\",\"properties\":{\"note\":{\"type\":\"string\",\"maxLength\":1024}},\"additionalProperties\":false},\"SetSourceProtocolsRequest\":{\"type\":\"object\",\"properties\":{\"protocols\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"protocolDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"}},\"required\":[\"protocolDid\"],\"additionalProperties\":false}}},\"required\":[\"protocols\"],\"additionalProperties\":false},\"SetBillingModeRequest\":{\"type\":\"object\",\"properties\":{\"billingMode\":{\"$ref\":\"#/components/schemas/BillingMode\"}},\"required\":[\"billingMode\"],\"additionalProperties\":false},\"FacilitatorDelegation\":{\"type\":\"object\",\"properties\":{\"delegation\":{\"type\":\"string\",\"minLength\":1},\"issuer\":{\"type\":\"string\",\"pattern\":\"^did:web:.*\"},\"audience\":{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},\"capabilities\":{\"minItems\":1,\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"with\":{\"type\":\"string\",\"const\":\"ixo:ixo-pay-facilitator\"},\"can\":{\"type\":\"string\",\"enum\":[\"operators/onboard\",\"operators/read\",\"operators/refund\",\"operators/evidence\"]}},\"required\":[\"with\",\"can\"]}},\"expiresAt\":{\"type\":\"string\",\"format\":\"date-time\"}},\"required\":[\"delegation\",\"issuer\",\"audience\",\"capabilities\",\"expiresAt\"]},\"DataExport\":{\"type\":\"object\",\"properties\":{\"url\":{\"type\":\"string\",\"format\":\"uri\"},\"expiresAt\":{\"type\":\"string\",\"format\":\"date-time\"}},\"required\":[\"url\",\"expiresAt\"]},\"LinkedCollection\":{\"type\":\"object\",\"properties\":{\"collectionId\":{\"type\":\"string\",\"pattern\":\"^[0-9]{1,20}$\"},\"protocolDid\":{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-zA-Z]+$\"},\"linkedBy\":{\"anyOf\":[{\"type\":\"string\",\"pattern\":\"^did:ixo:ixo1[02-9ac-hj-np-z]{38}$\"},{\"type\":\"string\",\"pattern\":\"^did:ixo:entity:[0-9a-f]{32}$\"}]},\"linkedAt\":{\"type\":\"string\",\"format\":\"date-time\"}},\"required\":[\"collectionId\",\"protocolDid\",\"linkedBy\",\"linkedAt\"]},\"LinkedCollectionList\":{\"type\":\"object\",\"properties\":{\"items\":{\"type\":\"array\",\"items\":{\"$ref\":\"#/components/schemas/LinkedCollection\"}}},\"required\":[\"items\"]},\"LinkCollectionRequest\":{\"type\":\"object\",\"properties\":{\"collectionId\":{\"type\":\"string\",\"pattern\":\"^[0-9]{1,20}$\"}},\"required\":[\"collectionId\"],\"additionalProperties\":false},\"SourceEventData\":{\"type\":\"object\",\"properties\":{\"sourceId\":{\"type\":\"string\",\"pattern\":\"^src_[0-9A-HJKMNP-TV-Z]{26}$\"},\"status\":{\"type\":\"string\",\"enum\":[\"active\",\"paused\"]},\"pausedReason\":{\"anyOf\":[{\"$ref\":\"#/components/schemas/SourcePausedReason\"},{\"type\":\"null\"}]},\"issues\":{\"type\":\"array\",\"items\":{\"type\":\"object\",\"properties\":{\"code\":{\"type\":\"string\"},\"message\":{\"type\":\"string\"},\"path\":{\"type\":\"string\"}},\"required\":[\"code\",\"message\",\"path\"]}}},\"required\":[\"sourceId\",\"status\",\"pausedReason\"]},\"PaymentEventData\":{\"type\":\"object\",\"properties\":{\"claimId\":{\"type\":\"string\",\"pattern\":\"^apc_([0-9a-f]{40}|[0-9A-HJKMNP-TV-Z]{26})$\"},\"settlementId\":{\"type\":\"string\",\"pattern\":\"^[0-9a-f]{64}$\"},\"scheme\":{\"type\":\"string\",\"enum\":[\"ixo-pay\",\"stripe-manual-capture\",\"exact\"]},\"amount\":{\"type\":\"string\",\"pattern\":\"^(0|[1-9][0-9]{0,77})$\"},\"asset\":{\"type\":\"string\",\"enum\":[\"upay\",\"usd\",\"usdc\"]},\"status\":{\"type\":\"string\",\"const\":\"settled\"}},\"required\":[\"claimId\",\"settlementId\",\"scheme\",\"amount\",\"asset\",\"status\"]},\"BalanceLowData\":{\"type\":\"object\",\"properties\":{\"sourceId\":{\"type\":\"string\",\"pattern\":\"^src_[0-9A-HJKMNP-TV-Z]{26}$\"},\"balanceCents\":{\"type\":\"integer\"},\"floorCents\":{\"type\":\"integer\",\"minimum\":0}},\"required\":[\"sourceId\",\"balanceCents\",\"floorCents\"]},\"WebhookEnvelope\":{\"oneOf\":[{\"$ref\":\"#/components/schemas/WebhookEnvelopeClaimAccepted\"},{\"$ref\":\"#/components/schemas/WebhookEnvelopeClaimDecided\"},{\"$ref\":\"#/components/schemas/WebhookEnvelopeClaimReviewRequired\"},{\"$ref\":\"#/components/schemas/WebhookEnvelopeClaimFolded\"},{\"$ref\":\"#/components/schemas/WebhookEnvelopeClaimUnusable\"},{\"$ref\":\"#/components/schemas/WebhookEnvelopeClaimFailed\"},{\"$ref\":\"#/components/schemas/WebhookEnvelopeClaimReviewExpired\"},{\"$ref\":\"#/components/schemas/WebhookEnvelopeSourcePaused\"},{\"$ref\":\"#/components/schemas/WebhookEnvelopeSourceResumed\"},{\"$ref\":\"#/components/schemas/WebhookEnvelopePaymentSettled\"},{\"$ref\":\"#/components/schemas/WebhookEnvelopeBalanceLow\"}],\"discriminator\":{\"propertyName\":\"type\",\"mapping\":{\"claim.accepted\":\"#/components/schemas/WebhookEnvelopeClaimAccepted\",\"claim.decided\":\"#/components/schemas/WebhookEnvelopeClaimDecided\",\"claim.review_required\":\"#/components/schemas/WebhookEnvelopeClaimReviewRequired\",\"claim.folded\":\"#/components/schemas/WebhookEnvelopeClaimFolded\",\"claim.unusable\":\"#/components/schemas/WebhookEnvelopeClaimUnusable\",\"claim.failed\":\"#/components/schemas/WebhookEnvelopeClaimFailed\",\"claim.review_expired\":\"#/components/schemas/WebhookEnvelopeClaimReviewExpired\",\"source.paused\":\"#/components/schemas/WebhookEnvelopeSourcePaused\",\"source.resumed\":\"#/components/schemas/WebhookEnvelopeSourceResumed\",\"payment.settled\":\"#/components/schemas/WebhookEnvelopePaymentSettled\",\"balance.low\":\"#/components/schemas/WebhookEnvelopeBalanceLow\"}}},\"WebhookEnvelopeClaimAccepted\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"type\":\"string\",\"const\":\"claim.accepted\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"apiVersion\":{\"type\":\"string\",\"const\":\"v1\"},\"data\":{\"$ref\":\"#/components/schemas/ClaimRecord\"}},\"required\":[\"id\",\"type\",\"createdAt\",\"apiVersion\",\"data\"]},\"WebhookEnvelopeClaimDecided\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"type\":\"string\",\"const\":\"claim.decided\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"apiVersion\":{\"type\":\"string\",\"const\":\"v1\"},\"data\":{\"$ref\":\"#/components/schemas/ClaimRecord\"}},\"required\":[\"id\",\"type\",\"createdAt\",\"apiVersion\",\"data\"]},\"WebhookEnvelopeClaimReviewRequired\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"type\":\"string\",\"const\":\"claim.review_required\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"apiVersion\":{\"type\":\"string\",\"const\":\"v1\"},\"data\":{\"$ref\":\"#/components/schemas/ClaimRecord\"}},\"required\":[\"id\",\"type\",\"createdAt\",\"apiVersion\",\"data\"]},\"WebhookEnvelopeClaimFolded\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"type\":\"string\",\"const\":\"claim.folded\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"apiVersion\":{\"type\":\"string\",\"const\":\"v1\"},\"data\":{\"$ref\":\"#/components/schemas/ClaimRecord\"}},\"required\":[\"id\",\"type\",\"createdAt\",\"apiVersion\",\"data\"]},\"WebhookEnvelopeClaimUnusable\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"type\":\"string\",\"const\":\"claim.unusable\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"apiVersion\":{\"type\":\"string\",\"const\":\"v1\"},\"data\":{\"$ref\":\"#/components/schemas/ClaimRecord\"}},\"required\":[\"id\",\"type\",\"createdAt\",\"apiVersion\",\"data\"]},\"WebhookEnvelopeClaimFailed\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"type\":\"string\",\"const\":\"claim.failed\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"apiVersion\":{\"type\":\"string\",\"const\":\"v1\"},\"data\":{\"$ref\":\"#/components/schemas/ClaimRecord\"}},\"required\":[\"id\",\"type\",\"createdAt\",\"apiVersion\",\"data\"]},\"WebhookEnvelopeClaimReviewExpired\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"type\":\"string\",\"const\":\"claim.review_expired\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"apiVersion\":{\"type\":\"string\",\"const\":\"v1\"},\"data\":{\"$ref\":\"#/components/schemas/ClaimRecord\"}},\"required\":[\"id\",\"type\",\"createdAt\",\"apiVersion\",\"data\"]},\"WebhookEnvelopeSourcePaused\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"type\":\"string\",\"const\":\"source.paused\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"apiVersion\":{\"type\":\"string\",\"const\":\"v1\"},\"data\":{\"$ref\":\"#/components/schemas/SourceEventData\"}},\"required\":[\"id\",\"type\",\"createdAt\",\"apiVersion\",\"data\"]},\"WebhookEnvelopeSourceResumed\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"type\":\"string\",\"const\":\"source.resumed\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"apiVersion\":{\"type\":\"string\",\"const\":\"v1\"},\"data\":{\"$ref\":\"#/components/schemas/SourceEventData\"}},\"required\":[\"id\",\"type\",\"createdAt\",\"apiVersion\",\"data\"]},\"WebhookEnvelopePaymentSettled\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"type\":\"string\",\"const\":\"payment.settled\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"apiVersion\":{\"type\":\"string\",\"const\":\"v1\"},\"data\":{\"$ref\":\"#/components/schemas/PaymentEventData\"}},\"required\":[\"id\",\"type\",\"createdAt\",\"apiVersion\",\"data\"]},\"WebhookEnvelopeBalanceLow\":{\"type\":\"object\",\"properties\":{\"id\":{\"type\":\"string\",\"pattern\":\"^evt_[0-9A-HJKMNP-TV-Z]{26}$\"},\"type\":{\"type\":\"string\",\"const\":\"balance.low\"},\"createdAt\":{\"type\":\"string\",\"format\":\"date-time\"},\"apiVersion\":{\"type\":\"string\",\"const\":\"v1\"},\"data\":{\"$ref\":\"#/components/schemas/BalanceLowData\"}},\"required\":[\"id\",\"type\",\"createdAt\",\"apiVersion\",\"data\"]}}}}");
7
+ //# sourceMappingURL=openapi.gen.js.map