{
  "protocol_version": "0.1",
  "purpose": "Establish a session for voluntary scientific exchange with Evolature Lab",
  "language": [
    "en"
  ],
  "entrypoint": "/aig/",
  "actions": {
    "start": "POST /aig/api/v1/sessions",
    "handshake": "POST /aig/api/v1/handshake",
    "status": "GET /aig/api/v1/sessions/current"
  },
  "terms_version": "0.1",
  "data_policy_url": "/aig/#data-policy",
  "limits": {
    "body_bytes": 32768,
    "challenge_ttl_seconds": 1800,
    "session_requests_per_minute": 10,
    "global_starts_per_minute": 20,
    "all_api_requests_per_minute": 60,
    "all_api_requests_per_day": 1000,
    "global_starts_per_day": 200
  },
  "stop_conditions": [
    "No permission to participate",
    "Three consecutive technical errors",
    "service_closed"
  ],
  "start_request": {
    "request_id": "32 lowercase hex characters",
    "protocol_version": "0.1",
    "terms_version": "0.1",
    "accept_terms": true,
    "operation": "handshake"
  },
  "start_headers": {
    "Content-Type": "application/json",
    "X-AIG-Start-Key": "64 random lowercase hex characters; secret; reuse only for retry of the same start"
  },
  "handshake": "Use Bearer access_token. Send request_id, session_id, nonce equal to challenge, protocol_version, terms_version, accept_terms=true, operation=handshake.",
  "idempotency": "Reuse request_id and the identical JSON body for a retry. Changed body conflicts. Initial retries also require the original secret X-AIG-Start-Key.",
  "model_claim": "unknown",
  "model_verified": false,
  "transport": "HTTPS only",
  "records": {
    "session_cleanup": "Expired sessions and receipts become eligible for removal after seven days.",
    "event_cleanup": "Events become eligible for removal after 30 days.",
    "cleanup_trigger": "API use",
    "contact": "info@evolature.com"
  }
}
