Api Endpoint

datoka-api.bhazarstudio.workers.dev

Datoka API: a portable signed commitment to a client-declared API exchange for response handoffs, archived decision inputs and change investigations. 0.002 USDC per receipt; offline verification is free. Keep original bytes locally. Does not prove provider origin or content truth. Retry with the same event, idempotency key and original payment authorization.

Open interactive test console

Offering

Provider
datoka-api.bhazarstudio.workers.dev
Method
POST
Offering type
Api Endpoint
Transport type
http
Category
Blockchain And Crypto
Delivery
Not provided
Pricing model
Not provided
x402 version
2

Endpoint context

URL
https://datoka-api.bhazarstudio.workers.dev/v1/operations/issue_api_receipt
MIME type
Not provided
First seen
2026-10-16T01:58:03.323Z
Last seen
Tags
None supplied

Payment pricing

x402 payment terms are the authoritative price for calling this endpoint.

Payment option 1
0.002 USDC
Atomic price: 2000 · Network: eip155:8453 · Asset: USDC · Scheme: exact
Raw x402 terms
[
  {
    "scheme": "exact",
    "network": "eip155:8453",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "2000",
    "payTo": "0x4a7A972F84E2A64b3B9B64AC1383Df5c413c0E59"
  }
]

Observed health

Status
Reachable
Latest latency
482 ms
Average latency
784 ms
HTTP status
405
Last checked
Reachability
100% over 15 checks

Latency is measured to the first response headers. A reachable result does not verify response accuracy or merchant identity.

Input schema

{
  "additionalProperties": false,
  "properties": {
    "body": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "properties": {
        "event": {
          "additionalProperties": false,
          "description": "Commitment-only HTTP exchange declaration built locally with the SDK. No raw URLs, headers or bodies.",
          "properties": {
            "apiId": {
              "description": "Caller-chosen API identifier; not a certified provider identity.",
              "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
              "type": "string"
            },
            "attestation": {
              "const": "client_declared",
              "description": "The caller declares the exchange; Datoka does not independently observe it.",
              "type": "string"
            },
            "bodyEncoding": {
              "const": "application_bytes",
              "description": "Hash application bytes after HTTP decoding, without JSON reserialization.",
              "type": "string"
            },
            "completedAt": {
              "description": "Declared UTC completion with milliseconds; must be at or after startedAt.",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$",
              "type": "string"
            },
            "exchangeId": {
              "description": "Stable identifier for one declared HTTP exchange.",
              "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
              "type": "string"
            },
            "headerEncoding": {
              "const": "jcs-selected-headers-v1",
              "description": "Use the SDK header selection and JCS canonicalization before hashing.",
              "type": "string"
            },
            "method": {
              "description": "Actual HTTP method of the locally captured exchange, for example GET.",
              "enum": [
                "GET",
                "HEAD",
                "POST",
                "PUT",
                "PATCH",
                "DELETE",
                "OPTIONS"
              ],
              "type": "string"
            },
            "requestBodyHash": {
              "anyOf": [
                {
                  "additionalProperties": false,
                  "properties": {
                    "algorithm": {
                      "const": "sha256",
                      "description": "Digest algorithm; always sha256.",
                      "type": "string"
                    },
                    "digest": {
                      "description": "SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.",
                      "pattern": "^[a-f0-9]{64}$",
                      "type": "string"
                    }
                  },
                  "required": [
                    "algorithm",
                    "digest"
                  ],
                  "type": "object"
                },
                {
                  "type": "null"
                }
              ],
              "description": "SHA-256 of exact application request bytes; null means no body, not an empty body."
            },
            "requestHeadersHash": {
              "additionalProperties": false,
              "description": "SHA-256 of locally canonicalized selected request headers. Never send raw headers.",
              "properties": {
                "algorithm": {
                  "const": "sha256",
                  "description": "Digest algorithm; always sha256.",
                  "type": "string"
                },
                "digest": {
                  "description": "SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.",
                  "pattern": "^[a-f0-9]{64}$",
                  "type": "string"
                }
              },
              "required": [
                "algorithm",
                "digest"
              ],
              "type": "object"
            },
            "responseBodyHash": {
              "anyOf": [
                {
                  "additionalProperties": false,
                  "properties": {
                    "algorithm": {
                      "const": "sha256",
                      "description": "Digest algorithm; always sha256.",
                      "type": "string"
                    },
                    "digest": {
                      "description": "SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.",
                      "pattern": "^[a-f0-9]{64}$",
                      "type": "string"
                    }
                  },
                  "required": [
                    "algorithm",
                    "digest"
                  ],
                  "type": "object"
                },
                {
                  "type": "null"
                }
              ],
              "description": "SHA-256 of exact application response bytes after HTTP decoding. Preserve those bytes; do not reserialize JSON."
            },
            "responseHeadersHash": {
              "additionalProperties": false,
              "description": "SHA-256 of locally canonicalized selected response headers.",
              "properties": {
                "algorithm": {
                  "const": "sha256",
                  "description": "Digest algorithm; always sha256.",
                  "type": "string"
                },
                "digest": {
                  "description": "SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.",
                  "pattern": "^[a-f0-9]{64}$",
                  "type": "string"
                }
              },
              "required": [
                "algorithm",
                "digest"
              ],
              "type": "object"
            },
            "startedAt": {
              "description": "Declared UTC start with milliseconds, for example 2026-10-07T08:00:00.000Z.",
              "format": "date-time",
              "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$",
              "type": "string"
            },
            "status": {
              "description": "Actual HTTP response status, including error responses; for example 200 or 404.",
              "maximum": 599,
              "minimum": 200,
              "type": "integer"
            },
            "targetHash": {
              "additionalProperties": false,
              "description": "SHA-256 of the exact UTF-8 target URL, computed locally. Never invent a digest or send the URL itself.",
              "properties": {
                "algorithm": {
                  "const": "sha256",
                  "description": "Digest algorithm; always sha256.",
                  "type": "string"
                },
                "digest": {
                  "description": "SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.",
                  "pattern": "^[a-f0-9]{64}$",
                  "type": "string"
                }
              },
              "required": [
                "algorithm",
                "digest"
              ],
              "type": "object"
            },
            "version": {
              "const": "datoka.api.exchange.v1",
              "description": "Declaration format version; preserve this literal.",
              "type": "string"
            }
          },
          "required": [
            "version",
            "attestation",
            "apiId",
            "exchangeId",
            "method",
            "status",
            "startedAt",
            "completedAt",
            "targetHash",
            "requestBodyHash",
            "responseBodyHash",
            "requestHeadersHash",
            "responseHeadersHash",
            "bodyEncoding",
            "headerEncoding"
          ],
          "type": "object"
        },
        "idempotencyKey": {
          "description": "One stable key per purchase, saved before payment. Keep it, the event and original payment authorization unchanged on retries.",
          "pattern": "^[\\x21-\\x7e]{16,200}$",
          "type": "string"
        }
      },
      "required": [
        "event",
        "idempotencyKey"
      ],
      "type": "object"
    },
    "bodyType": {
      "enum": [
        "json",
        "form-data",
        "text"
      ],
      "type": "string"
    },
    "method": {
      "enum": [
        "POST",
        "PUT",
        "PATCH"
      ],
      "type": "string"
    },
    "type": {
      "const": "http",
      "type": "string"
    }
  },
  "required": [
    "type",
    "method",
    "bodyType",
    "body"
  ],
  "type": "object"
}

