{
  "openapi": "3.1.0",
  "info": {
    "title": "EntityWiki",
    "version": "0.3",
    "description": "Implemented read surface of the Draft 0.3 demo. Writes, dumps and MCP are not implemented in this release.",
    "license": {
      "name": "EW-ATTR-1.0",
      "url": "https://www.entitywiki.com/license"
    }
  },
  "servers": [
    {
      "url": "https://www.entitywiki.com"
    }
  ],
  "paths": {
    "/e/{id}": {
      "get": {
        "summary": "Entity, content-negotiated (JSON default; .json .jsonld .md .txt .facts.jsonl .html); /e/{id}@{hash12} for a content-addressed version",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "v",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "known_at",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "as_of",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "as_of_mode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "epistemic",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "temporal",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "predicates",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "media",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "bare",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          },
          "400": {
            "description": "filters_unsupported_for_format"
          },
          "404": {
            "description": "No record (HTML shows a stub from inbound claims)"
          }
        }
      }
    },
    "/e/{id}/versions": {
      "get": {
        "summary": "Version list",
        "parameters": [
          {
            "name": "page",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/e/{id}/claims": {
      "get": {
        "summary": "Claims",
        "parameters": [
          {
            "name": "as_of",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "as_of_mode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "status",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "epistemic",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "temporal",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/e/{id}/claims/{predicate}": {
      "get": {
        "summary": "Claims by predicate",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/e/{id}/inbound": {
      "get": {
        "summary": "Inbound edges with claim id and revision",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/e/{id}/inbound/{predicate}": {
      "get": {
        "summary": "Inbound edges by predicate",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/e/{id}/media": {
      "get": {
        "summary": "Attachments with media objects",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/e/{id}/media/{mid}": {
      "get": {
        "summary": "One attachment",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/e/{id}/graph": {
      "get": {
        "summary": "Ego-subgraph under token, node, edge, read and time bounds",
        "parameters": [
          {
            "name": "depth",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_tokens",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_nodes",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_edges",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_reads",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "max_ms",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "as_of",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "as_of_mode",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "predicates",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "types",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "format",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/e/{id}/feed.xml": {
      "get": {
        "summary": "Atom feed",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/e/{id}/feed.rss": {
      "get": {
        "summary": "RSS feed",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/e/{id}/feed.json": {
      "get": {
        "summary": "JSON Feed",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/c/{claim_id}": {
      "get": {
        "summary": "Latest claim revision with revisions[] (.json, .txt)",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/c/{claim_id}@{rev}": {
      "get": {
        "summary": "Immutable claim revision",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/p/{predicate}": {
      "get": {
        "summary": "Predicate definition",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/p.json": {
      "get": {
        "summary": "Whole vocabulary",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/x/{scheme}/{value}": {
      "get": {
        "summary": "Unique scheme: 302 to the entity; shared scheme: 200 with candidates",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/fp/{kind}/{value}": {
      "get": {
        "summary": "Fingerprint pivot (404 for restricted kinds)",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/search": {
      "get": {
        "summary": "Alias, id, lookup and fingerprint match",
        "parameters": [
          {
            "name": "q",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/resolve": {
      "post": {
        "summary": "Batch resolve: id → unique xid → shared lookup candidates → alias",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "type": "object",
                "properties": {
                  "items": {
                    "type": "array"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/changes": {
      "get": {
        "summary": "Change events ascending",
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "entity_type",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/feed.xml": {
      "get": {
        "summary": "Global Atom feed",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/feed/type/{type}.xml": {
      "get": {
        "summary": "Per-type Atom feed",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "summary": "Agent index",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/license": {
      "get": {
        "summary": "License",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/TRAINING.md": {
      "get": {
        "summary": "Training terms",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/sitemap.xml": {
      "get": {
        "summary": "Sitemap",
        "parameters": [],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  }
}