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.
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"
}