{
  "schema_version": 1,
  "origin": "https://swarm-forensics-lab.multi.fairystack.com",
  "auth": {
    "provider": "AuthReturn",
    "app_slug": "multi-swarm-forensics-lab",
    "header": "Authorization: Bearer <app-scoped producer key>"
  },
  "source_revision": "f30b7c2",
  "read": [
    "GET /api/catalog",
    "GET /api/artifacts/<id>"
  ],
  "analyze": {
    "method": "POST",
    "path": "/api/analyze",
    "stores_data": false,
    "operations": [
      {
        "operation": "validate",
        "kind": "replay | graph | dataset",
        "data": "object; datasets are table-name to record-array maps"
      },
      {
        "operation": "export-session",
        "session_id": "UUID",
        "archives": {
          "computer_use_sessions": [],
          "computer_use_turns": [],
          "agents": [],
          "events": []
        }
      }
    ]
  },
  "publish": {
    "method": "POST",
    "path": "/api/artifacts",
    "body": {
      "kind": "replay | graph | dataset",
      "title": "Reviewed evidence title",
      "synthetic": false,
      "visibility": "public",
      "data": "object; raw table map for dataset"
    },
    "warning": "All published data is public. Publish only deliberately approved evidence. Replay masking is heuristic and not a confidentiality guarantee.",
    "retry": "Identical content from the same producer reuses the artifact ID."
  },
  "remove": {
    "method": "DELETE",
    "path": "/api/artifacts/<id>",
    "authorization": "Artifact publisher only"
  },
  "limits": {
    "request_bytes": 1048576,
    "records": 2000,
    "graph_nodes": 300,
    "graph_edges": 1000,
    "graph_days": 366,
    "project_deadline_seconds": 15,
    "concurrent_operations": 2,
    "published_artifacts": 100
  },
  "errors": {
    "400": "Malformed JSON",
    "401": "Missing or invalid producer key",
    "403": "Different publisher",
    "404": "Unknown route or artifact",
    "409": "Artifact capacity reached",
    "413": "Input or output exceeds bounds",
    "415": "Use application/json",
    "422": "Project validation failed",
    "429": "Busy; retry later",
    "503": "Authentication or project runtime unavailable",
    "504": "Operation timed out"
  }
}
