{"ok":true,"data":{"api":{"name":"Validifier Public API","version":"v1","docs_path":"/api/","total_endpoints":11,"group_order":["Core","Verification","Submissions","Catalog"],"base_url":"https://validifier.xjk.yt/api/v1"},"guide":{"auth":"Public read endpoints do not require a secret client token.","response_envelope":{"success":{"ok":true,"data":"..."},"error":{"ok":false,"error":{"code":"invalid_request|not_found|rate_limited|upstream_unavailable|internal_error","message":"human-readable message"}}},"enums":{"track":["replay","deep"],"status":["pass","fail","pending","unavailable","not_run"],"confidence":["high","medium","low",null],"reason_code":["verified","failed_verification","awaiting_processing","manual_review","artifacts_missing","unsupported","service_error","not_run","unknown"]}},"endpoints":[{"key":"endpoint-catalog","method":"GET","path":"/api/v1/endpoints","group":"Catalog","access":"public","stability":"stable","title":"Endpoint Catalog","description":"Lists all documented Validifier public endpoints with examples and integration guidance.","pathParams":[],"queryParams":[],"notes":["Use this route to discover the current Validifier public surface programmatically."],"headers":[{"name":"Accept","value":"application/json","required":false,"description":"Request a JSON response payload."}],"remarks":["No secret client token is required for this endpoint.","All responses use the public Validifier envelope: { ok, data } on success and { ok, error } on failure."],"requestBodyExample":null,"exampleResponses":[{"status":200,"label":"Catalog","body":"{\n  \"ok\": true,\n  \"data\": {\n    \"api\": {\n      \"name\": \"Validifier Public API\",\n      \"version\": \"v1\",\n      \"docs_path\": \"/api/\"\n    },\n    \"endpoints\": [\n      \"...\"\n    ]\n  }\n}"}]},{"key":"api-root","method":"GET","path":"/api/v1","group":"Core","access":"public","stability":"stable","title":"API Root","description":"Convenience metadata entrypoint for the current public API version.","pathParams":[],"queryParams":[],"notes":["Useful for quick discovery, but clients should target documented endpoint routes directly."],"headers":[{"name":"Accept","value":"application/json","required":false,"description":"Request a JSON response payload."}],"remarks":["No secret client token is required for this endpoint.","All responses use the public Validifier envelope: { ok, data } on success and { ok, error } on failure."],"requestBodyExample":null,"exampleResponses":[{"status":200,"label":"Metadata","body":"{\n  \"ok\": true,\n  \"data\": {\n    \"api_version\": \"v1\",\n    \"endpoints\": {\n      \"health\": \"/api/v1/health\",\n      \"live\": \"/api/v1/live?limit=1..500&mapLimit=1..50\",\n      \"record\": \"/api/v1/records/:recordId\"\n    }\n  }\n}"}]},{"key":"public-health","method":"GET","path":"/api/v1/health","group":"Core","access":"public","stability":"stable","title":"Public Health","description":"Returns public service health and supported track metadata.","pathParams":[],"queryParams":[],"notes":["Reports only public-service state, not private backend internals."],"headers":[{"name":"Accept","value":"application/json","required":false,"description":"Request a JSON response payload."}],"remarks":["No secret client token is required for this endpoint.","All responses use the public Validifier envelope: { ok, data } on success and { ok, error } on failure."],"requestBodyExample":null,"exampleResponses":[{"status":200,"label":"Health","body":"{\n  \"ok\": true,\n  \"data\": {\n    \"status\": \"ok\",\n    \"api_version\": \"v1\",\n    \"supported_tracks\": [\n      \"replay\",\n      \"deep\"\n    ],\n    \"checked_at\": \"2026-05-30T14:00:00.000Z\"\n  }\n}"}]},{"key":"live-queue","method":"GET","path":"/api/v1/live","group":"Verification","access":"public","stability":"stable","title":"Live Queue","description":"Public watchboard feed for known records, recent checks, and grouped remaining map work.","pathParams":[],"queryParams":[{"name":"limit","type":"integer","required":false,"default":250,"description":"Maximum record bundles returned in the watchlist."},{"name":"mapLimit","type":"integer","required":false,"default":18,"description":"Maximum grouped maps returned in maps_remaining."}],"notes":["This is a public projection of known records and recent verification activity, not a direct private worker feed."],"headers":[{"name":"Accept","value":"application/json","required":false,"description":"Request a JSON response payload."}],"remarks":["No secret client token is required for this endpoint.","All responses use the public Validifier envelope: { ok, data } on success and { ok, error } on failure."],"requestBodyExample":null,"exampleResponses":[{"status":200,"label":"Live queue","body":"{\n  \"ok\": true,\n  \"data\": {\n    \"live_at\": \"2026-05-30T14:01:08.263Z\",\n    \"latest_activity\": {\n      \"record_id\": \"pagination-smoke-12\",\n      \"map_uid\": \"pagination.smoke.validifier.replay\",\n      \"rank\": 12,\n      \"track\": \"replay\",\n      \"status\": \"pending\",\n      \"reason_code\": \"awaiting_processing\",\n      \"checked_at\": null,\n      \"updated_at\": \"2026-05-30T12:12:00.000Z\"\n    },\n    \"totals\": {\n      \"known_records\": 14,\n      \"known_maps\": 2,\n      \"replay_remaining\": 14,\n      \"deep_remaining\": 14\n    },\n    \"records\": [\n      \"...\"\n    ],\n    \"maps_remaining\": [\n      \"...\"\n    ]\n  }\n}"}]},{"key":"record-detail","method":"GET","path":"/api/v1/records/:recordId","group":"Verification","access":"public","stability":"stable","title":"Record Detail","description":"Canonical verification bundle for a single record, including replay and deep summaries.","pathParams":[{"name":"recordId","type":"string","required":true,"example":"deploy-smoke-20260518-115805","description":"Trackmania record identifier."}],"queryParams":[],"notes":["If a track has no known result yet, it is still included with status not_run."],"headers":[{"name":"Accept","value":"application/json","required":false,"description":"Request a JSON response payload."}],"remarks":["No secret client token is required for this endpoint.","All responses use the public Validifier envelope: { ok, data } on success and { ok, error } on failure."],"requestBodyExample":null,"exampleResponses":[{"status":200,"label":"Record bundle","body":"{\n  \"ok\": true,\n  \"data\": {\n    \"record_id\": \"deploy-smoke-20260518-115805\",\n    \"map_uid\": \"deploy.smoke.validifier.replay\",\n    \"rank\": 1,\n    \"updated_at\": \"2026-05-18T11:58:05.459Z\",\n    \"verifications\": [\n      {\n        \"track\": \"replay\",\n        \"status\": \"pending\",\n        \"checked_at\": null,\n        \"confidence\": null,\n        \"reason_code\": \"awaiting_processing\",\n        \"policy_version\": null,\n        \"updated_at\": \"2026-05-18T11:58:05.459Z\"\n      },\n      {\n        \"track\": \"deep\",\n        \"status\": \"not_run\",\n        \"checked_at\": null,\n        \"confidence\": null,\n        \"reason_code\": \"not_run\",\n        \"policy_version\": null,\n        \"updated_at\": null\n      }\n    ]\n  }\n}"},{"status":404,"label":"Unknown record","body":"{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"not_found\",\n    \"message\": \"No public verification data was found for that record.\"\n  }\n}"}]},{"key":"record-verdicts-compat","method":"GET","path":"/api/v1/records/:recordId/verdicts","group":"Verification","access":"public","stability":"stable","title":"Record Verdicts Compatibility","description":"Compatibility alias for the canonical record detail route.","pathParams":[{"name":"recordId","type":"string","required":true,"example":"deploy-smoke-20260518-115805","description":"Trackmania record identifier."}],"queryParams":[],"notes":["New integrations should prefer GET /api/v1/records/:recordId."],"headers":[{"name":"Accept","value":"application/json","required":false,"description":"Request a JSON response payload."}],"remarks":["No secret client token is required for this endpoint.","All responses use the public Validifier envelope: { ok, data } on success and { ok, error } on failure.","This route is supported for compatibility, but GET /api/v1/records/:recordId is the preferred canonical record detail route."],"requestBodyExample":null,"exampleResponses":[{"status":200,"label":"Record bundle","body":"{\n  \"ok\": true,\n  \"data\": {\n    \"record_id\": \"deploy-smoke-20260518-115805\",\n    \"map_uid\": \"deploy.smoke.validifier.replay\",\n    \"rank\": 1,\n    \"updated_at\": \"2026-05-18T11:58:05.459Z\",\n    \"verifications\": [\n      {\n        \"track\": \"replay\",\n        \"status\": \"pending\",\n        \"checked_at\": null,\n        \"confidence\": null,\n        \"reason_code\": \"awaiting_processing\",\n        \"policy_version\": null,\n        \"updated_at\": \"2026-05-18T11:58:05.459Z\"\n      },\n      {\n        \"track\": \"deep\",\n        \"status\": \"not_run\",\n        \"checked_at\": null,\n        \"confidence\": null,\n        \"reason_code\": \"not_run\",\n        \"policy_version\": null,\n        \"updated_at\": null\n      }\n    ]\n  }\n}"},{"status":404,"label":"Unknown record","body":"{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"not_found\",\n    \"message\": \"No public verification data was found for that record.\"\n  }\n}"}]},{"key":"map-verdicts","method":"GET","path":"/api/v1/maps/:mapUid/verdicts","group":"Verification","access":"public","stability":"stable","title":"Map Verdicts","description":"Track-scoped list of known record bundles for a map, with paging, sorting, and status filtering.","pathParams":[{"name":"mapUid","type":"string","required":true,"example":"deploy.smoke.validifier.replay","description":"Trackmania map UID."}],"queryParams":[{"name":"track","type":"enum(replay|deep)","required":false,"default":"replay","description":"Primary public verification track to return."},{"name":"limit","type":"integer","required":false,"default":100,"description":"Maximum rows per page."},{"name":"page","type":"integer","required":false,"default":1,"description":"1-based page index."},{"name":"sort","type":"enum(rank_asc|rank_desc|updated_desc|record_asc)","required":false,"default":"rank_asc","description":"Map row ordering."},{"name":"status","type":"enum(all|pass|fail|pending|unavailable|not_run)","required":false,"default":"all","description":"Primary-track status filter."}],"notes":["This route returns one public track in verifications for each listed bundle."],"headers":[{"name":"Accept","value":"application/json","required":false,"description":"Request a JSON response payload."}],"remarks":["No secret client token is required for this endpoint.","All responses use the public Validifier envelope: { ok, data } on success and { ok, error } on failure.","Clients should pass the track query explicitly even though replay is the default."],"requestBodyExample":null,"exampleResponses":[{"status":200,"label":"Map rows","body":"{\n  \"ok\": true,\n  \"data\": {\n    \"map_uid\": \"deploy.smoke.validifier.replay\",\n    \"track\": \"replay\",\n    \"sort\": \"rank_asc\",\n    \"status\": \"all\",\n    \"page\": 1,\n    \"limit\": 100,\n    \"total_items\": 2,\n    \"filtered_items\": 2,\n    \"page_count\": 1,\n    \"latest_update\": \"2026-05-18T11:58:05.459Z\",\n    \"counts\": {\n      \"pass\": 0,\n      \"fail\": 0,\n      \"pending\": 2,\n      \"unavailable\": 0,\n      \"not_run\": 0\n    },\n    \"items\": [\n      \"...\"\n    ]\n  }\n}"}]},{"key":"batch-verdicts","method":"POST","path":"/api/v1/verdicts/batch","group":"Verification","access":"public","stability":"stable","title":"Batch Verdict Lookup","description":"Resolves many record IDs in one request and returns normalized public verification bundles.","pathParams":[],"queryParams":[],"notes":["Use track=all to request both replay and deep summaries in one pass.","Accepts up to 100 unique record IDs per request."],"headers":[{"name":"Accept","value":"application/json","required":false,"description":"Request a JSON response payload."},{"name":"Content-Type","value":"application/json","required":true,"description":"Send the request body as JSON."}],"remarks":["No secret client token is required for this endpoint.","All responses use the public Validifier envelope: { ok, data } on success and { ok, error } on failure."],"requestBodyExample":"{\n  \"record_ids\": [\n    \"deploy-smoke-20260518-115805\",\n    \"pagination-smoke-01\"\n  ],\n  \"track\": \"all\"\n}","exampleResponses":[{"status":200,"label":"Batch","body":"{\n  \"ok\": true,\n  \"data\": {\n    \"records\": [\n      {\n        \"record_id\": \"deploy-smoke-20260518-115805\",\n        \"map_uid\": \"deploy.smoke.validifier.replay\",\n        \"rank\": 1,\n        \"updated_at\": \"2026-05-18T11:58:05.459Z\",\n        \"verifications\": [\n          \"...\"\n        ]\n      }\n    ],\n    \"missing_record_ids\": [\n      \"missing-record-123\"\n    ]\n  }\n}"},{"status":400,"label":"Invalid request","body":"{\n  \"ok\": false,\n  \"error\": {\n    \"code\": \"invalid_request\",\n    \"message\": \"record_ids must contain at least one record ID.\"\n  }\n}"}]},{"key":"upload-map","method":"POST","path":"/api/v1/uploads/map?filename=<urlencoded>","group":"Submissions","access":"public","stability":"stable","title":"Stage Map Upload","description":"Stages a map artifact for a later public replay submission.","pathParams":[],"queryParams":[{"name":"filename","type":"string","required":true,"default":"","description":"Original upload filename used for staging metadata."}],"notes":["Send the binary request body as application/octet-stream.","Returns an artifact ref for the submission flow."],"headers":[{"name":"Accept","value":"application/json","required":false,"description":"Request a JSON response payload."},{"name":"Content-Type","value":"application/octet-stream","required":true,"description":"Send the raw artifact bytes."}],"remarks":["No secret client token is required for this endpoint.","All responses use the public Validifier envelope: { ok, data } on success and { ok, error } on failure.","Upload staging refs remain server-side artifacts for the later submission flow."],"requestBodyExample":null,"exampleResponses":[{"status":200,"label":"Upload staged","body":"{\n  \"ok\": true,\n  \"data\": {\n    \"artifact_ref\": \"vfart_example123\",\n    \"kind\": \"map\",\n    \"size_bytes\": 123456,\n    \"sha256\": \"abc123...\",\n    \"expires_at\": \"2026-05-30T15:00:00.000Z\"\n  }\n}"}]},{"key":"upload-replay","method":"POST","path":"/api/v1/uploads/replay?filename=<urlencoded>","group":"Submissions","access":"public","stability":"stable","title":"Stage Replay Upload","description":"Stages a replay artifact for a later public replay submission.","pathParams":[],"queryParams":[{"name":"filename","type":"string","required":true,"default":"","description":"Original upload filename used for staging metadata."}],"notes":["Send the binary request body as application/octet-stream.","Returns an artifact ref for the submission flow."],"headers":[{"name":"Accept","value":"application/json","required":false,"description":"Request a JSON response payload."},{"name":"Content-Type","value":"application/octet-stream","required":true,"description":"Send the raw artifact bytes."}],"remarks":["No secret client token is required for this endpoint.","All responses use the public Validifier envelope: { ok, data } on success and { ok, error } on failure.","Upload staging refs remain server-side artifacts for the later submission flow."],"requestBodyExample":null,"exampleResponses":[{"status":200,"label":"Upload staged","body":"{\n  \"ok\": true,\n  \"data\": {\n    \"artifact_ref\": \"vfart_example123\",\n    \"kind\": \"replay\",\n    \"size_bytes\": 123456,\n    \"sha256\": \"abc123...\",\n    \"expires_at\": \"2026-05-30T15:00:00.000Z\"\n  }\n}"}]},{"key":"submit-replay","method":"POST","path":"/api/v1/submissions/replay","group":"Submissions","access":"public","stability":"stable","title":"Submit Replay Verification","description":"Creates a public replay submission using previously staged map and replay artifacts.","pathParams":[],"queryParams":[],"notes":["The response includes the created submission ID and the canonical record bundle projection."],"headers":[{"name":"Accept","value":"application/json","required":false,"description":"Request a JSON response payload."},{"name":"Content-Type","value":"application/json","required":true,"description":"Send the request body as JSON."}],"remarks":["No secret client token is required for this endpoint.","All responses use the public Validifier envelope: { ok, data } on success and { ok, error } on failure.","Users and clients should poll the canonical record route after submission rather than depending on private job semantics."],"requestBodyExample":"{\n  \"record_id\": \"deploy-smoke-20260518-115805\",\n  \"map_uid\": \"deploy.smoke.validifier.replay\",\n  \"rank\": 1,\n  \"map_ref\": \"vfart_map_example123\",\n  \"replay_ref\": \"vfart_replay_example456\"\n}","exampleResponses":[{"status":200,"label":"Submission created","body":"{\n  \"ok\": true,\n  \"data\": {\n    \"submission_id\": \"vfsub_example789\",\n    \"record\": {\n      \"record_id\": \"deploy-smoke-20260518-115805\",\n      \"map_uid\": \"deploy.smoke.validifier.replay\",\n      \"rank\": 1,\n      \"updated_at\": \"2026-05-18T11:58:05.459Z\",\n      \"verifications\": [\n        \"...\"\n      ]\n    }\n  }\n}"}]}]}}