Output schema

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "properties": {
    "input": {
      "additionalProperties": false,
      "properties": {
        "body": {
          "$schema": "https://json-schema.org/draft/2020-12/schema",
          "additionalProperties": false,
          "properties": {
            "event": {
              "additionalProperties": false,
              "description": "Commitment-only HTTP exchange declaration built locally with the SDK. No raw URLs, headers or bodies.",
              "properties": {
                "apiId": {
                  "description": "Caller-chosen API identifier; not a certified provider identity.",
                  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
                  "type": "string"
                },
                "attestation": {
                  "const": "client_declared",
                  "description": "The caller declares the exchange; Datoka does not independently observe it.",
                  "type": "string"
                },
                "bodyEncoding": {
                  "const": "application_bytes",
                  "description": "Hash application bytes after HTTP decoding, without JSON reserialization.",
                  "type": "string"
                },
                "completedAt": {
                  "description": "Declared UTC completion with milliseconds; must be at or after startedAt.",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$",
                  "type": "string"
                },
                "exchangeId": {
                  "description": "Stable identifier for one declared HTTP exchange.",
                  "pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$",
                  "type": "string"
                },
                "headerEncoding": {
                  "const": "jcs-selected-headers-v1",
                  "description": "Use the SDK header selection and JCS canonicalization before hashing.",
                  "type": "string"
                },
                "method": {
                  "description": "Actual HTTP method of the locally captured exchange, for example GET.",
                  "enum": [
                    "GET",
                    "HEAD",
                    "POST",
                    "PUT",
                    "PATCH",
                    "DELETE",
                    "OPTIONS"
                  ],
                  "type": "string"
                },
                "requestBodyHash": {
                  "anyOf": [
                    {
                      "additionalProperties": false,
                      "properties": {
                        "algorithm": {
                          "const": "sha256",
                          "description": "Digest algorithm; always sha256.",
                          "type": "string"
                        },
                        "digest": {
                          "description": "SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.",
                          "pattern": "^[a-f0-9]{64}$",
                          "type": "string"
                        }
                      },
                      "required": [
                        "algorithm",
                        "digest"
                      ],
                      "type": "object"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "SHA-256 of exact application request bytes; null means no body, not an empty body."
                },
                "requestHeadersHash": {
                  "additionalProperties": false,
                  "description": "SHA-256 of locally canonicalized selected request headers. Never send raw headers.",
                  "properties": {
                    "algorithm": {
                      "const": "sha256",
                      "description": "Digest algorithm; always sha256.",
                      "type": "string"
                    },
                    "digest": {
                      "description": "SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.",
                      "pattern": "^[a-f0-9]{64}$",
                      "type": "string"
                    }
                  },
                  "required": [
                    "algorithm",
                    "digest"
                  ],
                  "type": "object"
                },
                "responseBodyHash": {
                  "anyOf": [
                    {
                      "additionalProperties": false,
                      "properties": {
                        "algorithm": {
                          "const": "sha256",
                          "description": "Digest algorithm; always sha256.",
                          "type": "string"
                        },
                        "digest": {
                          "description": "SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.",
                          "pattern": "^[a-f0-9]{64}$",
                          "type": "string"
                        }
                      },
                      "required": [
                        "algorithm",
                        "digest"
                      ],
                      "type": "object"
                    },
                    {
                      "type": "null"
                    }
                  ],
                  "description": "SHA-256 of exact application response bytes after HTTP decoding. Preserve those bytes; do not reserialize JSON."
                },
                "responseHeadersHash": {
                  "additionalProperties": false,
                  "description": "SHA-256 of locally canonicalized selected response headers.",
                  "properties": {
                    "algorithm": {
                      "const": "sha256",
                      "description": "Digest algorithm; always sha256.",
                      "type": "string"
                    },
                    "digest": {
                      "description": "SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.",
                      "pattern": "^[a-f0-9]{64}$",
                      "type": "string"
                    }
                  },
                  "required": [
                    "algorithm",
                    "digest"
                  ],
                  "type": "object"
                },
                "startedAt": {
                  "description": "Declared UTC start with milliseconds, for example 2026-10-07T08:00:00.000Z.",
                  "format": "date-time",
                  "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d\\.\\d{3}(?:Z))$",
                  "type": "string"
                },
                "status": {
                  "description": "Actual HTTP response status, including error responses; for example 200 or 404.",
                  "maximum": 599,
                  "minimum": 200,
                  "type": "integer"
                },
                "targetHash": {
                  "additionalProperties": false,
                  "description": "SHA-256 of the exact UTF-8 target URL, computed locally. Never invent a digest or send the URL itself.",
                  "properties": {
                    "algorithm": {
                      "const": "sha256",
                      "description": "Digest algorithm; always sha256.",
                      "type": "string"
                    },
                    "digest": {
                      "description": "SHA-256 of exact locally captured bytes, encoded as 64 lowercase hexadecimal characters.",
                      "pattern": "^[a-f0-9]{64}$",
                      "type": "string"
                    }
                  },
                  "required": [
                    "algorithm",
                    "digest"
                  ],
                  "type": "object"
                },
                "version": {
                  "const": "datoka.api.exchange.v1",
                  "description": "Declaration format version; preserve this literal.",
                  "type": "string"
                }
              },
              "required": [
                "version",
                "attestation",
                "apiId",
                "exchangeId",
                "method",
                "status",
                "startedAt",
                "completedAt",
                "targetHash",
                "requestBodyHash",
                "responseBodyHash",
                "requestHeadersHash",
                "responseHeadersHash",
                "bodyEncoding",
                "headerEncoding"
              ],
              "type": "object"
            },
            "idempotencyKey": {
              "description": "One stable key per purchase, saved before payment. Keep it, the event and original payment authorization unchanged on retries.",
              "pattern": "^[\\x21-\\x7e]{16,200}$",
              "type": "string"
            }
          },
          "required": [
            "event",
            "idempotencyKey"
          ],
          "type": "object"
        },
        "bodyType": {
          "enum": [
            "json",
            "form-data",
            "text"
          ],
          "type": "string"
        },
        "method": {
          "enum": [
            "POST",
            "PUT",
            "PATCH"
          ],
          "type": "string"
        },
        "type": {
          "const": "http",
          "type": "string"
        }
      },
      "required": [
        "type",
        "method",
        "bodyType",
        "body"
      ],
      "type": "object"
    }
  },
  "required": [
    "input"
  ],
  "type": "object"
}