API index fragment
{
"schemaVersion": 1,
"kind": "apiIndex",
"apiVersion": "v1",
"latestRelease": {
"version": "0.17r",
"releasedAt": "2026-10-01",
"detail": {
"path": "/api/v1/releases/latest.json",
"url": "https://pvzvoyage.com/api/v1/releases/latest.json"
}
},
"locales": {
"default": "zh",
"supported": [
{
"code": "zh",
"label": "简体中文",
"htmlLang": "zh-CN"
},
{
"code": "en",
"label": "English",
"htmlLang": "en"
}
]
},
"documentation": {
"en": {
"path": "/en/api-docs/",
"url": "https://pvzvoyage.com/en/api-docs/"
},
"zh": {
"path": "/zh/api-docs/",
"url": "https://pvzvoyage.com/zh/api-docs/"
},
"openapi": {
"path": "/api/openapi.json",
"url": "https://pvzvoyage.com/api/openapi.json"
}
},
"cache": {
"policies": {
"mutable": {
"browser": "public, max-age=300, stale-while-revalidate=3600",
"cdn": "public, max-age=3600, stale-while-revalidate=86400"
},
"diyList": {
"cacheControl": "public, max-age=60, s-maxage=300"
},
"diyDetail": {
"cacheControl": "public, max-age=300, s-maxage=3600"
},
"diyDownload": {
"cacheControl": "private, no-store"
},
"diyIcon": {
"cacheControl": "private, no-store"
},
"diyRuntimeConfig": {
"cacheControl": "private, no-store"
},
"diyUpload": {
"cacheControl": "private, no-store"
}
}
},
"families": [
{
"key": "release",
"schemaVersions": [
1,
2
],
"endpoints": [
{
"id": "releases-latest",
"cachePolicy": "mutable",
"methods": [
"GET",
"HEAD"
],
"pathTemplate": "/api/v1/releases/latest.json",
"schemaVersion": 1
},
{
"id": "updates-latest",
"cachePolicy": "mutable",
"methods": [
"GET",
"HEAD"
],
"pathTemplate": "/api/v1/updates/latest.json",
"schemaVersion": 2
}
]
},
{
"key": "diy",
"schemaVersions": [
1
],
"endpoints": [
{
"id": "diy-levels-list",
"cachePolicy": "diyList",
"methods": [
"GET",
"HEAD"
],
"pathTemplate": "/api/v1/diy/levels.json",
"schemaVersion": 1
},
{
"id": "diy-level-detail",
"cachePolicy": "diyDetail",
"methods": [
"GET",
"HEAD"
],
"pathTemplate": "/api/v1/diy/levels/{public_id}.json",
"schemaVersion": 1
},
{
"id": "diy-level-analysis",
"cachePolicy": "diyDetail",
"methods": [
"GET",
"HEAD"
],
"pathTemplate": "/api/v1/diy/levels/{public_id}/analysis.json",
"schemaVersion": 1
},
{
"id": "diy-level-download",
"cachePolicy": "diyDownload",
"methods": [
"GET",
"HEAD"
],
"pathTemplate": "/api/v1/diy/levels/{public_id}/{sha256}/download.gdf",
"schemaVersion": 1
},
{
"id": "diy-level-icon",
"cachePolicy": "diyIcon",
"methods": [
"GET",
"HEAD"
],
"pathTemplate": "/api/v1/diy/levels/{public_id}/{sha256}/icon",
"schemaVersion": 1
},
{
"id": "diy-runtime-config",
"cachePolicy": "diyRuntimeConfig",
"methods": [
"GET",
"HEAD"
],
"pathTemplate": "/api/v1/diy/runtime-config.json",
"schemaVersion": 1
},
{
"id": "diy-level-upload",
"cachePolicy": "diyUpload",
"methods": [
"POST"
],
"pathTemplate": "/api/v1/diy/levels",
"schemaVersion": 1
},
{
"id": "diy-owner-session",
"cachePolicy": "diyUpload",
"methods": [
"POST"
],
"pathTemplate": "/api/v1/diy/levels/{public_id}/owner/session",
"schemaVersion": 1
},
{
"id": "diy-owner-status",
"cachePolicy": "diyUpload",
"methods": [
"POST"
],
"pathTemplate": "/api/v1/diy/levels/{public_id}/owner/status",
"schemaVersion": 1
},
{
"id": "diy-owner-edit",
"cachePolicy": "diyUpload",
"methods": [
"POST"
],
"pathTemplate": "/api/v1/diy/levels/{public_id}/owner/edit",
"schemaVersion": 1
},
{
"id": "diy-owner-remove",
"cachePolicy": "diyUpload",
"methods": [
"POST"
],
"pathTemplate": "/api/v1/diy/levels/{public_id}/owner/remove",
"schemaVersion": 1
},
{
"id": "diy-owner-update",
"cachePolicy": "diyUpload",
"methods": [
"POST"
],
"pathTemplate": "/api/v1/diy/levels/{public_id}/owner/update",
"schemaVersion": 1
}
]
}
]
}