{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://artifacts.apis.io/hobbycardindex-com/json-schema/hobbycardindex-com-bulk-manifest-schema.json",
  "title": "BulkManifest",
  "x-generated": "2026-11-11",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/hobbycardindex-com-openapi.json#/components/schemas/BulkManifest",
  "type": "object",
  "properties": {
    "generatedAt": {
      "type": [
        "string",
        "null"
      ],
      "format": "date-time",
      "description": "When the files were last rebuilt; null with `pending: true` before the first build."
    },
    "durationMs": {
      "type": [
        "integer",
        "null"
      ],
      "description": "How long the build took."
    },
    "totalRows": {
      "type": [
        "integer",
        "null"
      ],
      "description": "Rows across every category."
    },
    "categories": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "category": {
            "type": "string",
            "description": "Category name."
          },
          "slug": {
            "type": "string",
            "description": "The slug GET /api/v1/bulk/prices/{category} takes."
          },
          "rows": {
            "type": "integer"
          },
          "parts": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "part": {
                  "type": "integer",
                  "description": "Pass as `?part=`."
                },
                "rows": {
                  "type": "integer"
                },
                "bytes": {
                  "type": "integer",
                  "description": "Gzipped size."
                },
                "filename": {
                  "type": "string",
                  "description": "The file's name."
                }
              }
            },
            "description": "Big categories are split into parts of about 500,000 rows."
          }
        },
        "required": [
          "category",
          "slug",
          "parts"
        ],
        "additionalProperties": true
      }
    },
    "pending": {
      "type": "boolean",
      "description": "true when no build has finished yet."
    }
  },
  "required": [
    "categories"
  ],
  "additionalProperties": true
}