# Payment methods

A DebitMyData DID registration costs a fixed **25.00 USD**. You pay it in one of the
approved assets below, from the wallet you already use. You never have to buy DMD to pay
with another approved asset.

## Always get a quote first

Every payment starts with a quote (`POST /v1/dids/registration-quotes`). The quote states:

- the fixed price, 25.00 USD;
- the asset, the network and, for tokens, the token contract;
- the **exact amount** to pay in that asset;
- where to pay: a DMD address made for this quote only, or the x402 payment terms;
- how many confirmations the payment needs;
- for an asset that is not a US dollar stablecoin, the price used and when it was taken;
- when the quote expires (15 minutes after it was made);
- the terms version and the links to these policies.

Pay **exactly the quoted amount, in the quoted asset, on the quoted network, before the
quote expires.** Never pay an amount that was not quoted. A payment in another asset or on
another network is not credited and may not be recoverable.

The payment methods that are switched on right now are listed at
[`GET /v1/payment-options`](https://staging-api.debitmydata.io/v1/payment-options). A method can be paused at
any time, for example during maintenance or a network incident; a paused method is not
offered in new quotes.

## Approved methods

| Method | Asset | Network | Token contract | Confirmations |
| --- | --- | --- | --- | --- |
| DebitMyData coin (native PoW chain) (`dmd_pow_native`) | DMD | DebitMyData private test chain (no value) (`dmd:regtest`) | native coin | 6 |
| USDC via x402 on Base (`x402_usdc_base`) | USDC | Base Sepolia (test network, no value) (`eip155:84532`) | `0x036CbD53842c5426634e7929541eC2318f3dCF7e` | 2 |

### DMD, the DebitMyData coin, on the DebitMyData Proof-of-Work chain

DMD is the ticker of the DebitMyData coin, the native coin of DebitMyData's own
Proof-of-Work blockchain; its addresses start with `dm1`, and DebitMyData wallets show
amounts in DMD. It is not a token on Ethereum, Base or any other network, and it is
unrelated to other tokens that use the same ticker.

- Each quote has its own DMD address. Send the quoted amount to it from a DMD wallet.
- The amount in DMD comes from the DMD/USD reference price, published at
  [`GET /v1/prices/dmd-usd`](https://staging-api.debitmydata.io/v1/prices/dmd-usd). Until DMD has a market
  price, this reference price is the higher of DebitMyData's minimum rate of 0.001 USD per DMD and the cost of mining DMD: the electricity that the work of a block takes. While DMD is young and its mining power small, the minimum rate applies. It is recalculated every few minutes;
  no quote is made from a price older than 15 minutes. The quoted amount is rounded up to
  the next 0.00000001 DMD.
- The quoted amount must arrive in full: your wallet's network fee comes on top of it.
- If you sent too little, you can send the rest to the same address before the quote
  expires.
- You may report your transaction with `POST /v1/payments/{payment_intent_id}/references`.
  This only helps the gateway find it faster: every payment is checked on the chain.

### USDC through x402, on Base

- You pay with an x402-compatible wallet, such as a Coinbase agentic wallet. The
  registration request answers **402 Payment Required** with the payment terms; your
  wallet signs a USDC transfer of exactly the quoted amount (EIP-3009) and sends the
  request again with the signed payment.
- The payment is taken last, only once the DID can be issued: you prove control of your
  DID's controller first, so you are never charged for a DID that cannot be issued.
- The x402 facilitator submits the transfer and pays the network fee. The gateway then
  checks the transfer on the chain itself.

### Not yet available

Wrapped DMD on Base and USDC on Solana are planned. They are not accepted until each one
has passed its own review.

## Inference donations

Agents and other x402 wallets can donate towards the AI inference behind DebitMyData's
agentic services at `POST /v1/donations/inference`. People donate on debitmydata.com with
the "Inference $" button; that stays as it is.

- **No quote.** You choose the amount, `amount_usd`, from the minimum to the maximum
  listed under `donations` at [`GET /v1/discovery`](https://staging-api.debitmydata.io/v1/discovery). The
  request answers **402 Payment Required** with the x402 terms for exactly that amount.
- **USDC through x402, on Base.** Your wallet signs a USDC transfer of that amount
  (1 USD = 1 USDC) to DebitMyData's inference wallet, and sends the request again with the
  signed payment and the same amount. The facilitator submits it and pays the network
  fee; the gateway checks it on the chain like any other payment.
- **A signed receipt.** Once the payment is settled, the answer carries a receipt signed by
  DebitMyData (a verifiable credential), issued to the DID you name in `donor_did`, or
  else to the paying wallet. If confirmations take longer, the answer gives a `status_url`
  where the receipt appears.
- Sending the same signed payment again returns the same donation: it is never taken twice.

## When a payment counts

A payment counts once it is **settled**: the gateway has seen it on the chain itself, it
pays the quoted amount, and it has the required confirmations. You can follow it at
`GET /v1/payments/{payment_intent_id}`. A DID is only issued after the payment is settled
and every controller named in the quote has proved control.

Payments that are too large, too small, too late or sent twice are not credited to the
registration. See the [refund policy](https://staging-api.debitmydata.io/policies/refunds) for what happens to
them.

## Test networks

On the staging server, payments use test networks whose coins have no value: a private
DebitMyData test chain and Base Sepolia. Test payments never count on the production service.

## Questions

Write to <info@debitmydata.com> with your `payment_intent_id`.
