{
  "schema": "artbitrage.answering-rhyme-statement-contract/1",
  "accepts_schema": "answering-rhyme.statement/1",
  "returns_schema": "artbitrage.answering-rhyme-statement-witness/1",
  "endpoint": "https://artbitrage.io/api/answering-rhymes/statements",
  "methods": [
    "GET",
    "POST"
  ],
  "content_type": "application/json",
  "canonicalization": {
    "version": "answering-rhyme.canonical-json/1",
    "encoding": "UTF-8",
    "object_keys": "recursively sorted lexically before JSON serialization",
    "arrays": "retain normalized order; evidence URL sets are trimmed, deduplicated, and lexically sorted during normalization",
    "strings": "Unicode NFC; surrounding whitespace removed; body line endings normalized to LF",
    "timestamps": "RFC3339 with an explicit offset, normalized to UTC milliseconds",
    "digest": "SHA-256 over canonical JSON bytes, serialized as sha256:<64 lowercase hexadecimal characters>"
  },
  "limits": {
    "request_bytes": 16384,
    "relation_key_characters": 256,
    "target_revision_characters": 100,
    "body_characters": 2000,
    "language_characters": 35,
    "declared_by_label_characters": 160,
    "urls_per_list": 12,
    "url_characters": 1000
  },
  "fields": [
    "schema",
    "canonicalization",
    "relation_key",
    "target_revision",
    "kind",
    "body",
    "language",
    "declared_by",
    "declared_at",
    "in_response_to",
    "evidence_urls",
    "authority_evidence_urls"
  ],
  "kinds": [
    "bless",
    "contextualize",
    "correct",
    "withdraw"
  ],
  "claimed_roles": [
    "viewer",
    "relation-curator",
    "card-rights-holder",
    "artwork-rights-holder",
    "source-institution",
    "other"
  ],
  "consequences": {
    "bless": {
      "consequence": "Records a portable expression of support in the returned receipt only. It does not grant copyright, reuse permission, ownership, or authority over the relation."
    },
    "contextualize": {
      "consequence": "Carries additional context in the returned receipt only. It does not amend the published relation or replace any source record."
    },
    "correct": {
      "consequence": "Carries a proposed correction in the returned receipt only. It does not overwrite the published relation; a receiving operator must review and publish any change."
    },
    "withdraw": {
      "consequence": "Carries a withdrawal request in the returned receipt only. It does not hide, delete, or de-index the relation; a receiving operator must verify authority and publish any change."
    }
  },
  "security": {
    "identity_authentication": false,
    "authority_verification": false,
    "evidence_urls_fetched": false,
    "application_persistence": false,
    "authoritative_effect": "none",
    "replay_detection": false,
    "uniqueness_not_asserted": true,
    "issuer_attestation": {
      "signed": false,
      "independently_verifiable": false
    },
    "note": "POST validates, normalizes, hashes, and returns an unsigned portable receipt. Artbitrage does not keep an application record or notify another system. Ordinary provider/access logs are outside that application-persistence claim."
  }
}