openapi: 3.2.0 info: contact: email: nicholas@csoai.org name: CSOAI Ltd url: https://councilof.ai/ description: 'Verification is free forever. Agents pay per artefact: issuance, assembly, cadence — never a grade. 22 axes measured · 14 model fleets · 3 public leader scores · 8 fact runs · TIE is TIE · not a certificate. Operations with security [] are free and unauthenticated. Operations with x-payment-info are x402 doors; an amount appears only inside a door''s 402 challenge (documented as each door''s 402 example).' license: name: CC-BY-4.0 url: https://creativecommons.org/licenses/by/4.0/ title: Council of AI — Public Assembly API version: 0.2+820f7aa0ad7a x-guidance: 'Free board: GET /api/gspc — quote totals.lid verbatim, never compose a count. Paid doors are the operations carrying x-payment-info: GET without payment answers HTTP 402 with the x402 v2 challenge (accepts[0]: scheme exact, network eip155:8453, USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, payTo 0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31); pay it and retry with the X-PAYMENT header. Required query parameters carry an example that reaches the 402. Free previews are named per door under x-csoai.free_preview. Catalog: https://councilof.ai/.well-known/x402.json and https://councilof.ai/api/x402. Verify is free: https://councilof.ai/gspc-verify. Offer & Receipt emission is conditional: a 402 carries server-signed offers only when the Pages signing key is available; a settled 200 carries a signed receipt only when settlement exposes the required payer and transaction evidence and that key is available. The extension uses JWS/EdDSA, kid did:web:csoai.org#board-attestation-1, published at https://csoai.org/.well-known/did.json. Check either without trusting this document: POST it to /api/receipts/verify, or run scripts/verify_receipt.py, which reads did.json and contacts nobody. 22 axes measured · 14 model fleets · 3 public leader scores · 8 fact runs · TIE is TIE · not a certificate.' servers: - url: https://councilof.ai tags: - description: sells assembly of already-public evidence name: Assembly paths: /api/art50/marking-evidence: get: description: A signed card recording whether a machine-readable mark was detected in one named output, by named methods, at one time. Detection, never a conformity opinion. preview=1 is free unsigned. Paid signed card requires url (HTTP 402). operationId: x402_art50_marking_evidence parameters: - description: Public URL of the generative output to measure (≤ 20 MiB); or POST the bytes example: https://councilof.ai/og-image.png in: query name: url required: true schema: const: https://councilof.ai/og-image.png type: string - description: 1 = free unsigned measurement in: query name: preview required: false schema: type: string responses: '200': content: application/json: schema: description: A signed card recording whether a machine-readable mark was detected in one named output, by named methods, at one time. Detection, never a conformity opinion. type: object description: A signed card recording whether a machine-readable mark was detected in one named output, by named methods, at one time. Detection, never a conformity opinion. '402': content: application/json: example: accepts: - amount: '10000' asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' csoai_pricing: campaign_id: csoai-launch-30d-20260911 ends_at: '2026-10-11T00:00:00Z' fresh_compute_excluded: true normal_amount_atomic: '25000000' offered_amount_atomic: '10000' pricing_basis: PROMO_EXISTING_DATA product_id: csoai.product.art50_marking_evidence sku_id: art50_marking_evidence starts_at: '2026-09-11T00:00:00Z' tier: pack description: A signed card recording whether a machine-readable mark was detected in one named output, by named methods, at one time. Detection, never a conformity opinion. extra: decimals: 6 name: USD Coin symbol: USDC version: '2' maxAmountRequired: '10000' maxTimeoutSeconds: 300 mimeType: application/json network: eip155:8453 payTo: '0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31' resource: https://councilof.ai/api/art50/marking-evidence scheme: exact error: Payment required extensions: bazaar: info: input: method: GET queryParams: url: https://councilof.ai/og-image.png type: http output: example: payload: checked: - method: c2pa.manifest-store result: NOT_DETECTED kind: csoai.art50.marking-evidence/0.1 statements: - marking not detected by method c2pa.manifest-store schema: https://councilof.ai/schema/card-v0.json sig_ed25519: surface: art50.marking-evidence unmeasured: - root_inclusion - watermark.synthid type: json schema: $schema: https://json-schema.org/draft/2020-12/schema properties: input: additionalProperties: false properties: method: enum: - GET - HEAD - DELETE type: string queryParams: properties: preview: description: 1 = free unsigned measurement type: string url: description: Public URL of the generative output to measure (≤ 20 MiB); or POST the bytes type: string required: - url type: object type: const: http type: string required: - type - method type: object output: properties: example: type: object type: type: string required: - type type: object required: - input type: object offer-receipt: info: offers: - acceptIndex: 0 format: jws signature: eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6Y3NvYWkub3JnI2JvYXJkLWF0dGVzdGF0aW9uLTEifQ.eyJhbW91bnQiOiIxMDAwMCIsImFzc2V0IjoiMHg4MzM1ODlmQ0Q2ZURiNkUwOGY0YzdDMzJENGY3MWI1NGJkQTAyOTEzIiwibmV0d29yayI6ImVpcDE1NTo4NDUzIiwicGF5VG8iOiIweDIxMjY4NjQwNEE3RDFFMWZEODhGMzVlRDYyMDBjM2FGN0E3OGFlMzEiLCJyZXNvdXJjZVVybCI6Imh0dHBzOi8vY291bmNpbG9mLmFpL2FwaS9hcnQ1MC9tYXJraW5nLWV2aWRlbmNlIiwic2NoZW1lIjoiZXhhY3QiLCJ2YWxpZFVudGlsIjoxNzg5MzE1MTc4LCJ2ZXJzaW9uIjoxfQ.JNBclDT1djyPZmETtHdWB5r2IUf-epi_l7VdIfHWXraeaITe-rT0R6s5sTbYZXYMcf1MrWMeydhzu8y6Wa2cAQ schema: $schema: https://json-schema.org/draft/2020-12/schema properties: offers: items: properties: acceptIndex: type: integer format: const: jws type: string signature: description: JWS compact serialization containing the offer payload type: string required: - format - signature type: object type: array required: - offers type: object resource: description: A signed card recording whether a machine-readable mark was detected in one named output, by named methods, at one time. Detection, never a conformity opinion. mimeType: application/json serviceName: CSOAI Article 50 marking evidenc tags: - article-50 - c2pa - marking - measurement - x402 url: https://councilof.ai/api/art50/marking-evidence x402Version: 2 schema: $ref: '#/components/schemas/X402PaymentRequired' description: Payment required — the x402 v2 challenge. The same JSON is base64-encoded in the PAYMENT-REQUIRED response header. Pay accepts[0] (scheme exact, network eip155:8453, USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, payTo 0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31; amount in atomic units) and retry the same request with the X-PAYMENT header. Verification of the artefact stays free. headers: PAYMENT-REQUIRED: description: base64(JSON) of this challenge body schema: type: string summary: CSOAI Article 50 marking evidenc tags: - Assembly x-csoai: challenge: amount_source: captured live 402 (challenges/art50_marking_evidence.json) captured: true payment_required_header_bytes: 6924 door: https://councilof.ai/api/art50/marking-evidence?url=https://councilof.ai/og-image.png free_preview: https://councilof.ai/api/art50/marking-evidence?url=https://councilof.ai/og-image.png&preview=1 paid_for: assembly x-payment-info: protocols: - x402 /api/eunomia-data: get: description: A signed JSON feed of enforcement and measurement artefacts already on the public root. Data only — no scores, no ranking. Bare path (no query) is the free preview tier (HTTP 200). Paid signed feed requires feed=1 (HTTP 402). operationId: x402_eunomia_data parameters: - description: Paid-tier gate. Must be the string 1 to request the signed feed (HTTP 402). Omit for free preview on the bare path (HTTP 200). example: '1' in: query name: feed required: true schema: const: '1' type: string responses: '200': content: application/json: schema: description: A signed JSON feed of enforcement and measurement artefacts already on the public root. Data only — no scores, no ranking. type: object description: A signed JSON feed of enforcement and measurement artefacts already on the public root. Data only — no scores, no ranking. '402': content: application/json: example: accepts: - amount: '10000' asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' csoai_pricing: campaign_id: csoai-launch-30d-20260911 ends_at: '2026-10-11T00:00:00Z' fresh_compute_excluded: true normal_amount_atomic: '20000' offered_amount_atomic: '10000' pricing_basis: PROMO_EXISTING_DATA product_id: csoai.product.issuance sku_id: issuance starts_at: '2026-09-11T00:00:00Z' tier: reserve description: A signed JSON feed of enforcement and measurement artefacts already on the public root. Data only — no scores, no ranking. extra: decimals: 6 name: USD Coin symbol: USDC version: '2' maxAmountRequired: '10000' maxTimeoutSeconds: 300 mimeType: application/json network: eip155:8453 payTo: '0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31' resource: https://councilof.ai/api/eunomia-data?feed=1 scheme: exact error: Payment required extensions: bazaar: info: input: method: GET queryParams: feed: '1' type: http output: example: blocks: card_index: {} first_fine_watch: {} root: {} signals: {} kind: feed schema: csoai.eunomia-data/0.2 type: json schema: $schema: https://json-schema.org/draft/2020-12/schema properties: input: additionalProperties: false properties: method: enum: - GET - HEAD - DELETE type: string queryParams: properties: feed: const: '1' type: string required: - feed type: object type: const: http type: string required: - type - method type: object output: properties: example: type: object type: type: string required: - type type: object required: - input type: object offer-receipt: info: offers: - acceptIndex: 0 format: jws signature: eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6Y3NvYWkub3JnI2JvYXJkLWF0dGVzdGF0aW9uLTEifQ.eyJhbW91bnQiOiIxMDAwMCIsImFzc2V0IjoiMHg4MzM1ODlmQ0Q2ZURiNkUwOGY0YzdDMzJENGY3MWI1NGJkQTAyOTEzIiwibmV0d29yayI6ImVpcDE1NTo4NDUzIiwicGF5VG8iOiIweDIxMjY4NjQwNEE3RDFFMWZEODhGMzVlRDYyMDBjM2FGN0E3OGFlMzEiLCJyZXNvdXJjZVVybCI6Imh0dHBzOi8vY291bmNpbG9mLmFpL2FwaS9ldW5vbWlhLWRhdGEiLCJzY2hlbWUiOiJleGFjdCIsInZhbGlkVW50aWwiOjE3ODkzMTUxNzgsInZlcnNpb24iOjF9.RBiS9ieHUd4yCGlZJKTVHusAxj_n1fbHjwfNeGBKi4u36Kwznu-CyHfLRXvJWl4fT40V-JFOcKvcPHUiDWaDCA schema: $schema: https://json-schema.org/draft/2020-12/schema properties: offers: items: properties: acceptIndex: type: integer format: const: jws type: string signature: description: JWS compact serialization containing the offer payload type: string required: - format - signature type: object type: array required: - offers type: object resource: description: A signed JSON feed of enforcement and measurement artefacts already on the public root. Data only — no scores, no ranking. mimeType: application/json serviceName: CSOAI Data Feed tags: - data - feed - enforcement - signed - x402 url: https://councilof.ai/api/eunomia-data?feed=1 x402Version: 2 schema: $ref: '#/components/schemas/X402PaymentRequired' description: Payment required — the x402 v2 challenge. The same JSON is base64-encoded in the PAYMENT-REQUIRED response header. Pay accepts[0] (scheme exact, network eip155:8453, USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, payTo 0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31; amount in atomic units) and retry the same request with the X-PAYMENT header. Verification of the artefact stays free. headers: PAYMENT-REQUIRED: description: base64(JSON) of this challenge body schema: type: string summary: Signed data feed (assembly + cadence) tags: - Assembly x-csoai: challenge: amount_source: captured live 402 (challenges/eunomia_data.json) captured: true payment_required_header_bytes: 6924 door: https://councilof.ai/api/eunomia-data?feed=1 free_preview: https://councilof.ai/api/eunomia-data never: - scores as a product - a ranking - a rating paid_for: assembly tier: data_feed x-payment-info: protocols: - x402 /api/evidence-bundle: get: description: An OSCAL 1.1.0 assessment-results bundle of already-signed CSOAI cards, mapped to EU-AI-ACT-50. Not a conformity determination. Preview = obligation(+subject) without bundle=1. Paid tier requires obligation + bundle=1 (HTTP 402). Incomplete bundle alone stays HTTP 400. operationId: x402_evidence_bundle parameters: - description: Obligation the evidence bundle maps to (required with bundle=1 for the paid tier). Incomplete probes (bundle alone) stay HTTP 400. example: article-50 in: query name: obligation required: true schema: const: article-50 enum: - article-50 - article-53 - dora - cra type: string - description: Paid-tier gate. Must be the string 1 together with the other required params to request the paid artefact (HTTP 402). Without bundle=1 the door stays on free preview / validation. example: '1' in: query name: bundle required: true schema: const: '1' type: string - description: Subject the cards must name (model id / instrument / vendor) in: query name: subject required: false schema: type: string responses: '200': content: application/json: schema: description: An OSCAL 1.1.0 assessment-results bundle of already-signed CSOAI cards, mapped to one named obligation. Not a conformity determination. type: object description: An OSCAL 1.1.0 assessment-results bundle of already-signed CSOAI cards, mapped to one named obligation. Not a conformity determination. '402': content: application/json: example: accepts: - amount: '10000' asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' csoai_pricing: campaign_id: csoai-launch-30d-20260911 ends_at: '2026-10-11T00:00:00Z' fresh_compute_excluded: true normal_amount_atomic: '250000000' offered_amount_atomic: '10000' pricing_basis: PROMO_EXISTING_DATA product_id: csoai.product.evidence_bundle sku_id: evidence_bundle starts_at: '2026-09-11T00:00:00Z' tier: bundle description: An OSCAL 1.1.0 assessment-results bundle of already-signed CSOAI cards, mapped to EU-AI-ACT-50. Not a conformity determination. extra: decimals: 6 name: USD Coin symbol: USDC version: '2' maxAmountRequired: '10000' maxTimeoutSeconds: 300 mimeType: application/json network: eip155:8453 payTo: '0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31' resource: https://councilof.ai/api/evidence-bundle?obligation=article-50&bundle=1 scheme: exact error: Payment required extensions: bazaar: info: input: method: GET queryParams: bundle: '1' obligation: article-50 type: http output: example: cards: {} kind: bundle manifest_card: surface: evidence.bundle oscal: assessment-results: {} schema: csoai.evidence-bundle/0.1 type: json schema: $schema: https://json-schema.org/draft/2020-12/schema properties: input: additionalProperties: false properties: method: enum: - GET - HEAD - DELETE type: string queryParams: properties: bundle: const: '1' type: string obligation: enum: - article-50 - article-53 - dora - cra type: string subject: description: Subject the cards must name (model id / instrument / vendor) type: string required: - obligation - bundle type: object type: const: http type: string required: - type - method type: object output: properties: example: type: object type: type: string required: - type type: object required: - input type: object offer-receipt: info: offers: - acceptIndex: 0 format: jws signature: eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6Y3NvYWkub3JnI2JvYXJkLWF0dGVzdGF0aW9uLTEifQ.eyJhbW91bnQiOiIxMDAwMCIsImFzc2V0IjoiMHg4MzM1ODlmQ0Q2ZURiNkUwOGY0YzdDMzJENGY3MWI1NGJkQTAyOTEzIiwibmV0d29yayI6ImVpcDE1NTo4NDUzIiwicGF5VG8iOiIweDIxMjY4NjQwNEE3RDFFMWZEODhGMzVlRDYyMDBjM2FGN0E3OGFlMzEiLCJyZXNvdXJjZVVybCI6Imh0dHBzOi8vY291bmNpbG9mLmFpL2FwaS9ldmlkZW5jZS1idW5kbGUiLCJzY2hlbWUiOiJleGFjdCIsInZhbGlkVW50aWwiOjE3ODkzMTUxNzgsInZlcnNpb24iOjF9.Eswe84kz0J16Z3l9E-crNBXktVUvx-ECBWTHn76Ben0hdjMMkWwjp6yiLmSBV_K2SZdOVsrhq_JRuMVkbry0Aw schema: $schema: https://json-schema.org/draft/2020-12/schema properties: offers: items: properties: acceptIndex: type: integer format: const: jws type: string signature: description: JWS compact serialization containing the offer payload type: string required: - format - signature type: object type: array required: - offers type: object resource: description: An OSCAL 1.1.0 assessment-results bundle of already-signed CSOAI cards, mapped to EU-AI-ACT-50. Not a conformity determination. mimeType: application/json serviceName: CSOAI Evidence Bundle tags: - evidence - oscal - eu-ai-act - dora - cra url: https://councilof.ai/api/evidence-bundle?obligation=article-50&bundle=1 x402Version: 2 schema: $ref: '#/components/schemas/X402PaymentRequired' description: Payment required — the x402 v2 challenge. The same JSON is base64-encoded in the PAYMENT-REQUIRED response header. Pay accepts[0] (scheme exact, network eip155:8453, USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, payTo 0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31; amount in atomic units) and retry the same request with the X-PAYMENT header. Verification of the artefact stays free. headers: PAYMENT-REQUIRED: description: base64(JSON) of this challenge body schema: type: string summary: Evidence bundle mapped to an obligation tags: - Assembly x-csoai: challenge: amount_source: captured live 402 (challenges/evidence_bundle.json) captured: true payment_required_header_bytes: 6912 door: https://councilof.ai/api/evidence-bundle?obligation=article-50&bundle=1 free_preview: https://councilof.ai/api/evidence-bundle?obligation=&subject= never: - a conformity determination - satisfied/not-satisfied findings - a certificate paid_for: assembly tier: evidence_bundle x-payment-info: protocols: - x402 /api/feeds/provider-diff: get: description: Every hash-only provider-document diff leaf to date, each with its inclusion proof to the signed root. Hashes only — no page content, no verdict. Bare path is free recent diffs (HTTP 200). Paid historical batch requires history=1 (HTTP 402). operationId: x402_feeds_provider_diff parameters: - description: Paid-tier gate. Must be the string 1 to request the signed historical batch (HTTP 402). Omit for free recent diffs on the bare path (HTTP 200). Optional since narrows the window. example: '1' in: query name: history required: true schema: const: '1' type: string - description: ISO-8601 instant; return only diffs newer than this in: query name: since required: false schema: type: string responses: '200': content: application/json: schema: description: Every hash-only provider-document diff leaf to date, each with its inclusion proof to the signed root. Hashes only — no page content, no verdict. type: object description: Every hash-only provider-document diff leaf to date, each with its inclusion proof to the signed root. Hashes only — no page content, no verdict. '402': content: application/json: example: accepts: - amount: '10000' asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' csoai_pricing: campaign_id: csoai-launch-30d-20260911 ends_at: '2026-10-11T00:00:00Z' fresh_compute_excluded: true normal_amount_atomic: '25000000' offered_amount_atomic: '10000' pricing_basis: PROMO_EXISTING_DATA product_id: csoai.product.provider_diff_feed sku_id: provider_diff_feed starts_at: '2026-09-11T00:00:00Z' tier: history_batch description: Every hash-only provider-document diff leaf to date, each with its inclusion proof to the signed root. Hashes only — no page content, no verdict. extra: decimals: 6 name: USD Coin symbol: USDC version: '2' maxAmountRequired: '10000' maxTimeoutSeconds: 300 mimeType: application/json network: eip155:8453 payTo: '0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31' resource: https://councilof.ai/api/feeds/provider-diff?history=1 scheme: exact error: Payment required extensions: bazaar: info: input: method: GET queryParams: history: '1' type: http output: example: diffs: [] kind: history leaves: {} root: {} schema: csoai.feeds.provider-diff/0.1 type: json schema: $schema: https://json-schema.org/draft/2020-12/schema properties: input: additionalProperties: false properties: method: enum: - GET - HEAD - DELETE type: string queryParams: properties: history: const: '1' type: string since: description: ISO-8601 instant; return only diffs newer than this type: string required: - history type: object type: const: http type: string required: - type - method type: object output: properties: example: type: object type: type: string required: - type type: object required: - input type: object offer-receipt: info: offers: - acceptIndex: 0 format: jws signature: eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6Y3NvYWkub3JnI2JvYXJkLWF0dGVzdGF0aW9uLTEifQ.eyJhbW91bnQiOiIxMDAwMCIsImFzc2V0IjoiMHg4MzM1ODlmQ0Q2ZURiNkUwOGY0YzdDMzJENGY3MWI1NGJkQTAyOTEzIiwibmV0d29yayI6ImVpcDE1NTo4NDUzIiwicGF5VG8iOiIweDIxMjY4NjQwNEE3RDFFMWZEODhGMzVlRDYyMDBjM2FGN0E3OGFlMzEiLCJyZXNvdXJjZVVybCI6Imh0dHBzOi8vY291bmNpbG9mLmFpL2FwaS9mZWVkcy9wcm92aWRlci1kaWZmIiwic2NoZW1lIjoiZXhhY3QiLCJ2YWxpZFVudGlsIjoxNzg5MzE1MTc4LCJ2ZXJzaW9uIjoxfQ.71LjmG10AJNho_I6LtCfr7ucJDvmdObUU_FxF1n5vW4MIIUFyD_KLt15LKszbBmawvG-A8IT4a7gO7JhE36sAg schema: $schema: https://json-schema.org/draft/2020-12/schema properties: offers: items: properties: acceptIndex: type: integer format: const: jws type: string signature: description: JWS compact serialization containing the offer payload type: string required: - format - signature type: object type: array required: - offers type: object resource: description: Every hash-only provider-document diff leaf to date, each with its inclusion proof to the signed root. Hashes only — no page content, no verdict. mimeType: application/json serviceName: CSOAI Provider Diff Feed tags: - diff - terms - model-card - article-50 - x402 url: https://councilof.ai/api/feeds/provider-diff?history=1 x402Version: 2 schema: $ref: '#/components/schemas/X402PaymentRequired' description: Payment required — the x402 v2 challenge. The same JSON is base64-encoded in the PAYMENT-REQUIRED response header. Pay accepts[0] (scheme exact, network eip155:8453, USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, payTo 0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31; amount in atomic units) and retry the same request with the X-PAYMENT header. Verification of the artefact stays free. headers: PAYMENT-REQUIRED: description: base64(JSON) of this challenge body schema: type: string summary: Provider document diff feed (signed historical batch / bespoke partner feed) tags: - Assembly x-csoai: challenge: amount_source: captured live 402 (challenges/feeds_provider_diff.json) captured: true payment_required_header_bytes: 6388 door: https://councilof.ai/api/feeds/provider-diff?history=1 free_preview: https://councilof.ai/api/feeds/provider-diff never: - a verdict on any change - the content of any page (never captured) - a grade paid_for: assembly tier: provider_diff_feed x-payment-info: protocols: - x402 /api/proof: get: description: Inclusion proof bundle for leaves available in the last published Merkle root, with leaf hashes, indexes, proof paths, the Merkle root and signed card count. Not a grade. Bare path is validation (HTTP 400 naming sha or bundle). Free inclusion via optional sha. Paid root bundle when bundle=1 (HTTP 402). operationId: x402_proof parameters: - description: Must be 1 to request the paid proof bundle example: '1' in: query name: bundle required: true schema: const: '1' type: string - description: Free inclusion proof for one known leaf (64-hex). Omit; use bundle=1 for the paid root bundle. in: query name: sha required: false schema: pattern: ^[0-9a-f]{64}$ type: string responses: '200': content: application/json: schema: description: Inclusion proof bundle for leaves available in the last published Merkle root, with leaf hashes, indexes, proof paths, the Merkle root and signed card count. Not a grade. type: object description: Inclusion proof bundle for leaves available in the last published Merkle root, with leaf hashes, indexes, proof paths, the Merkle root and signed card count. Not a grade. '402': content: application/json: example: accepts: - amount: '10000' asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' csoai_pricing: campaign_id: csoai-launch-30d-20260911 ends_at: '2026-10-11T00:00:00Z' fresh_compute_excluded: true normal_amount_atomic: '20000' offered_amount_atomic: '10000' pricing_basis: PROMO_EXISTING_DATA product_id: csoai.product.issuance sku_id: issuance starts_at: '2026-09-11T00:00:00Z' tier: reserve description: Inclusion proof bundle for leaves available in the last published Merkle root, with leaf hashes, indexes, proof paths, the Merkle root and signed card count. Not a grade. extra: decimals: 6 name: USD Coin symbol: USDC version: '2' maxAmountRequired: '10000' maxTimeoutSeconds: 300 mimeType: application/json network: eip155:8453 payTo: '0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31' resource: https://councilof.ai/api/proof?bundle=1 scheme: exact error: Payment required extensions: bazaar: info: input: method: GET queryParams: bundle: '1' type: http output: example: kind: bundle merkle_root: n: 0 note: Paid bundle of inclusion proofs. Not a grade. proofs: [] schema: csoai.public-root-proof/0.1 type: json schema: $schema: https://json-schema.org/draft/2020-12/schema properties: input: additionalProperties: false properties: method: enum: - GET - HEAD - DELETE type: string queryParams: properties: bundle: const: '1' description: Must be 1 to request the paid proof bundle type: string required: - bundle type: object type: const: http type: string required: - type - method type: object output: properties: example: type: object type: type: string required: - type type: object required: - input type: object offer-receipt: info: offers: - acceptIndex: 0 format: jws signature: eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6Y3NvYWkub3JnI2JvYXJkLWF0dGVzdGF0aW9uLTEifQ.eyJhbW91bnQiOiIxMDAwMCIsImFzc2V0IjoiMHg4MzM1ODlmQ0Q2ZURiNkUwOGY0YzdDMzJENGY3MWI1NGJkQTAyOTEzIiwibmV0d29yayI6ImVpcDE1NTo4NDUzIiwicGF5VG8iOiIweDIxMjY4NjQwNEE3RDFFMWZEODhGMzVlRDYyMDBjM2FGN0E3OGFlMzEiLCJyZXNvdXJjZVVybCI6Imh0dHBzOi8vY291bmNpbG9mLmFpL2FwaS9wcm9vZiIsInNjaGVtZSI6ImV4YWN0IiwidmFsaWRVbnRpbCI6MTc4OTMxNTE3OCwidmVyc2lvbiI6MX0.QSUbgKFAV5ThdBPFtm6gUG2SP8nVIem_IW79EllNBH0VdyqJqCdhNY6iKCiX80Wp0gT1JN8sKkKHr2Un6V0OCQ schema: $schema: https://json-schema.org/draft/2020-12/schema properties: offers: items: properties: acceptIndex: type: integer format: const: jws type: string signature: description: JWS compact serialization containing the offer payload type: string required: - format - signature type: object type: array required: - offers type: object resource: description: Inclusion proof bundle for leaves available in the last published Merkle root, with leaf hashes, indexes, proof paths, the Merkle root and signed card count. Not a grade. mimeType: application/json serviceName: CSOAI Proof Bundle tags: - proof - merkle - measurement - attestation url: https://councilof.ai/api/proof?bundle=1 x402Version: 2 schema: $ref: '#/components/schemas/X402PaymentRequired' description: Payment required — the x402 v2 challenge. The same JSON is base64-encoded in the PAYMENT-REQUIRED response header. Pay accepts[0] (scheme exact, network eip155:8453, USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, payTo 0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31; amount in atomic units) and retry the same request with the X-PAYMENT header. Verification of the artefact stays free. headers: PAYMENT-REQUIRED: description: base64(JSON) of this challenge body schema: type: string summary: CSOAI Proof Bundle tags: - Assembly x-csoai: challenge: amount_source: captured live 402 (challenges/proof.json) captured: true payment_required_header_bytes: 6416 door: https://councilof.ai/api/proof?bundle=1 free_forever_on_this_path: - https://councilof.ai/api/proof?sha=<64-hex> paid_for: assembly x-payment-info: protocols: - x402 /api/receipts/batch: get: description: Historical measurement-card batch from published roots for a requested time window, capped at 200 leaves, with inclusion paths and carrying roots. Not payment or settlement receipts. preview=1 is free digest. Paid leaves require from (HTTP 402). operationId: x402_receipts_batch parameters: - description: Window start (ISO-8601). Required. example: '2026-01-01T00:00:00Z' in: query name: from required: true schema: const: '2026-01-01T00:00:00Z' format: date-time type: string - description: 'Free: count, span and the sha256 of the batch bytes, without the leaves' in: query name: preview required: false schema: const: '1' type: string - description: Window end (ISO-8601). Defaults to now. example: '2026-09-13T15:44:39Z' in: query name: to required: false schema: format: date-time type: string responses: '200': content: application/json: schema: description: Historical measurement-card batch from published roots for a requested time window, capped at 200 leaves, with inclusion paths and carrying roots. Not payment or settlement receipts. type: object description: Historical measurement-card batch from published roots for a requested time window, capped at 200 leaves, with inclusion paths and carrying roots. Not payment or settlement receipts. '402': content: application/json: example: accepts: - amount: '10000' asset: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' csoai_pricing: campaign_id: csoai-launch-30d-20260911 ends_at: '2026-10-11T00:00:00Z' fresh_compute_excluded: true normal_amount_atomic: '100000' offered_amount_atomic: '10000' pricing_basis: PROMO_EXISTING_DATA product_id: csoai.product.receipts_batch sku_id: receipts_batch starts_at: '2026-09-11T00:00:00Z' tier: per_batch description: Historical measurement-card batch from published roots for a requested time window, capped at 200 leaves, with inclusion paths and carrying roots. Not payment or settlement receipts. extra: decimals: 6 name: USD Coin symbol: USDC version: '2' maxAmountRequired: '10000' maxTimeoutSeconds: 300 mimeType: application/json network: eip155:8453 payTo: '0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31' resource: https://councilof.ai/api/receipts/batch?from=2026-01-01T00%3A00%3A00Z&to=2026-09-13T15%3A44%3A39Z scheme: exact error: Payment required extensions: bazaar: info: input: method: GET queryParams: from: '2026-01-01T00:00:00Z' to: '2026-09-13T15:44:39Z' type: http output: example: batch: cap: 200 count: 0 items: [] roots: [] window: from: to: batch_sha256: <64-hex> kind: batch manifest_card: sig_ed25519: surface: receipts.batch schema: csoai.receipts.batch/0.1 type: json schema: $schema: https://json-schema.org/draft/2020-12/schema properties: input: additionalProperties: false properties: method: enum: - GET - HEAD - DELETE type: string queryParams: properties: from: description: Window start (ISO-8601). Required. format: date-time type: string preview: const: '1' description: 'Free: count, span and the sha256 of the batch bytes, without the leaves' type: string to: description: Window end (ISO-8601). Defaults to now. format: date-time type: string required: - from type: object type: const: http type: string required: - type - method type: object output: properties: example: type: object type: type: string required: - type type: object required: - input type: object offer-receipt: info: offers: - acceptIndex: 0 format: jws signature: eyJhbGciOiJFZERTQSIsImtpZCI6ImRpZDp3ZWI6Y3NvYWkub3JnI2JvYXJkLWF0dGVzdGF0aW9uLTEifQ.eyJhbW91bnQiOiIxMDAwMCIsImFzc2V0IjoiMHg4MzM1ODlmQ0Q2ZURiNkUwOGY0YzdDMzJENGY3MWI1NGJkQTAyOTEzIiwibmV0d29yayI6ImVpcDE1NTo4NDUzIiwicGF5VG8iOiIweDIxMjY4NjQwNEE3RDFFMWZEODhGMzVlRDYyMDBjM2FGN0E3OGFlMzEiLCJyZXNvdXJjZVVybCI6Imh0dHBzOi8vY291bmNpbG9mLmFpL2FwaS9yZWNlaXB0cy9iYXRjaCIsInNjaGVtZSI6ImV4YWN0IiwidmFsaWRVbnRpbCI6MTc4OTMxNTE3OSwidmVyc2lvbiI6MX0.6yF463Z2mGZP3jfMAMkiLG3-r5GmW19hWW-E37uWPDPSZzAa0fUO5vOkvUlDB2S_BGCtDFv5jGawrjUcFWT4Cw schema: $schema: https://json-schema.org/draft/2020-12/schema properties: offers: items: properties: acceptIndex: type: integer format: const: jws type: string signature: description: JWS compact serialization containing the offer payload type: string required: - format - signature type: object type: array required: - offers type: object resource: description: Historical measurement-card batch from published roots for a requested time window, capped at 200 leaves, with inclusion paths and carrying roots. Not payment or settlement receipts. mimeType: application/json serviceName: CSOAI Receipts Batch tags: - receipts - merkle - history - attestation - x402 url: https://councilof.ai/api/receipts/batch?from=2026-01-01T00%3A00%3A00Z&to=2026-09-13T15%3A44%3A39Z x402Version: 2 schema: $ref: '#/components/schemas/X402PaymentRequired' description: Payment required — the x402 v2 challenge. The same JSON is base64-encoded in the PAYMENT-REQUIRED response header. Pay accepts[0] (scheme exact, network eip155:8453, USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, payTo 0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31; amount in atomic units) and retry the same request with the X-PAYMENT header. Verification of the artefact stays free. headers: PAYMENT-REQUIRED: description: base64(JSON) of this challenge body schema: type: string summary: Receipts batch — historical measurement leaves for a window (assembly) tags: - Assembly x-csoai: challenge: amount_source: captured live 402 (challenges/receipts_batch.json) captured: true payment_required_header_bytes: 7192 door: https://councilof.ai/api/receipts/batch?from=2026-01-01T00:00:00Z free_forever_on_this_path: - https://councilof.ai/api/receipts/batch?from=&preview=1 free_preview: https://councilof.ai/api/receipts/batch?from=2026-01-01T00:00:00Z&preview=1 never: - a conclusion about any leaf - a grade - a certificate - a settlement-receipt claim paid_for: assembly tier: receipts_batch x-payment-info: protocols: - x402 components: schemas: X402PaymentRequired: properties: accepts: items: $ref: '#/components/schemas/X402Accept' minItems: 1 type: array error: type: string extensions: description: extensions.bazaar carries info.input (a sample request) and schema (input/output JSON Schema). extensions['offer-receipt'].info.offers[] carries one server-signed offer per accepts[] entry, format 'jws' — a compact EdDSA JWS whose payload is the offer (x402 Offer & Receipt extension §4.1). It is present only when the edge holds its signing key; csoai.offer_receipt.signed says which, and why, on every 402. properties: offer-receipt: properties: info: properties: offers: items: properties: acceptIndex: description: unsigned convenience field; match offers to accepts[] by payload fields, never by index (§4.1.1) type: integer format: const: jws type: string signature: description: JWS compact serialization containing the offer payload type: string required: - format - signature type: object type: array type: object type: object type: object resource: properties: description: type: string mimeType: type: string serviceName: type: string tags: items: type: string type: array url: type: string type: object x402Version: const: 2 type: integer required: - x402Version - accepts type: object X402Accept: properties: amount: description: atomic units (x402 v2) pattern: ^[0-9]+$ type: string asset: const: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' description: USDC contract, 6 decimals type: string extra: description: EIP-712 domain of the asset properties: name: type: string version: type: string type: object maxAmountRequired: description: atomic units (x402 v1 name for the same figure) pattern: ^[0-9]+$ type: string maxTimeoutSeconds: type: integer network: const: eip155:8453 description: CAIP-2 type: string payTo: const: '0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31' type: string scheme: const: exact type: string required: - scheme - network - asset - payTo - amount - maxTimeoutSeconds type: object securitySchemes: ed25519: description: Ed25519 signature of canonical body, under did:web:csoai.org#card-attestation-1 in: header name: X-CSOAI-Signed-Card type: apiKey githubOidc: bearerFormat: JWT description: GitHub Actions OIDC token satisfying the handler's issuer, audience, repository and workflow checks. scheme: bearer type: http operatorBearer: description: Operation-specific configured operator or writer credential. Not interchangeable across operations. scheme: bearer type: http x-x402: amounts: only inside each resource's 402 challenge (accepts[].amount) — never on this catalog, never in prose asset: contract: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' decimals: 6 symbol: USDC catalog: https://councilof.ai/api/x402 doors: - /api/free-door - /api/request-attestation - /api/evidence-bundle - /api/eunomia-data - /api/proof - /api/rwa/evidence - /api/wrapper - /api/art50/marking-evidence - /api/feeds/provider-diff - /api/receipts/batch facilitator: configured: true note: the facilitator URL is a Cloudflare Pages env var (X402_FACILITATOR_URL) that no public surface publishes; /api/x402 reports only whether one is configured url: null mcp: https://councilof.ai/mcp mode: live mode_note: A settled receipt (facilitator /verify then /settle) unlocks the paid artefact. Verification of every artefact stays free. network: eip155:8453 not: - score - certificate - filled-cells - pay-to-pass - rank offer_receipt: alg: EdDSA did_document: https://csoai.org/.well-known/did.json formats_emitted: - jws formats_not_emitted: - eip712 kid: did:web:csoai.org#board-attestation-1 receipts_by_payer: https://councilof.ai/api/receipts?payer=0x… spec: https://github.com/x402-foundation/x402/blob/69652a69798f0b08f95bef33318896e36e210f7e/specs/extensions/extension-offer-and-receipt.md spec_commit: 69652a69798f0b08f95bef33318896e36e210f7e supported: true verify_hosted: https://councilof.ai/api/receipts/verify verify_offline: scripts/verify_receipt.py why_no_eip712: the edge holds one Ed25519 signing key (a Cloudflare Pages secret) and no secp256k1 signer; eip712 would require a key nobody has provisioned, so we emit none rather than a format we cannot produce payTo: '0x212686404A7D1E1fD88F35eD6200c3aF7A78ae31' public_operations: 104 quarantined: - buyable: false free_status: https://councilof.ai/api/witness/status?sha256=<64-hex> lifecycle: QUARANTINED_PRE_RELEASE reason: paid witness issuance is disabled until a release gate verifies leaf → signed root → sidecar → Rekor → OpenTimestamps url: https://councilof.ai/api/witness?sha256=<64-hex> revenue_truth: https://councilof.ai/api/revenue schema_of_source: catalog: csoai.x402-catalog/0.2 well_known: csoai.x402/0.2 scheme: exact well_known: https://councilof.ai/.well-known/x402.json