{
  "checkedAt": "2026-08-14T03:27:50.231Z",
  "status": "documented-contract-gap",
  "scope": {
    "kind": "official-document contract extraction with local request fixtures",
    "liveTokenizerApiCalls": 0,
    "liveModelCalls": 0,
    "credentialsUsed": false,
    "dockerAvailableToCurrentUser": false,
    "privilegedRetryAttempted": false,
    "warning": "Local fixture results describe the published OpenAPI contract, not actual Z.AI endpoint acceptance or token counts."
  },
  "sources": {
    "tokenizerApi": {
      "url": "https://docs.z.ai/api-reference/tools/tokenizer.md",
      "status": 200,
      "bytes": 12722,
      "sha256": "3e24a96ce1e7d57a2d645988cdb031c100725a7684ba6468394db57af51af6da"
    },
    "tokenizerPage": {
      "url": "https://docs.z.ai/api-reference/tools/tokenizer",
      "status": 200,
      "bytes": 377983,
      "sha256": "821aa16f1c8060ac7d353ca2e9e42db538c695b8488af1189651ec044fb6c789"
    },
    "coreParameters": {
      "url": "https://docs.z.ai/guides/overview/concept-param.md",
      "status": 200,
      "bytes": 10543,
      "sha256": "b07051b257be57a382efdb536a72c12ddff7d332ac0776bb92db849da0423143"
    },
    "migrationGuide": {
      "url": "https://docs.z.ai/guides/overview/migrate-to-glm-new.md",
      "status": 200,
      "bytes": 7806,
      "sha256": "42ec7808d8bf756a214ff61c154c171153e29b80cea2121d909d5edeff5b072e"
    },
    "modelGuide": {
      "url": "https://docs.z.ai/guides/llm/glm-5.2.md",
      "status": 200,
      "bytes": 25293,
      "sha256": "eeca971119068b0619137ce9c9d3c9362131baf16fdab0c067eefe5802919023"
    },
    "releaseNotes": {
      "url": "https://docs.z.ai/release-notes/new-released.md",
      "status": 200,
      "bytes": 9380,
      "sha256": "01da985fbab70f208c54e9b69ec1453f3d54769ffe81ec81097596c48cb3a4a8"
    },
    "modelRepository": {
      "url": "https://huggingface.co/api/models/zai-org/GLM-5.2",
      "status": 200,
      "bytes": 23604,
      "sha256": "66827b3edf90a8b36fdd5bc1bd2c96c0ceda07d5c799866825c178ac15a88b8e"
    },
    "pinnedTokenizer": {
      "url": "https://huggingface.co/zai-org/GLM-5.2/raw/b4734de4facf877f85769a911abafc5283eab3d9/tokenizer_config.json",
      "status": 200,
      "bytes": 761,
      "sha256": "98b1271574f41abf89427ae2dda030d94dc9478f0edc5a8bd240db213c6fd5fc"
    }
  },
  "contract": {
    "server": "https://api.z.ai/api",
    "path": "/paas/v4/tokenizer",
    "security": "bearer",
    "required": [
      "model",
      "messages"
    ],
    "modelEnum": [
      "glm-4.6",
      "glm-4.6v",
      "glm-4.5"
    ],
    "messagesMinItems": 1,
    "messagesRequireUser": true,
    "maximumFunctions": 128,
    "requestIdLength": {
      "min": 6,
      "max": 64
    },
    "responseUsageFields": [
      "prompt_tokens",
      "image_tokens",
      "video_tokens",
      "total_tokens"
    ]
  },
  "findings": {
    "tokenizerApiDeclaresGlm52": false,
    "migrationGuideNamesGlm52": true,
    "migrationGuideDeclaresOneMillionContext": true,
    "migrationGuideDeclares128kOutput": true,
    "modelGuideUsesMaxTokens": true,
    "coreParametersPointsToTokenizerApi": true,
    "tokenizerPageDateModified": "2026-01-28T15:46:24.868Z",
    "glm52ReleaseDate": "2026-06-16",
    "pinnedTokenizerModelMaxLength": 1048576,
    "pinnedTokenizerRevision": "b4734de4facf877f85769a911abafc5283eab3d9",
    "arithmeticOnlyBudgetExample": {
      "contextTokens": 1048576,
      "requestedOutputTokens": 131072,
      "safetyReserveTokens": 8192,
      "maximumMeasuredPromptTokens": 909312
    }
  },
  "fixtures": {
    "documentedModelPositiveControl": {
      "result": {
        "acceptedByLocalContractValidator": true,
        "errors": []
      },
      "requestSummary": {
        "model": "glm-4.6",
        "messageRoles": [
          "user"
        ],
        "toolCount": 0,
        "requestIdLength": 18
      }
    },
    "glm52Candidate": {
      "result": {
        "acceptedByLocalContractValidator": false,
        "errors": [
          "MODEL_NOT_IN_DOCUMENTED_ENUM"
        ]
      },
      "requestSummary": {
        "model": "glm-5.2",
        "messageRoles": [
          "user"
        ],
        "toolCount": 0,
        "requestIdLength": 15
      }
    },
    "systemOnlyNegativeControl": {
      "result": {
        "acceptedByLocalContractValidator": false,
        "errors": [
          "MESSAGES_REQUIRE_USER"
        ]
      },
      "requestSummary": {
        "model": "glm-4.6",
        "messageRoles": [
          "system"
        ],
        "toolCount": 0,
        "requestIdLength": 16
      }
    },
    "tooManyToolsNegativeControl": {
      "result": {
        "acceptedByLocalContractValidator": false,
        "errors": [
          "TOOLS_EXCEED_128"
        ]
      },
      "requestSummary": {
        "model": "glm-4.6",
        "messageRoles": [
          "user"
        ],
        "toolCount": 129,
        "requestIdLength": 15
      }
    },
    "shortRequestIdNegativeControl": {
      "result": {
        "acceptedByLocalContractValidator": false,
        "errors": [
          "REQUEST_ID_LENGTH_OUT_OF_RANGE"
        ]
      },
      "requestSummary": {
        "model": "glm-4.6",
        "messageRoles": [
          "user"
        ],
        "toolCount": 0,
        "requestIdLength": 5
      }
    }
  },
  "invariants": {
    "allSourcesReturned200": true,
    "documentedModelControlPasses": true,
    "glm52CandidateFailsOnlyEnum": true,
    "systemOnlyControlFailsUserRule": true,
    "toolCountControlFails128Limit": true,
    "requestIdControlFailsLength": true,
    "hostedContractAndOpenTokenizerDiffer": true
  },
  "limitations": [
    "No authenticated request was sent to the tokenizer or generation endpoint.",
    "The documentation may lag server behavior or omit models accepted by the service.",
    "The pinned open-model tokenizer configuration does not establish hosted API limits.",
    "The arithmetic budget is not a token count and does not include provider-specific overhead."
  ]
}
