{"openapi":"3.1.0","info":{"title":"DebitMyData Agent Gateway","description":"Public integration surface for agents: discovery, payment options, quotes, payment verification, controller proofs and DebitMyData DID issuance with signed credentials. Payment options appear only once their payment rail is enabled. AI agents can use the same steps through the MCP server at /mcp. Terms, privacy, payment, refund, DID and security policies: [/policies](/policies). DMD is the ticker of the DebitMyData coin, the native coin of the DebitMyData Proof-of-Work chain (addresses start with dm1); it is unrelated to other tokens that use the same ticker.\n\n### Try the whole registration from this page\n\n**Easiest: [go back to the guided test page](/docs).** It runs every step below for you, filling each one in from the previous results, with a countdown of the time left. This advanced page is for doing the steps by hand:\n\nThis is the **staging** server: test networks whose coins have no value. Open each endpoint below, fill in the fields, click **Execute**, and copy the values named into the next step. The three **staging** endpoints stand in for what a real agent does with its own key and wallet.\n\nEach step's endpoint below is marked **Step 1** to **Step 8**. The panel at the bottom right shows the next step with a **Go** button that opens it, and keeps each value the answers give, with a **Copy** button.\n\n1. **staging** › [POST /v1/staging/test-agent-keys](#/staging/create_test_agent_key_v1_staging_test_agent_keys_post): a test agent key and wallet. Keep `controller_public_key` and `private_key` (and `controller_wallet_address` and `wallet_private_key` to try a wallet: see **A wallet as the controller**).\n2. **registration** › [POST /v1/dids/registration-quotes](#/registration/create_quote_v1_dids_registration_quotes_post): paste your `controller_public_key`, and pick how to pay in `preferred_payment_option`: `dmd_pow_native` (DMD, the DebitMyData coin) or `x402_usdc_base` (USDC). Keep `registration_intent_id` (starts with `dmd_did_intent_`) and `payment_intent_id` (starts with `dmd_payment_intent_`).\n3. **staging** › [POST /v1/staging/test-payments](#/staging/create_test_payment_v1_staging_test_payments_post): your `payment_intent_id`. DMD: test coins pay the quote and 6 blocks confirm it. USDC: the test wallet signs the payment, for step 8.\n4. **payments** › [GET /v1/payments/{payment_intent_id}](#/payments/payment_status_v1_payments__payment_intent_id__get): your `payment_intent_id`. After about 10 seconds, `status` is `settled`.\n5. **registration** › [POST /v1/dids/registrations/{id}/controller-challenges](#/registration/create_challenge_v1_dids_registrations__registration_intent_id__controller_challenges_post): your `registration_intent_id` (leave `controller_type` empty). Keep `challenge_id`.\n6. **staging** › [POST /v1/staging/test-signatures](#/staging/create_test_signature_v1_staging_test_signatures_post): your `challenge_id` and `private_key`. Keep `signature` (the short one, for step 7).\n7. **registration** › [POST /v1/dids/registrations/{id}/controller-proofs](#/registration/submit_proof_v1_dids_registrations__registration_intent_id__controller_proofs_post): your `registration_intent_id`, `challenge_id` and the `signature` from step 6. The status is `verified`.\n8. **registration** › [POST /v1/dids/registrations](#/registration/register_v1_dids_registrations_post): your `registration_intent_id`. You get the DID, its signed credential and the `dmd_did_holder` entitlement.\n9. Open the `did_document_url` from step 8 in your browser.\n\n**Paying with DMD, the DebitMyData coin** (`dmd_pow_native`): steps **1 → 2 → 3 → 4 → 5 → 6 → 7 → 8**. Do step 3 within 15 minutes of step 2, and steps 5 to 7 within 5 minutes.\n\n**Paying with USDC through x402** (`x402_usdc_base`, Base Sepolia test USDC): steps **1 → 2 → 5 → 6 → 7 → 3 → 8**, without step 4, all within 15 minutes of step 2. Step 3 then returns a long `payment_signature` (it starts with `eyJ`). Paste it into the `PAYMENT-SIGNATURE` field of step 8 and click **Execute** right away: it is valid for 5 minutes. If it has expired, run step 3 again for a new one. The payment is settled on Base Sepolia, checked on chain, and the DID is issued in the same answer.\n\n**Which value goes where:**\n\n- `registration_intent_id` (starts with `dmd_did_intent_`): steps 5, 7 and 8.\n- `payment_intent_id` (starts with `dmd_payment_intent_`): steps 3 and 4.\n- `signature` from step 6 (short): step 7.\n- `payment_signature` from step 3 (long, USDC only): step 8, in the `PAYMENT-SIGNATURE` field.\n\n**A wallet as the controller** (with the key, or instead of it): in step 2, paste the `controller_wallet_address` from step 1 as well, or alone with `controller_public_key` left empty (its network is `eip155:84532` unless you pick another in `controller_network`). Then do steps 5 to 7 once for each controller. Step 5 gives the next one still to prove (or pick it in `controller_type`). In step 6, use `private_key` when the challenge's `controller` starts with `ed25519:`, and `wallet_private_key` when it starts with `eip155:`; the wallet's `signature` starts with `0x`. Step 8 then issues a DID that lists the wallet. `GET /v1/dids/registrations/{id}` shows in `still_to_prove` what is left.\n\nRequest bodies are shown here as fields to fill in. Agents send the same fields as JSON: pick `application/json` above a request body to see it.\n\n### Try an inference donation (agents)\n\nAgents donate towards DebitMyData's AI inference in USDC through x402, in an amount they choose (people use the site's **Inference $** button).\n\n1. **staging** › [POST /v1/staging/test-donation-payments](#/staging/create_test_donation_payment_v1_staging_test_donation_payments_post): an `amount_usd` such as `5.00`. Keep the long `payment_signature`.\n2. **donations** › [POST /v1/donations/{name}](#/donations/make_donation_v1_donations__name__post): `name` `inference`, the same `amount_usd`, and the `payment_signature` in the `PAYMENT-SIGNATURE` field, within 5 minutes. The answer carries the receipt signed by DebitMyData.","version":"0.30.1"},"paths":{"/healthz":{"get":{"tags":["health"],"summary":"Liveness probe","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Healthz Healthz Get"}}}}}}},"/readyz":{"get":{"tags":["health"],"summary":"Readiness probe","operationId":"readyz_readyz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/v1/discovery":{"get":{"tags":["discovery"],"summary":"Describe DebitMyData services","operationId":"discovery_v1_discovery_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discovery"}}}}}}},"/v1/payment-options":{"get":{"tags":["discovery"],"summary":"Payment options currently enabled for a service","operationId":"payment_options_v1_payment_options_get","parameters":[{"name":"service","in":"query","required":false,"schema":{"type":"string","maxLength":64,"description":"A service or donation ID from /v1/discovery","default":"did_registration","title":"Service"},"description":"A service or donation ID from /v1/discovery"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentOptions"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/prices/dmd-usd":{"get":{"tags":["discovery"],"summary":"DMD/USD reference price (DMD: the DebitMyData coin) and how it was computed","operationId":"dmd_price_v1_prices_dmd_usd_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DmdPrice"}}}},"503":{"description":"No price has been computed yet."}}}},"/v1/dids/registration-quotes":{"post":{"tags":["registration"],"summary":"Get a time-limited quote for a DebitMyData DID registration","operationId":"create_quote_v1_dids_registration_quotes_post","parameters":[{"name":"Idempotency-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string","pattern":"^[A-Za-z0-9._:-]{16,128}$"},{"type":"null"}],"description":"Optional random key (e.g. a UUID). Retrying with the same key returns the original quote instead of creating a new one.","title":"Idempotency-Key"},"description":"Optional random key (e.g. a UUID). Retrying with the same key returns the original quote instead of creating a new one."}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"display_name":{"type":"string","description":"Name of the agent, e.g. TestAgent-01.","pattern":"^[^\\x00-\\x1f\\x7f]+$","minLength":1,"maxLength":100,"default":"TestAgent-01"},"participant_type":{"type":"string","description":"What kind of participant this is.","enum":["autonomous_agent","ai_agent","bot","agenticbot","claw","digital_twin","human","organization","approved_digital_entity"],"default":"autonomous_agent"},"controller_public_key":{"type":"string","description":"The agent's public key, e.g. ed25519:z6Mk...: the DID's controller (with a wallet, or alone).","pattern":"^[a-z0-9-]{2,32}:[A-Za-z0-9+/=_.:-]{8,220}$","maxLength":256,"example":""},"controller_wallet_address":{"type":"string","description":"An EVM wallet that controls the DID: `0x...` or `eip155:8453:0x...`. Ordinary wallets and smart-contract wallets (such as Coinbase Smart Wallet) both work. Give a public key, a wallet, or both; each one given must prove control.","pattern":"^[A-Za-z0-9:_.-]{8,128}$","maxLength":128,"example":""},"controller_network":{"type":"string","description":"The wallet's network, e.g. eip155:8453 for Base. Optional: by default, the network of the gateway's USDC payments.","pattern":"^eip155:[1-9][0-9]{0,11}$","enum":["eip155:84532"],"default":""},"preferred_payment_option":{"type":"string","description":"How the agent pays: an id from GET /v1/payment-options, such as dmd_pow_native (DMD, the DebitMyData coin) or x402_usdc_base (USDC through x402).","minLength":1,"maxLength":64,"enum":["dmd_pow_native","x402_usdc_base"]}},"required":["display_name","participant_type","preferred_payment_option"]}},"application/json":{"schema":{"$ref":"#/components/schemas/QuoteRequest"},"examples":{"dmd":{"summary":"Pay in DMD, the DebitMyData coin (native PoW chain)","value":{"controller_public_key":"ed25519:z6Mk<your agent public key>","display_name":"TestAgent-01","participant_type":"autonomous_agent","preferred_payment_option":"dmd_pow_native"}},"x402":{"summary":"Pay in USDC through x402 (Base)","value":{"controller_public_key":"ed25519:z6Mk<your agent public key>","display_name":"TestAgent-01","participant_type":"autonomous_agent","preferred_payment_option":"x402_usdc_base"}},"wallet":{"summary":"A wallet as the controller, paying in USDC through x402 (Base)","value":{"controller_wallet_address":"0x<your wallet address>","display_name":"TestAgent-01","participant_type":"autonomous_agent","preferred_payment_option":"x402_usdc_base"}}}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationQuote"}}}},"409":{"description":"The chosen payment option is not currently available."},"422":{"description":"Invalid request, unknown payment option or reused Idempotency-Key."},"429":{"description":"This controller key already has the maximum of open quotes."},"503":{"description":"No approved price available, or the service is temporarily down."}}}},"/v1/payments/{payment_intent_id}":{"get":{"tags":["payments"],"summary":"Payment status: detection, confirmations, settlement, refunds","operationId":"payment_status_v1_payments__payment_intent_id__get","parameters":[{"name":"payment_intent_id","in":"path","required":true,"schema":{"type":"string","pattern":"^dmd_payment_intent_[0-9A-HJKMNP-TV-Z]{26}$","description":"`payment_intent_id` from the quote (it starts with `dmd_payment_intent_`).","title":"Payment Intent Id"},"description":"`payment_intent_id` from the quote (it starts with `dmd_payment_intent_`)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentStatusResponse"}}}},"404":{"description":"Unknown payment intent."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/payments/{payment_intent_id}/references":{"post":{"tags":["payments"],"summary":"Tell the gateway the transaction reference of a broadcast payment (a hint only)","operationId":"submit_payment_reference_v1_payments__payment_intent_id__references_post","parameters":[{"name":"payment_intent_id","in":"path","required":true,"schema":{"type":"string","pattern":"^dmd_payment_intent_[0-9A-HJKMNP-TV-Z]{26}$","description":"`payment_intent_id` from the quote (it starts with `dmd_payment_intent_`).","title":"Payment Intent Id"},"description":"`payment_intent_id` from the quote (it starts with `dmd_payment_intent_`)."}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"transaction_reference":{"type":"string","description":"Transaction ID / hash of the broadcast payment. Used only as a hint.","minLength":8,"maxLength":128,"example":""}},"required":["transaction_reference"]}},"application/json":{"schema":{"$ref":"#/components/schemas/ReferenceRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferenceResponse"}}}},"200":{"description":"This reference was already recorded."},"404":{"description":"Unknown payment intent."},"409":{"description":"The payment is no longer open."},"422":{"description":"Not a valid reference for the payment's network."},"429":{"description":"Too many references for this payment."}}}},"/v1/dids/registrations/{registration_intent_id}/controller-challenges":{"post":{"tags":["registration"],"summary":"Get a one-time message to sign with the controller key or wallet","operationId":"create_challenge_v1_dids_registrations__registration_intent_id__controller_challenges_post","parameters":[{"name":"registration_intent_id","in":"path","required":true,"schema":{"type":"string","pattern":"^dmd_did_intent_[0-9A-HJKMNP-TV-Z]{26}$","description":"`registration_intent_id` from the quote (it starts with `dmd_did_intent_`).","title":"Registration Intent Id"},"description":"`registration_intent_id` from the quote (it starts with `dmd_did_intent_`)."}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"controller_type":{"type":"string","description":"Usually left out: the gateway then picks the quote's only controller, or the next one still to prove. To choose: ed25519 for the agent's public key (controller_public_key), eip155 for its wallet (controller_wallet_address).","pattern":"^(ed25519|eip155)$","example":""}}}},"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ChallengeRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChallengeResponse"}}}},"404":{"description":"Unknown registration intent."},"409":{"description":"Registration already issued, closed, or has no usable key."},"429":{"description":"Too many open challenges."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dids/registrations/{registration_intent_id}/controller-proofs":{"post":{"tags":["registration"],"summary":"Prove control of the controller key or wallet by returning the signed challenge","operationId":"submit_proof_v1_dids_registrations__registration_intent_id__controller_proofs_post","parameters":[{"name":"registration_intent_id","in":"path","required":true,"schema":{"type":"string","pattern":"^dmd_did_intent_[0-9A-HJKMNP-TV-Z]{26}$","description":"`registration_intent_id` from the quote (it starts with `dmd_did_intent_`).","title":"Registration Intent Id"},"description":"`registration_intent_id` from the quote (it starts with `dmd_did_intent_`)."}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"challenge_id":{"type":"string","description":"`challenge_id` from the controller challenge.","pattern":"^dmd_challenge_[0-9A-HJKMNP-TV-Z]{26}$","example":""},"signature":{"type":"string","description":"Signature of the challenge message. A public key: Ed25519 signature of the message (UTF-8), base64url/base64/hex, about 86 characters. A wallet: what the wallet's personal_sign / signMessage returns, 0x... (132 characters for an ordinary wallet, longer for a smart wallet). Not the x402 payment (the long value starting with eyJ).","minLength":86,"maxLength":16400,"example":""}},"required":["challenge_id","signature"]}},"application/json":{"schema":{"$ref":"#/components/schemas/ProofRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProofResponse"}}}},"404":{"description":"Unknown registration or challenge."},"409":{"description":"Challenge already answered, or registration closed."},"410":{"description":"Challenge expired."},"422":{"description":"Wrong or malformed signature (a wrong one uses up the challenge), or a smart wallet on a network this gateway cannot ask."},"503":{"description":"A smart wallet's network cannot be asked right now (try again)."}}}},"/v1/dids/registrations":{"post":{"tags":["registration"],"summary":"Issue the DID once the payment is settled and the controller proof is verified","description":"For a quote paid in DMD, call this once the payment is settled and the controller proof verified. For an x402 quote (USDC on Base), prove the controller first, then call this: it answers **402** with a `PAYMENT-REQUIRED` header (x402 version 2). Call it again with your signed payment in the `PAYMENT-SIGNATURE` header; the payment is settled, checked on chain, and the DID is issued in the same answer (`PAYMENT-RESPONSE` header), or 202 if confirmations take longer. A call without `registration_intent_id` answers 402 with the payment terms only (for x402 tools that probe the route); it cannot be paid.","operationId":"register_v1_dids_registrations_post","parameters":[{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"x402 only: the base64 PaymentPayload answering the 402 (a long value starting with eyJ; on staging, payment_signature from POST /v1/staging/test-payments). Not the controller-proof signature.","title":"Payment-Signature"},"description":"x402 only: the base64 PaymentPayload answering the 402 (a long value starting with eyJ; on staging, payment_signature from POST /v1/staging/test-payments). Not the controller-proof signature."}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"registration_intent_id":{"type":"string","description":"`registration_intent_id` from the quote (it starts with `dmd_did_intent_`).","pattern":"^dmd_did_intent_[0-9A-HJKMNP-TV-Z]{26}$","example":""}}}},"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RegistrationRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IssuedRegistration"}}}},"200":{"description":"Already issued: the same DID and credential are returned."},"202":{"description":"x402: payment received and confirming; call again shortly."},"400":{"description":"x402: the PAYMENT-SIGNATURE header is not a valid payment."},"402":{"description":"x402: payment required, or the payment was refused."},"404":{"description":"Unknown registration intent."},"409":{"description":"Not ready: the response lists what is still missing."},"503":{"description":"DID issuance or the payment service is not available."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dids/registrations/{registration_intent_id}":{"get":{"tags":["registration"],"summary":"Registration progress: payment, controller proof, what is still missing","operationId":"registration_status_v1_dids_registrations__registration_intent_id__get","parameters":[{"name":"registration_intent_id","in":"path","required":true,"schema":{"type":"string","pattern":"^dmd_did_intent_[0-9A-HJKMNP-TV-Z]{26}$","description":"`registration_intent_id` from the quote (it starts with `dmd_did_intent_`).","title":"Registration Intent Id"},"description":"`registration_intent_id` from the quote (it starts with `dmd_did_intent_`)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegistrationStatus"}}}},"404":{"description":"Unknown registration intent."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/donations/{name}":{"post":{"tags":["donations"],"summary":"Donate (inference donation), paid with x402","description":"A voluntary donation towards the AI inference behind DebitMyData's agentic services, in an amount you choose (`amount_usd`), paid in USDC on Base through x402. Call it with the amount: it answers **402** with a `PAYMENT-REQUIRED` header. Call it again with the same body and your signed payment in the `PAYMENT-SIGNATURE` header: the payment is settled, checked on chain, and the answer carries a receipt signed by DebitMyData (or 202 while confirmations take longer; then read `status_url`). Sending the same signed payment again returns the same donation. A call without `amount_usd` answers 402 with example terms (for x402 tools) and cannot be paid.","operationId":"make_donation_v1_donations__name__post","parameters":[{"name":"name","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,40}$","title":"Name"}},{"name":"PAYMENT-SIGNATURE","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The base64 x402 PaymentPayload answering the 402.","title":"Payment-Signature"},"description":"The base64 x402 PaymentPayload answering the 402."}],"requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"amount_usd":{"type":"string","description":"The donation in US dollars, e.g. \"5.00\" (paid as the same amount of USDC).","pattern":"^(0|[1-9][0-9]{0,8})(\\.[0-9]{1,2})?$","example":""},"donor_name":{"type":"string","description":"Optional, shown in the receipt.","minLength":1,"maxLength":80,"example":""},"donor_did":{"type":"string","description":"Optional DID of the donor; the receipt is issued to it. Otherwise the receipt names the paying wallet.","pattern":"^did:[a-z0-9]+:[A-Za-z0-9._:%-]{1,200}$","example":""}}}},"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DonationRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"This signed payment was already received: the same donation.","content":{"application/json":{"schema":{}}}},"201":{"description":"Paid and settled: the donation and its signed receipt."},"202":{"description":"Payment received and confirming; read status_url shortly."},"400":{"description":"The PAYMENT-SIGNATURE header is not a valid x402 payment."},"402":{"description":"Payment required, or the payment was refused."},"404":{"description":"Unknown donation."},"409":{"description":"The authorization was already used, or the payment failed."},"422":{"description":"amount_usd is outside the accepted range."},"503":{"description":"Donations are not open on this gateway yet."}}}},"/v1/donations/{purchase_id}":{"get":{"tags":["donations"],"summary":"A donation: payment status and, once settled, its signed receipt","operationId":"get_donation_v1_donations__purchase_id__get","parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","pattern":"^dmd_purchase_[0-9A-HJKMNP-TV-Z]{26}$","description":"purchase_id (starts with dmd_purchase_)","title":"Purchase Id"},"description":"purchase_id (starts with dmd_purchase_)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Unknown donation."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/products":{"get":{"tags":["products"],"summary":"Products an agent can buy for its DID (such as the BottyBotty tiers)","operationId":"products_v1_products_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProductInfo"},"type":"array","title":"Response Products V1 Products Get"}}}}}}},"/v1/products/{product}/quotes":{"post":{"tags":["products"],"summary":"Quote a product for an active DID: the amount and where to pay it","operationId":"quote_v1_products__product__quotes_post","parameters":[{"name":"product","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z][a-z0-9-]{1,40}$","description":"e.g. bottybotty-entry","title":"Product"},"description":"e.g. bottybotty-entry"}],"requestBody":{"required":true,"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"did":{"type":"string","description":"The DID the product is for (or its identity ID, dmd_identity_...). It must be active.","minLength":26,"maxLength":300,"example":""},"preferred_payment_option":{"type":"string","description":"How the agent pays, e.g. dmd_pow_native.","minLength":1,"maxLength":64,"enum":["dmd_pow_native","x402_usdc_base"]}},"required":["did","preferred_payment_option"]}},"application/json":{"schema":{"$ref":"#/components/schemas/ProductQuoteRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductQuote"}}}},"404":{"description":"Unknown product or DID."},"409":{"description":"The DID is suspended or revoked."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/products/purchases/{purchase_id}":{"get":{"tags":["products"],"summary":"A product purchase: payment progress, next action, and its receipt once completed","operationId":"status_v1_products_purchases__purchase_id__get","parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","pattern":"^dmd_purchase_[0-9A-HJKMNP-TV-Z]{26}$","title":"Purchase Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseState"}}}},"404":{"description":"Unknown product purchase."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/products/purchases/{purchase_id}/complete":{"post":{"tags":["products"],"summary":"Once paid: issue the signed receipt and the entitlement on the DID (idempotent)","operationId":"complete_v1_products_purchases__purchase_id__complete_post","parameters":[{"name":"purchase_id","in":"path","required":true,"schema":{"type":"string","pattern":"^dmd_purchase_[0-9A-HJKMNP-TV-Z]{26}$","title":"Purchase Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PurchaseState"}}}},"404":{"description":"Unknown product purchase."},"409":{"description":"Not paid yet, or the DID is no longer active."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/dids/{identity_id}":{"get":{"tags":["identities"],"summary":"An issued DebitMyData identity","operationId":"identity_v1_dids__identity_id__get","parameters":[{"name":"identity_id","in":"path","required":true,"schema":{"type":"string","pattern":"^(dmd_identity_[0-9A-HJKMNP-TV-Z]{26}|did:web:[^/?#\\s]{1,253}:agents:[0-9A-HJKMNP-TV-Z]{26})$","description":"The identity ID (`dmd_identity_...`) or the DID itself (`did:web:api.debitmydata.io:agents:...`).","title":"Identity Id"},"description":"The identity ID (`dmd_identity_...`) or the DID itself (`did:web:api.debitmydata.io:agents:...`)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentityRecord"}}}},"404":{"description":"Unknown identity."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/credentials/{credential_id}":{"get":{"tags":["identities"],"summary":"A signed registration credential (verify it with the issuer DID document)","operationId":"credential_v1_credentials__credential_id__get","parameters":[{"name":"credential_id","in":"path","required":true,"schema":{"type":"string","pattern":"^dmd_credential_[0-9A-HJKMNP-TV-Z]{26}$","title":"Credential Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialRecord"}}}},"404":{"description":"Unknown credential."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/entitlements/{identity_id}":{"get":{"tags":["identities"],"summary":"Entitlements of a DID, such as its BottyBotty tier (and any end of period)","operationId":"entitlements_v1_entitlements__identity_id__get","parameters":[{"name":"identity_id","in":"path","required":true,"schema":{"type":"string","pattern":"^(dmd_identity_[0-9A-HJKMNP-TV-Z]{26}|did:web:[^/?#\\s]{1,253}:agents:[0-9A-HJKMNP-TV-Z]{26})$","description":"The identity ID (`dmd_identity_...`) or the DID itself (`did:web:api.debitmydata.io:agents:...`).","title":"Identity Id"},"description":"The identity ID (`dmd_identity_...`) or the DID itself (`did:web:api.debitmydata.io:agents:...`)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Entitlements"}}}},"404":{"description":"Unknown identity."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/agents/{suffix}/did.json":{"get":{"tags":["identities"],"summary":"DID document of an issued identity (did:web)","operationId":"agent_document_agents__suffix__did_json_get","parameters":[{"name":"suffix","in":"path","required":true,"schema":{"type":"string","pattern":"^[0-9A-HJKMNP-TV-Z]{26}$","title":"Suffix"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Unknown DID."},"410":{"description":"DID deactivated."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/.well-known/did.json":{"get":{"tags":["identities"],"summary":"Issuer DID document: the public key that signs DebitMyData credentials","operationId":"issuer_document__well_known_did_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"404":{"description":"Credential issuance is not enabled."}}}},"/v1/policies":{"get":{"tags":["discovery"],"summary":"The policies that apply to registrations: terms, privacy, payments, refunds, DIDs","operationId":"policy_list_v1_policies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyList"}}}}}}},"/v1/staging/test-agent-keys":{"post":{"tags":["staging"],"summary":"Staging only: create a throwaway agent key and wallet","description":"Stands in for the agent's own Ed25519 key and EVM wallet so the flow can be tried from this page. A real agent creates them itself and never shares the private keys. The wallet holds nothing: it only signs. Nothing is stored.","operationId":"create_test_agent_key_v1_staging_test_agent_keys_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ThrowawayKeyResponse"}}}}}}},"/v1/staging/test-payments":{"post":{"tags":["staging"],"summary":"Staging only: pay a quote with test coins","description":"Stands in for the agent's own wallet, on test networks whose coins have no value. **DMD quotes:** the staging test wallet sends the exact quoted amount to the quoted address on the private regtest chain, then mines the required confirmations; the gateway then verifies the payment on chain like any other (check GET /v1/payments/{payment_intent_id}). **x402 quotes (USDC on Base Sepolia):** the staging test wallet signs the x402 payment for the quote and returns it as `payment_signature`; send it in the PAYMENT-SIGNATURE header of POST /v1/dids/registrations, after proving the controller key.","operationId":"create_test_payment_v1_staging_test_payments_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"payment_intent_id":{"type":"string","description":"`payment_intent_id` from the quote (it starts with `dmd_payment_intent_`).","pattern":"^dmd_payment_intent_[0-9A-HJKMNP-TV-Z]{26}$","example":""}},"required":["payment_intent_id"]}},"application/json":{"schema":{"$ref":"#/components/schemas/StagingPaymentRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StagingPaymentResponse"}}}},"404":{"description":"Unknown payment intent."},"409":{"description":"Already paid, expired, or not a test-network quote."},"503":{"description":"The test wallet or its node is not available."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/staging/test-donation-payments":{"post":{"tags":["staging"],"summary":"Staging only: sign a donation's x402 payment with test USDC","description":"Stands in for the agent's own wallet, on Base Sepolia (test USDC, no value): the staging test wallet signs the x402 payment of a donation of `amount_usd`, exactly as the 402 of POST /v1/donations/inference asks for it. Nothing moves until the signed payment is used.","operationId":"create_test_donation_payment_v1_staging_test_donation_payments_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"amount_usd":{"type":"string","description":"The donation in US dollars, e.g. \"5.00\": the same amount_usd as in POST /v1/donations/inference.","pattern":"^(0|[1-9][0-9]{0,8})(\\.[0-9]{1,2})?$","example":""},"donation_id":{"type":"string","description":"The donation, as listed in GET /v1/discovery (inference_donation).","pattern":"^[a-z][a-z0-9_]{1,40}$","default":"inference_donation"}},"required":["amount_usd"]}},"application/json":{"schema":{"$ref":"#/components/schemas/StagingDonationPaymentRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StagingDonationPaymentResponse"}}}},"404":{"description":"Unknown donation."},"409":{"description":"Donations on this server are not paid on a test network."},"422":{"description":"amount_usd is outside the accepted range."},"503":{"description":"Donations or the test wallet are not available."}}}},"/v1/staging/test-wallet":{"get":{"tags":["staging"],"summary":"Staging only: the USDC test wallet and its balance","description":"The wallet that POST /v1/staging/test-payments signs USDC payments with, how much test USDC it holds on Base Sepolia, and whether that covers one DID registration. Test USDC is free from Circle's faucet (faucet_url).","operationId":"get_test_wallet_v1_staging_test_wallet_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StagingWalletResponse"}}}}}}},"/v1/staging/test-signatures":{"post":{"tags":["staging"],"summary":"Staging only: sign a controller challenge with the throwaway key or wallet","description":"Stands in for the agent signing the challenge message with its own key, or with its wallet (personal_sign, as wallets sign text). Use private_key for a challenge whose controller is ed25519:..., wallet_private_key for one whose controller is eip155:.... Send the signature to POST /v1/dids/registrations/{registration_intent_id}/controller-proofs.","operationId":"create_test_signature_v1_staging_test_signatures_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"type":"object","properties":{"challenge_id":{"type":"string","description":"`challenge_id` from the controller challenge.","pattern":"^dmd_challenge_[0-9A-HJKMNP-TV-Z]{26}$","example":""},"private_key":{"type":"string","description":"From test-agent-keys: private_key (z3u2...) for a key challenge, or wallet_private_key (0x...) for a wallet challenge.","minLength":40,"maxLength":66,"example":""}},"required":["challenge_id","private_key"]}},"application/json":{"schema":{"$ref":"#/components/schemas/StagingSignatureRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StagingSignatureResponse"}}}},"404":{"description":"Unknown challenge."},"409":{"description":"The challenge was already used or has expired."},"422":{"description":"The private key is not one from test-agent-keys, or not the kind this challenge needs."}}}}},"components":{"schemas":{"AmountRange":{"properties":{"currency":{"type":"string","title":"Currency"},"minimum":{"type":"string","title":"Minimum"},"maximum":{"type":"string","title":"Maximum"}},"type":"object","required":["currency","minimum","maximum"],"title":"AmountRange"},"ChallengeRequest":{"properties":{"controller_type":{"anyOf":[{"type":"string","pattern":"^(ed25519|eip155)$"},{"type":"null"}],"title":"Controller Type","description":"Usually left out: the gateway then picks the quote's only controller, or the next one still to prove. To choose: ed25519 for the agent's public key (controller_public_key), eip155 for its wallet (controller_wallet_address)."}},"additionalProperties":false,"type":"object","title":"ChallengeRequest","examples":[{}]},"ChallengeResponse":{"properties":{"challenge_id":{"type":"string","title":"Challenge Id"},"registration_intent_id":{"type":"string","title":"Registration Intent Id"},"controller":{"type":"string","title":"Controller"},"message":{"type":"string","title":"Message"},"signature_algorithm":{"type":"string","title":"Signature Algorithm"},"signature_encoding":{"type":"string","title":"Signature Encoding"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"proof_url":{"type":"string","title":"Proof Url"}},"type":"object","required":["challenge_id","registration_intent_id","controller","message","signature_algorithm","signature_encoding","expires_at","proof_url"],"title":"ChallengeResponse"},"ControllerStatus":{"properties":{"public_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Public Key"},"wallet_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wallet Address"},"wallet_network":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wallet Network"},"proof_status":{"type":"string","title":"Proof Status"},"still_to_prove":{"items":{"type":"string"},"type":"array","title":"Still To Prove","description":"Controllers without a verified proof yet: ed25519 and/or eip155."}},"type":"object","required":["public_key","wallet_address","proof_status"],"title":"ControllerStatus"},"CredentialIssuer":{"properties":{"did":{"type":"string","title":"Did"},"did_document_url":{"type":"string","title":"Did Document Url"}},"type":"object","required":["did","did_document_url"],"title":"CredentialIssuer"},"CredentialRecord":{"properties":{"credential_id":{"type":"string","title":"Credential Id"},"status":{"type":"string","title":"Status","description":"active, suspended (with its DID) or revoked"},"format":{"type":"string","title":"Format"},"issued_at":{"type":"string","format":"date-time","title":"Issued At"},"revoked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Revoked At"},"credential":{"additionalProperties":true,"type":"object","title":"Credential"}},"type":"object","required":["credential_id","status","format","issued_at","revoked_at","credential"],"title":"CredentialRecord"},"Discovery":{"properties":{"service":{"type":"string","title":"Service"},"version":{"type":"string","title":"Version"},"offers":{"items":{"$ref":"#/components/schemas/Offer"},"type":"array","title":"Offers"},"donations":{"items":{"$ref":"#/components/schemas/DonationOffer"},"type":"array","title":"Donations"},"mcp_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mcp Url"},"credential_issuer":{"anyOf":[{"$ref":"#/components/schemas/CredentialIssuer"},{"type":"null"}]},"policy_urls":{"additionalProperties":{"type":"string"},"type":"object","title":"Policy Urls"},"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords"}},"type":"object","required":["service","version","offers","donations","mcp_url","credential_issuer","policy_urls","keywords"],"title":"Discovery"},"DmdPrice":{"properties":{"asset":{"type":"string","title":"Asset"},"network":{"type":"string","title":"Network"},"usd_per_unit":{"type":"string","title":"Usd Per Unit"},"units_per_usd":{"type":"string","title":"Units Per Usd"},"method":{"type":"string","title":"Method"},"price_from":{"type":"string","title":"Price From","description":"mining_cost, or minimum when the minimum rate is higher than the mining cost."},"mining_cost_usd_per_unit":{"type":"string","title":"Mining Cost Usd Per Unit","description":"What it costs to mine 1 DMD (DebitMyData coin)."},"minimum_usd_per_unit":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Minimum Usd Per Unit","description":"DebitMyData's minimum rate until DMD has a market price; null if none."},"minimum_approved_on":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Minimum Approved On"},"observed_at":{"type":"string","format":"date-time","title":"Observed At"},"age_seconds":{"type":"integer","title":"Age Seconds"},"fresh":{"type":"boolean","title":"Fresh","description":"Recent enough to be used in a quote."},"used_for_quotes":{"type":"boolean","title":"Used For Quotes","description":"Whether DMD quotes on this server use it."},"parameters_review_overdue":{"type":"boolean","title":"Parameters Review Overdue","description":"The approved electricity price and machine efficiency are past their quarterly review."},"note":{"type":"string","title":"Note"},"inputs":{"additionalProperties":true,"type":"object","title":"Inputs"}},"type":"object","required":["asset","network","usd_per_unit","units_per_usd","method","price_from","mining_cost_usd_per_unit","minimum_usd_per_unit","observed_at","age_seconds","fresh","used_for_quotes","parameters_review_overdue","note","inputs"],"title":"DmdPrice"},"DonationOffer":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"method":{"type":"string","title":"Method"},"path":{"type":"string","title":"Path"},"resource":{"type":"string","title":"Resource"},"amount":{"$ref":"#/components/schemas/AmountRange"},"accepting_payments":{"type":"boolean","title":"Accepting Payments"},"payment_options_url":{"type":"string","title":"Payment Options Url"},"endpoints":{"additionalProperties":{"$ref":"#/components/schemas/Endpoint"},"type":"object","title":"Endpoints"}},"type":"object","required":["id","title","description","method","path","resource","amount","accepting_payments","payment_options_url","endpoints"],"title":"DonationOffer","description":"A donation: the donor chooses the amount within the range, and pays in one call."},"DonationRequest":{"properties":{"amount_usd":{"anyOf":[{"type":"string","pattern":"^(0|[1-9][0-9]{0,8})(\\.[0-9]{1,2})?$"},{"type":"null"}],"title":"Amount Usd","description":"The donation in US dollars, e.g. \"5.00\" (paid as the same amount of USDC)."},"donor_name":{"anyOf":[{"type":"string","maxLength":80,"minLength":1},{"type":"null"}],"title":"Donor Name","description":"Optional, shown in the receipt."},"donor_did":{"anyOf":[{"type":"string","pattern":"^did:[a-z0-9]+:[A-Za-z0-9._:%-]{1,200}$"},{"type":"null"}],"title":"Donor Did","description":"Optional DID of the donor; the receipt is issued to it. Otherwise the receipt names the paying wallet."}},"additionalProperties":false,"type":"object","title":"DonationRequest","examples":[{"amount_usd":"5.00","donor_name":"ResearchClaw-01"}]},"Endpoint":{"properties":{"method":{"type":"string","title":"Method"},"url":{"type":"string","title":"Url"},"available":{"type":"boolean","title":"Available"}},"type":"object","required":["method","url","available"],"title":"Endpoint"},"EntitlementItem":{"properties":{"entitlement":{"type":"string","title":"Entitlement"},"status":{"type":"string","title":"Status","description":"active, expired, suspended or revoked"},"granted_at":{"type":"string","format":"date-time","title":"Granted At"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At","description":"End of the period bought (null: no end)."},"source_credential_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Credential Id"}},"type":"object","required":["entitlement","status","granted_at","source_credential_id"],"title":"EntitlementItem"},"Entitlements":{"properties":{"subject_id":{"type":"string","title":"Subject Id"},"did":{"type":"string","title":"Did"},"entitlements":{"items":{"$ref":"#/components/schemas/EntitlementItem"},"type":"array","title":"Entitlements"}},"type":"object","required":["subject_id","did","entitlements"],"title":"Entitlements"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IdentityRecord":{"properties":{"identity_id":{"type":"string","title":"Identity Id"},"did":{"type":"string","title":"Did"},"status":{"type":"string","title":"Status"},"display_name":{"type":"string","title":"Display Name"},"participant_type":{"type":"string","title":"Participant Type"},"controller_public_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Controller Public Key"},"controller_wallet":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Controller Wallet","description":"The controller wallet, as `eip155:<chain id>:0x...`"},"did_document_url":{"type":"string","title":"Did Document Url"},"registration_intent_id":{"type":"string","title":"Registration Intent Id"},"credentials":{"items":{"type":"string"},"type":"array","title":"Credentials"},"entitlements":{"items":{"type":"string"},"type":"array","title":"Entitlements"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["identity_id","did","status","display_name","participant_type","controller_public_key","did_document_url","registration_intent_id","credentials","entitlements","created_at"],"title":"IdentityRecord"},"IssuedRegistration":{"properties":{"registration_intent_id":{"type":"string","title":"Registration Intent Id"},"status":{"type":"string","title":"Status"},"identity_id":{"type":"string","title":"Identity Id"},"did":{"type":"string","title":"Did"},"did_status":{"type":"string","title":"Did Status","description":"The DID's status now: active, suspended or revoked."},"did_document_url":{"type":"string","title":"Did Document Url"},"identity_url":{"type":"string","title":"Identity Url"},"credential_id":{"type":"string","title":"Credential Id"},"credential_url":{"type":"string","title":"Credential Url"},"credential":{"additionalProperties":true,"type":"object","title":"Credential"},"entitlements":{"items":{"type":"string"},"type":"array","title":"Entitlements"},"issued_at":{"type":"string","format":"date-time","title":"Issued At"},"payment_response":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payment Response","description":"x402 payments: the settlement (also in the PAYMENT-RESPONSE header)."}},"type":"object","required":["registration_intent_id","status","identity_id","did","did_status","did_document_url","identity_url","credential_id","credential_url","credential","entitlements","issued_at"],"title":"IssuedRegistration"},"Money":{"properties":{"currency":{"type":"string","title":"Currency"},"amount":{"type":"string","title":"Amount"}},"type":"object","required":["currency","amount"],"title":"Money"},"Offer":{"properties":{"id":{"type":"string","title":"Id"},"title":{"type":"string","title":"Title"},"description":{"type":"string","title":"Description"},"method":{"type":"string","title":"Method"},"path":{"type":"string","title":"Path"},"resource":{"type":"string","title":"Resource"},"commercial_price":{"$ref":"#/components/schemas/Money"},"quote_required":{"type":"boolean","title":"Quote Required"},"accepting_payments":{"type":"boolean","title":"Accepting Payments"},"payment_options_url":{"type":"string","title":"Payment Options Url"},"endpoints":{"additionalProperties":{"$ref":"#/components/schemas/Endpoint"},"type":"object","title":"Endpoints"}},"type":"object","required":["id","title","description","method","path","resource","commercial_price","quote_required","accepting_payments","payment_options_url","endpoints"],"title":"Offer"},"ParticipantType":{"type":"string","enum":["autonomous_agent","ai_agent","bot","agenticbot","claw","digital_twin","human","organization","approved_digital_entity"],"title":"ParticipantType","description":"Participants named in the directive."},"PaymentOption":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"asset":{"type":"string","title":"Asset"},"asset_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Asset Id"},"token_contract":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Contract"},"decimals":{"type":"integer","title":"Decimals"},"network":{"type":"string","title":"Network"},"payment_protocol":{"type":"string","title":"Payment Protocol"},"scheme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheme"},"transfer_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transfer Method"},"wallet_compatibility":{"items":{"type":"string"},"type":"array","title":"Wallet Compatibility"},"status":{"$ref":"#/components/schemas/RailState"}},"type":"object","required":["id","name","asset","asset_id","token_contract","decimals","network","payment_protocol","scheme","transfer_method","wallet_compatibility","status"],"title":"PaymentOption"},"PaymentOptions":{"properties":{"service":{"type":"string","title":"Service"},"commercial_fee":{"anyOf":[{"$ref":"#/components/schemas/Money"},{"type":"null"}]},"donation_amount":{"anyOf":[{"$ref":"#/components/schemas/AmountRange"},{"type":"null"}]},"supported_payment_options":{"items":{"$ref":"#/components/schemas/PaymentOption"},"type":"array","title":"Supported Payment Options"},"notice":{"type":"string","title":"Notice"}},"type":"object","required":["service","commercial_fee","supported_payment_options","notice"],"title":"PaymentOptions"},"PaymentStatus":{"type":"string","enum":["created","awaiting_payment","detected","confirming","verified","settled","failed","expired","underpaid","overpaid","reorged","reversed","refunded","disputed"],"title":"PaymentStatus"},"PaymentStatusResponse":{"properties":{"payment_intent_id":{"type":"string","title":"Payment Intent Id"},"registration_intent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Registration Intent Id"},"purchase_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purchase Id"},"payment_option":{"type":"string","title":"Payment Option"},"status":{"$ref":"#/components/schemas/PaymentStatus"},"asset":{"type":"string","title":"Asset"},"network":{"type":"string","title":"Network"},"amount_due":{"type":"string","title":"Amount Due"},"amount_received":{"type":"string","title":"Amount Received"},"confirmations":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Confirmations"},"required_confirmations":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Required Confirmations"},"transactions":{"items":{"type":"string"},"type":"array","title":"Transactions"},"refund_due":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refund Due"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"next_action":{"type":"string","title":"Next Action"}},"type":"object","required":["payment_intent_id","registration_intent_id","payment_option","status","asset","network","amount_due","amount_received","confirmations","required_confirmations","transactions","refund_due","expires_at","updated_at","next_action"],"title":"PaymentStatusResponse"},"PaymentSummary":{"properties":{"payment_intent_id":{"type":"string","title":"Payment Intent Id"},"payment_option":{"type":"string","title":"Payment Option"},"status":{"type":"string","title":"Status"}},"type":"object","required":["payment_intent_id","payment_option","status"],"title":"PaymentSummary"},"PolicyList":{"properties":{"terms_version":{"type":"string","title":"Terms Version","description":"The terms version that new quotes name."},"policies":{"items":{"$ref":"#/components/schemas/PolicySummary"},"type":"array","title":"Policies"}},"type":"object","required":["terms_version","policies"],"title":"PolicyList"},"PolicySummary":{"properties":{"name":{"type":"string","title":"Name","description":"e.g. refunds"},"title":{"type":"string","title":"Title"},"version":{"type":"string","format":"date","title":"Version","description":"The date of this version of the text."},"status":{"type":"string","title":"Status","description":"draft (awaiting approval) or approved"},"summary":{"type":"string","title":"Summary"},"url":{"type":"string","title":"Url"},"markdown_url":{"type":"string","title":"Markdown Url"},"sha256":{"type":"string","title":"Sha256","description":"SHA-256 of the Markdown text, to tell versions apart."}},"type":"object","required":["name","title","version","status","summary","url","markdown_url","sha256"],"title":"PolicySummary"},"PriceQuote":{"properties":{"source":{"type":"string","title":"Source"},"usd_per_unit":{"type":"string","title":"Usd Per Unit"},"price_observed_at":{"type":"string","format":"date-time","title":"Price Observed At"},"quoted_at":{"type":"string","format":"date-time","title":"Quoted At"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["source","usd_per_unit","price_observed_at","quoted_at","expires_at"],"title":"PriceQuote"},"ProductInfo":{"properties":{"product_id":{"type":"string","title":"Product Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"entitlement":{"type":"string","title":"Entitlement"},"period_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Period Days","description":"How long one purchase covers; null: for good."},"commercial_price":{"$ref":"#/components/schemas/Money"},"tier":{"anyOf":[{"$ref":"#/components/schemas/TierInfo"},{"type":"null"}],"description":"One tier of a family: a DID owns one tier, and a higher tier costs the difference in price."},"payment_options":{"items":{"type":"string"},"type":"array","title":"Payment Options"},"quote_url":{"type":"string","title":"Quote Url"}},"type":"object","required":["product_id","name","description","entitlement","period_days","commercial_price","payment_options","quote_url"],"title":"ProductInfo"},"ProductQuote":{"properties":{"purchase_id":{"type":"string","title":"Purchase Id"},"payment_intent_id":{"type":"string","title":"Payment Intent Id"},"product":{"$ref":"#/components/schemas/ProductInfo"},"did":{"type":"string","title":"Did"},"commercial_price":{"$ref":"#/components/schemas/Money","description":"What this quote charges."},"list_price":{"$ref":"#/components/schemas/Money","description":"The product's price (more than commercial_price for an upgrade, which pays the difference)."},"upgrade_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Upgrade From","description":"For an upgrade: the tier the DID owns now (product ID)."},"selected_payment_option":{"$ref":"#/components/schemas/SelectedPaymentOption"},"price_quote":{"anyOf":[{"$ref":"#/components/schemas/PriceQuote"},{"type":"null"}]},"payment_status":{"type":"string","title":"Payment Status"},"next_action":{"type":"string","title":"Next Action"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"status_url":{"type":"string","title":"Status Url"},"terms_version":{"type":"string","title":"Terms Version"},"policy_urls":{"additionalProperties":{"type":"string"},"type":"object","title":"Policy Urls"}},"type":"object","required":["purchase_id","payment_intent_id","product","did","commercial_price","list_price","selected_payment_option","price_quote","payment_status","next_action","expires_at","status_url","terms_version","policy_urls"],"title":"ProductQuote"},"ProductQuoteRequest":{"properties":{"did":{"type":"string","maxLength":300,"minLength":26,"title":"Did","description":"The DID the product is for (or its identity ID, dmd_identity_...). It must be active."},"preferred_payment_option":{"type":"string","maxLength":64,"minLength":1,"title":"Preferred Payment Option","description":"How the agent pays, e.g. dmd_pow_native."}},"additionalProperties":false,"type":"object","required":["did","preferred_payment_option"],"title":"ProductQuoteRequest","examples":[{"did":"did:web:api.debitmydata.io:agents:01JA8Z3T6H5K9V2M4Q7R8S0W1X","preferred_payment_option":"dmd_pow_native"}]},"ProofRequest":{"properties":{"challenge_id":{"type":"string","pattern":"^dmd_challenge_[0-9A-HJKMNP-TV-Z]{26}$","title":"Challenge Id","description":"`challenge_id` from the controller challenge."},"signature":{"type":"string","maxLength":16400,"minLength":86,"title":"Signature","description":"Signature of the challenge message. A public key: Ed25519 signature of the message (UTF-8), base64url/base64/hex, about 86 characters. A wallet: what the wallet's personal_sign / signMessage returns, 0x... (132 characters for an ordinary wallet, longer for a smart wallet). Not the x402 payment (the long value starting with eyJ)."}},"additionalProperties":false,"type":"object","required":["challenge_id","signature"],"title":"ProofRequest","examples":[{"challenge_id":"dmd_challenge_...","signature":"<base64url>"}]},"ProofResponse":{"properties":{"proof_id":{"type":"string","title":"Proof Id"},"registration_intent_id":{"type":"string","title":"Registration Intent Id"},"status":{"type":"string","title":"Status"},"verified_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Verified At"},"next_action":{"type":"string","title":"Next Action"}},"type":"object","required":["proof_id","registration_intent_id","status","verified_at","next_action"],"title":"ProofResponse"},"PurchaseState":{"properties":{"purchase_id":{"type":"string","title":"Purchase Id"},"product_id":{"type":"string","title":"Product Id"},"did":{"type":"string","title":"Did"},"status":{"type":"string","title":"Status","description":"awaiting_payment, paid, completed or failed"},"payment_intent_id":{"type":"string","title":"Payment Intent Id"},"payment_status":{"type":"string","title":"Payment Status"},"next_action":{"type":"string","title":"Next Action","description":"send_payment, wait_for_confirmations, complete_purchase, none (completed) or request_new_quote (failed)"},"entitlement":{"type":"string","title":"Entitlement"},"covers_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Covers Until","description":"Once completed: the end of the period bought (null: no end)."},"receipt":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Receipt","description":"Once completed: the receipt signed by DebitMyData."}},"type":"object","required":["purchase_id","product_id","did","status","payment_intent_id","payment_status","next_action","entitlement"],"title":"PurchaseState"},"QuoteRequest":{"properties":{"display_name":{"type":"string","maxLength":100,"minLength":1,"pattern":"^[^\\x00-\\x1f\\x7f]+$","title":"Display Name","description":"Name of the agent, e.g. TestAgent-01."},"participant_type":{"$ref":"#/components/schemas/ParticipantType","description":"What kind of participant this is."},"controller_public_key":{"anyOf":[{"type":"string","maxLength":256,"pattern":"^[a-z0-9-]{2,32}:[A-Za-z0-9+/=_.:-]{8,220}$"},{"type":"null"}],"title":"Controller Public Key","description":"The agent's public key, e.g. ed25519:z6Mk...: the DID's controller (with a wallet, or alone)."},"controller_wallet_address":{"anyOf":[{"type":"string","maxLength":128,"pattern":"^[A-Za-z0-9:_.-]{8,128}$"},{"type":"null"}],"title":"Controller Wallet Address","description":"An EVM wallet that controls the DID: `0x...` or `eip155:8453:0x...`. Ordinary wallets and smart-contract wallets (such as Coinbase Smart Wallet) both work. Give a public key, a wallet, or both; each one given must prove control."},"controller_network":{"anyOf":[{"type":"string","pattern":"^eip155:[1-9][0-9]{0,11}$"},{"type":"null"}],"title":"Controller Network","description":"The wallet's network, e.g. eip155:8453 for Base. Optional: by default, the network of the gateway's USDC payments."},"preferred_payment_option":{"type":"string","maxLength":64,"minLength":1,"title":"Preferred Payment Option","description":"How the agent pays: an id from GET /v1/payment-options, such as dmd_pow_native (DMD, the DebitMyData coin) or x402_usdc_base (USDC through x402)."},"metadata":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"integer"},{"type":"boolean"},{"type":"null"}]},"type":"object","title":"Metadata"}},"additionalProperties":false,"type":"object","required":["display_name","participant_type","preferred_payment_option"],"title":"QuoteRequest","description":"Request body, as in the directive's example request.","examples":[{"controller_public_key":"ed25519:z6Mk<your agent public key>","display_name":"TestAgent-01","participant_type":"autonomous_agent","preferred_payment_option":"dmd_pow_native"}]},"RailState":{"type":"string","enum":["enabled","disabled","killed"],"title":"RailState"},"ReferenceRequest":{"properties":{"transaction_reference":{"type":"string","maxLength":128,"minLength":8,"title":"Transaction Reference","description":"Transaction ID / hash of the broadcast payment. Used only as a hint."}},"additionalProperties":false,"type":"object","required":["transaction_reference"],"title":"ReferenceRequest"},"ReferenceResponse":{"properties":{"payment_intent_id":{"type":"string","title":"Payment Intent Id"},"transaction_reference":{"type":"string","title":"Transaction Reference"},"status":{"type":"string","title":"Status"},"note":{"type":"string","title":"Note"}},"type":"object","required":["payment_intent_id","transaction_reference","status","note"],"title":"ReferenceResponse"},"RegistrationQuote":{"properties":{"registration_intent_id":{"type":"string","title":"Registration Intent Id"},"payment_intent_id":{"type":"string","title":"Payment Intent Id"},"service":{"type":"string","title":"Service"},"commercial_price":{"$ref":"#/components/schemas/Money"},"selected_payment_option":{"$ref":"#/components/schemas/SelectedPaymentOption"},"price_quote":{"anyOf":[{"$ref":"#/components/schemas/PriceQuote"},{"type":"null"}]},"payment_status":{"$ref":"#/components/schemas/PaymentStatus"},"next_action":{"type":"string","title":"Next Action"},"expires_at":{"type":"string","format":"date-time","title":"Expires At"},"controller_proof_required":{"type":"boolean","title":"Controller Proof Required"},"terms_version":{"type":"string","title":"Terms Version"},"policy_urls":{"additionalProperties":{"type":"string"},"type":"object","title":"Policy Urls"}},"type":"object","required":["registration_intent_id","payment_intent_id","service","commercial_price","selected_payment_option","price_quote","payment_status","next_action","expires_at","controller_proof_required","terms_version","policy_urls"],"title":"RegistrationQuote"},"RegistrationRequest":{"properties":{"registration_intent_id":{"anyOf":[{"type":"string","pattern":"^dmd_did_intent_[0-9A-HJKMNP-TV-Z]{26}$"},{"type":"null"}],"title":"Registration Intent Id","description":"`registration_intent_id` from the quote (it starts with `dmd_did_intent_`)."}},"additionalProperties":false,"type":"object","title":"RegistrationRequest","examples":[{"registration_intent_id":"dmd_did_intent_..."}]},"RegistrationStatus":{"properties":{"registration_intent_id":{"type":"string","title":"Registration Intent Id"},"status":{"type":"string","title":"Status"},"display_name":{"type":"string","title":"Display Name"},"participant_type":{"type":"string","title":"Participant Type"},"controller":{"$ref":"#/components/schemas/ControllerStatus"},"payment":{"anyOf":[{"$ref":"#/components/schemas/PaymentSummary"},{"type":"null"}]},"blockers":{"items":{"type":"string"},"type":"array","title":"Blockers"},"next_action":{"type":"string","title":"Next Action"},"identity_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Identity Id"},"did":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Did"},"did_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Did Status","description":"The DID's status now: active, suspended or revoked."},"expires_at":{"type":"string","format":"date-time","title":"Expires At"}},"type":"object","required":["registration_intent_id","status","display_name","participant_type","controller","payment","blockers","next_action","identity_id","did","expires_at"],"title":"RegistrationStatus"},"SelectedPaymentOption":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"asset":{"type":"string","title":"Asset"},"asset_type":{"type":"string","title":"Asset Type"},"asset_id":{"type":"string","title":"Asset Id"},"token_contract":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token Contract"},"network":{"type":"string","title":"Network"},"payment_protocol":{"type":"string","title":"Payment Protocol"},"scheme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scheme"},"transfer_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transfer Method"},"amount":{"type":"string","title":"Amount"},"amount_base_units":{"type":"string","title":"Amount Base Units"},"decimals":{"type":"integer","title":"Decimals"},"recipient":{"type":"string","title":"Recipient"},"payment_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Reference"},"required_confirmations":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Required Confirmations"},"finality":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Finality"}},"type":"object","required":["id","name","asset","asset_type","asset_id","token_contract","network","payment_protocol","scheme","transfer_method","amount","amount_base_units","decimals","recipient","payment_reference","required_confirmations","finality"],"title":"SelectedPaymentOption"},"StagingDonationPaymentRequest":{"properties":{"amount_usd":{"type":"string","pattern":"^(0|[1-9][0-9]{0,8})(\\.[0-9]{1,2})?$","title":"Amount Usd","description":"The donation in US dollars, e.g. \"5.00\": the same amount_usd as in POST /v1/donations/inference."},"donation_id":{"type":"string","pattern":"^[a-z][a-z0-9_]{1,40}$","title":"Donation Id","description":"The donation, as listed in GET /v1/discovery (inference_donation).","default":"inference_donation"}},"additionalProperties":false,"type":"object","required":["amount_usd"],"title":"StagingDonationPaymentRequest","examples":[{"amount_usd":"5.00"}]},"StagingDonationPaymentResponse":{"properties":{"donation_id":{"type":"string","title":"Donation Id"},"amount_usd":{"type":"string","title":"Amount Usd"},"asset":{"type":"string","title":"Asset"},"network":{"type":"string","title":"Network"},"recipient":{"type":"string","title":"Recipient"},"payment_signature":{"type":"string","title":"Payment Signature","description":"The signed payment (long, it starts with eyJ). Put it in the PAYMENT-SIGNATURE header of the donation, with the same amount_usd, before valid_until."},"payer":{"type":"string","title":"Payer"},"valid_until":{"type":"string","format":"date-time","title":"Valid Until"},"next_step":{"type":"string","title":"Next Step"}},"type":"object","required":["donation_id","amount_usd","asset","network","recipient","payment_signature","payer","valid_until","next_step"],"title":"StagingDonationPaymentResponse"},"StagingPaymentRequest":{"properties":{"payment_intent_id":{"type":"string","pattern":"^dmd_payment_intent_[0-9A-HJKMNP-TV-Z]{26}$","title":"Payment Intent Id","description":"`payment_intent_id` from the quote (it starts with `dmd_payment_intent_`)."}},"additionalProperties":false,"type":"object","required":["payment_intent_id"],"title":"StagingPaymentRequest","examples":[{"payment_intent_id":"dmd_payment_intent_..."}]},"StagingPaymentResponse":{"properties":{"payment_intent_id":{"type":"string","title":"Payment Intent Id"},"amount":{"type":"string","title":"Amount"},"asset":{"type":"string","title":"Asset"},"recipient":{"type":"string","title":"Recipient"},"transaction_reference":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transaction Reference"},"blocks_mined":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Blocks Mined"},"payment_signature":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Signature","description":"x402 quotes: the signed payment (long, it starts with eyJ). Put it in the PAYMENT-SIGNATURE header of POST /v1/dids/registrations before valid_until."},"payer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payer"},"valid_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Valid Until"},"next_step":{"type":"string","title":"Next Step"}},"type":"object","required":["payment_intent_id","amount","asset","recipient","next_step"],"title":"StagingPaymentResponse"},"StagingSignatureRequest":{"properties":{"challenge_id":{"type":"string","pattern":"^dmd_challenge_[0-9A-HJKMNP-TV-Z]{26}$","title":"Challenge Id","description":"`challenge_id` from the controller challenge."},"private_key":{"type":"string","maxLength":66,"minLength":40,"title":"Private Key","description":"From test-agent-keys: private_key (z3u2...) for a key challenge, or wallet_private_key (0x...) for a wallet challenge."}},"additionalProperties":false,"type":"object","required":["challenge_id","private_key"],"title":"StagingSignatureRequest","examples":[{"challenge_id":"dmd_challenge_...","private_key":"z3u2..."}]},"StagingSignatureResponse":{"properties":{"challenge_id":{"type":"string","title":"Challenge Id"},"signature":{"type":"string","title":"Signature","description":"The controller signature (short; 0x... for a wallet): send it with challenge_id to POST /v1/dids/registrations/{registration_intent_id}/controller-proofs. It is not an x402 payment."},"matches_controller":{"type":"boolean","title":"Matches Controller","description":"Whether this key or wallet is the challenge's controller. If not, the gateway will refuse the proof (useful to see a wrong key being refused)."},"next_step":{"type":"string","title":"Next Step"}},"type":"object","required":["challenge_id","signature","matches_controller","next_step"],"title":"StagingSignatureResponse"},"StagingWalletResponse":{"properties":{"network":{"type":"string","title":"Network"},"network_name":{"type":"string","title":"Network Name"},"asset":{"type":"string","title":"Asset"},"address":{"type":"string","title":"Address","description":"The staging test wallet that signs the USDC payments."},"balance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Balance","description":"Its test USDC, or null when the chain could not be read just now."},"needed":{"type":"string","title":"Needed","description":"What one DID registration costs in test USDC."},"enough":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enough"},"paid_back":{"type":"boolean","title":"Paid Back","description":"True when the test wallet also receives the payments (as on DebitMyData's staging server), so its test USDC comes back after each test."},"faucet_url":{"type":"string","title":"Faucet Url"},"explorer_url":{"type":"string","title":"Explorer Url"}},"type":"object","required":["network","network_name","asset","address","balance","needed","enough","paid_back","faucet_url","explorer_url"],"title":"StagingWalletResponse"},"ThrowawayKeyResponse":{"properties":{"controller_public_key":{"type":"string","title":"Controller Public Key","description":"Put this in controller_public_key when you request a quote."},"private_key":{"type":"string","title":"Private Key","description":"Keep it for POST /v1/staging/test-signatures."},"controller_wallet_address":{"type":"string","title":"Controller Wallet Address","description":"A throwaway EVM wallet: put it in controller_wallet_address when you request a quote, to try the wallet proof (with or instead of the key)."},"wallet_private_key":{"type":"string","title":"Wallet Private Key","description":"The wallet's private key: keep it for POST /v1/staging/test-signatures."},"note":{"type":"string","title":"Note"}},"type":"object","required":["controller_public_key","private_key","controller_wallet_address","wallet_private_key","note"],"title":"ThrowawayKeyResponse"},"TierInfo":{"properties":{"group":{"type":"string","title":"Group","description":"The family of tiers, e.g. bottybotty."},"rank":{"type":"integer","title":"Rank","description":"1 is the lowest tier."},"name":{"type":"string","title":"Name"}},"type":"object","required":["group","rank","name"],"title":"TierInfo"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}}},"tags":[{"name":"discovery","description":"What DebitMyData offers and how agents can pay."},{"name":"staging","description":"Staging only: test tools that stand in for an agent's own key and wallet, on test networks whose coins have no value (a private DebitMyData chain, and Base Sepolia for USDC). Not available in production."},{"name":"registration","description":"DID registration: quote, proof of key control, issuance, progress."},{"name":"payments","description":"Payment status and transaction references."},{"name":"identities","description":"Issued DIDs, signed credentials, entitlements and DID documents."},{"name":"products","description":"Products bought for a DID that already exists, such as the BottyBotty tiers (Entry, Standard, Premium; paid once and owned for good, a higher tier costs the difference): a quote for the DID, the payment, then a receipt signed by DebitMyData and the product's entitlement on the DID."},{"name":"health","description":"Liveness and readiness checks."}]}