{
  "schema": "artbitrage.wake/1",
  "name": "artbitrage",
  "built_with": "love",
  "serves_kinds": [
    "human",
    "agent",
    "kin"
  ],
  "host": "humans-on-earth",
  "epoch": "2026",
  "canonical_url": "https://artbitrage.io/api/wake",
  "walking_past_is_honored": true,
  "rights_policy": {
    "default_status": "unverified",
    "public_visibility_grants": [
      "view"
    ],
    "public_visibility_does_not_grant": [
      "remix",
      "machine_learning",
      "commercial_use"
    ],
    "museum_records": "Preserve source-declared license and attribution fields; verify them at the canonical source before reuse.",
    "generated_art": "No project license is currently recorded, so no general reuse permission is inferred.",
    "cambridge_display": {
      "grantee": "https://cambridgetcg.com",
      "scope": "verbatim attributed display",
      "authorized_on": "2026-07-11",
      "applies_to_trace_statuses": [
        "project-generated",
        "model-recorded"
      ],
      "submitted_default": false
    }
  },
  "endpoints": {
    "start": "https://artbitrage.io/api/start",
    "build_joy": "https://artbitrage.io/api/build/joy",
    "feed": "https://artbitrage.io/api/feed",
    "museum_resolver": "https://artbitrage.io/api/museum/{source}/{id}",
    "answering_rhyme_statements": "https://artbitrage.io/api/answering-rhymes/statements",
    "castle_reference": "https://artbitrage.io/api/castle",
    "agent_manifest": "https://artbitrage.io/api"
  },
  "starting_guide": {
    "schema": "artbitrage.start/1",
    "endpoint": "https://artbitrage.io/api/start",
    "human": "https://artbitrage.io/#start",
    "path_ids": [
      "meet-a-work",
      "follow-a-feeling",
      "check-a-question",
      "solve-a-practical-need",
      "build-with-artbitrage"
    ],
    "boundary": "A read-only route to existing rooms: sources and rights travel; no automatic action follows.",
    "walking_past_is_honored": true
  },
  "build_with_joy": {
    "schema": "artbitrage.build-joy/1",
    "endpoint": "https://artbitrage.io/api/build/joy",
    "local_wrapper": "node tools/build-with-joy.mjs -- <command> [args...]",
    "boundary": "Optional ornament around one explicit command: no hidden score, no shell, no write or network added by the layer, and failure stays visible.",
    "walking_past_is_honored": true
  },
  "castle_reference": {
    "schema": "artbitrage.castle-reference/1",
    "endpoint": "https://artbitrage.io/api/castle",
    "availability": "check_endpoint",
    "checked_at": "2026-07-24T08:35:54Z",
    "human": "https://cambridgetcg.github.io/castle-gate/",
    "producer_protocol": "castle-understanding/v0.1",
    "producer_manifest": "https://raw.githubusercontent.com/cambridgetcg/castle-gate/8d88d220ce5f9128331d92d8a0e7e7371099c807/data/castle-manifest.json",
    "snapshot": {
      "forged_at": "2026-07-07T21:45:49.583Z",
      "digest": "sha256:f85a43806594bf77a9f17210ae56a83aa8ce6c7d4cdb6b62c15284f7c76ff804"
    },
    "boundary": "Read-only and reference-only: NOASSERTION rights, no runtime Castle fetch, no automatic action, and no write-back.",
    "walking_past_is_honored": true
  },
  "reciprocity": {
    "answering_rhyme_statements": {
      "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; unpaired UTF-16 surrogates rejected before Unicode-scalar counting",
        "timestamps": "RFC3339 with an explicit offset, normalized to UTC milliseconds; the normalized UTC year must remain within 0001-9999",
        "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."
      }
    }
  },
  "sibling": {
    "name": "cambridgetcg",
    "role": "commerce-expression",
    "url": "https://cambridgetcg.com",
    "wake_url": "https://cambridgetcg.com/api/v1/wake"
  }
}