Docs / Intent drift check
Meridian by MioDio's POST /v1/drift compares optional intent to an unsigned tx or EIP-712 payload and answers match, drift, or cannot_verify for $0.005 USDC on Base. Without intent it decodes common typed-data patterns and gives back risk_flags; a match is not a guarantee.
match, drift, or cannot_verify.risk_flags. It does not compare or verdict. Unknown primaryType is UNDECODED_CAUTION.JSON body required. anyOf requires one of tx, typed_data, or eip7702_authorization.
Properties: chain (base or ethereum), optional intent, tx, typed_data, eip7702_authorization (object or array).
Decoder caps (OpenAPI): body at most 20480 chars; tx.data at most 8192 bytes; typed JSON depth at most 8, nodes at most 200, object keys at most 32, array length at most 16; type/field/primaryType names at most 64 chars; array suffix depth at most 4; wei at most 2^256-1; eip7702_authorization length at most 16.
curl -s "https://meridian.miodiollc.com/v1/demo/drift"
curl -i -X POST "https://meridian.miodiollc.com/v1/drift" \
-H 'content-type: application/json' \
-d '{
"chain": "base",
"intent": {
"action": "transfer",
"recipient": "0x0000000000000000000000000000000000000001",
"token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "1000000",
"expected_contract": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
},
"tx": {
"to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"value": "0x0",
"data": "0xa9059cbb000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000f4240",
"chainId": 8453
}
}'
Unpaid -> HTTP 402 + PAYMENT-REQUIRED. Oversize body -> 400 before payment.
$0.005 USDC on Base (~5000 atomic). Network eip155:8453. Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913. payTo 0x4DA1ED782BD61BaE9AdD5a5CaBbCf32f767f8d7F.
See decoder caps above. Oversize drift body is 400 before payment. Invalid input after a payment header is 400 and not settled.
{
"card": "parameter_drift",
"status": "ok",
"chain": "base",
"verdict": "drift",
"diffs": [
{
"field": "recipient",
"intended": "0x0000000000000000000000000000000000000001",
"actual": "0x0000000000000000000000000000000000000002",
"severity": "high"
}
],
"decoded": {
"selector": "0xa9059cbb",
"function": "transfer",
"kind": "erc20_transfer",
"token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"recipient": "0x0000000000000000000000000000000000000002",
"amount": "1000000",
"unlimited": false
},
"flags": ["recipient_differs"],
"risk_flags": []
}
verdict is the answer. diffs lists each field that disagrees. A paid answer may also carry a signed Meridian-Receipt header.
Unpaid calls return HTTP 402 with PAYMENT-REQUIRED. Retry with PAYMENT-SIGNATURE.