{
  "product": "Specification (reference)",
  "title": "GraphQL API",
  "summary": "A typed query interface where the client states exactly what it needs.",
  "category": "protocols",
  "entries": [
    {
      "path": [
        "AI",
        "Schema",
        "Types, fields, interfaces, unions and enums"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Schema",
        "Nullability is explicit per field"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Schema",
        "Introspection, disableable in production"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Schema",
        "Deprecation with a reason, not removal"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Queries",
        "Nested selection with arguments and aliases"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Queries",
        "Variables and fragments"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Mutations",
        "Single-root mutation executed serially"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Subscriptions",
        "Server push over websocket or SSE"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Execution",
        "Partial results with a typed errors array"
      ],
      "value": "",
      "status": "yes",
      "note": "errors do not replace data"
    },
    {
      "path": [
        "AI",
        "Execution",
        "Batched resolution to avoid N+1 queries"
      ],
      "value": "",
      "status": "yes",
      "note": "dataloader pattern"
    },
    {
      "path": [
        "AI",
        "Pagination",
        "Cursor-based connections"
      ],
      "value": "",
      "status": "yes",
      "note": "not offset"
    },
    {
      "path": [
        "AI",
        "Safety",
        "Query depth and complexity limits"
      ],
      "value": "",
      "status": "yes",
      "note": "an unbounded query is a DoS"
    },
    {
      "path": [
        "AI",
        "Safety",
        "Persisted queries or an allowlist in production"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Safety",
        "Field-level authorisation, not just endpoint-level"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Caching",
        "Stable identifiers so clients can cache normalised"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    },
    {
      "path": [
        "AI",
        "Evolution",
        "Additive change without breaking existing clients"
      ],
      "value": "",
      "status": "yes",
      "note": ""
    }
  ]
}
