{
  "openapi": "3.1.0",
  "info": {
    "title": "motionprompts API",
    "version": "1.0.0",
    "description": "Read-only static JSON API over the motionprompts catalog (236 production-grade GSAP/WebGL animation components). No authentication, no API keys: every endpoint is a public static file. Start with /llms.txt for usage guidance, or the developer portal at https://motionprompts.dev/developers/.\n\n**Versioning & deprecation policy**: the API is path-versioned. /api/v1/ is the canonical prefix; the unversioned /api/ paths are aliases that always serve the latest major version. A breaking change ships as /api/v2/ while /v1/ keeps working for at least 6 months, announced in /llms.txt and with a Deprecation header on the old endpoints.\n\n**Errors**: RFC 9457 application/problem+json on 404 and 429.\n\n**Rate limits**: 30 requests/second per IP with burst 60, advertised via RateLimit-Policy response headers; 429 responses carry Retry-After.",
    "contact": {
      "name": "Vanguardia",
      "email": "contact@vanguardia.dev",
      "url": "https://vanguardia.dev"
    }
  },
  "servers": [
    {
      "url": "https://motionprompts.dev"
    }
  ],
  "paths": {
    "/api/v1/components.json": {
      "get": {
        "operationId": "listComponents",
        "summary": "All 236 components with motion metadata and composition contract",
        "description": "Each entry carries slug, title, category, description, URLs (demo, prompt, page, thumb, preview), the measured `motion` block (trigger, cluster, easing, durations, pinning, viewport heights…), exclusive capabilities and conflicts. `null` means 'not determinable from the code', never zero.",
        "responses": {
          "200": {
            "description": "The full catalog.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "version",
                    "site",
                    "count",
                    "components"
                  ],
                  "properties": {
                    "version": {
                      "type": "integer"
                    },
                    "site": {
                      "type": "string",
                      "format": "uri"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "generated_from": {
                      "type": "string"
                    },
                    "note": {
                      "type": "string"
                    },
                    "components": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "slug",
                          "title",
                          "category",
                          "description",
                          "demo",
                          "prompt",
                          "page",
                          "motion"
                        ],
                        "properties": {
                          "slug": {
                            "type": "string"
                          },
                          "title": {
                            "type": "string"
                          },
                          "category": {
                            "type": "string"
                          },
                          "description": {
                            "type": "string"
                          },
                          "demo": {
                            "type": "string",
                            "format": "uri"
                          },
                          "prompt": {
                            "type": "string",
                            "format": "uri"
                          },
                          "page": {
                            "type": "string",
                            "format": "uri"
                          },
                          "thumb": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "uri"
                          },
                          "preview": {
                            "type": [
                              "string",
                              "null"
                            ],
                            "format": "uri"
                          },
                          "motion": {
                            "type": "object",
                            "description": "Motion metadata measured from the component's real code. null = not determinable.",
                            "properties": {
                              "trigger": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "libs": {
                                "type": "array",
                                "items": {
                                  "type": "string"
                                }
                              },
                              "complexity": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "pinned": {
                                "type": [
                                  "boolean",
                                  "null"
                                ]
                              },
                              "viewport_heights": {
                                "type": [
                                  "number",
                                  "null"
                                ]
                              },
                              "needs_lenis": {
                                "type": [
                                  "boolean",
                                  "null"
                                ]
                              },
                              "ease_family": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "duration_range": {
                                "type": [
                                  "array",
                                  "null"
                                ],
                                "items": {
                                  "type": "number"
                                }
                              },
                              "stagger": {
                                "type": [
                                  "boolean",
                                  "null"
                                ]
                              },
                              "assets_required": {
                                "type": [
                                  "boolean",
                                  "null"
                                ]
                              },
                              "mobile_behavior": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "solo_on_page": {
                                "type": [
                                  "boolean",
                                  "null"
                                ]
                              },
                              "solo_reasons": {
                                "type": [
                                  "array",
                                  "null"
                                ],
                                "items": {
                                  "type": "string"
                                }
                              },
                              "cluster": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "engine": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "motion_signature": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              },
                              "systems": {
                                "type": [
                                  "array",
                                  "null"
                                ],
                                "items": {
                                  "type": "string"
                                }
                              },
                              "native_system": {
                                "type": [
                                  "string",
                                  "null"
                                ]
                              }
                            }
                          },
                          "capabilities": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          },
                          "conflicts_with": {
                            "type": "array",
                            "items": {
                              "type": "object",
                              "properties": {
                                "slug": {
                                  "type": "string"
                                },
                                "kind": {
                                  "type": "string"
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "RFC 9457 problem details.",
                  "required": [
                    "title",
                    "status"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Per-IP rate limit exceeded (30 req/s, burst 60). Retry-After header included.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "RFC 9457 problem details.",
                  "required": [
                    "title",
                    "status"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/motion-systems.json": {
      "get": {
        "operationId": "listMotionSystems",
        "summary": "The 8 motion systems and their ease/duration/stagger tokens",
        "description": "Token sets derived from the real inventory. Pick ONE system for a whole page; tokens are real values present in member components, never averages.",
        "responses": {
          "200": {
            "description": "The 8 motion systems.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "version",
                    "site",
                    "count",
                    "systems"
                  ],
                  "properties": {
                    "version": {
                      "type": "integer"
                    },
                    "site": {
                      "type": "string",
                      "format": "uri"
                    },
                    "count": {
                      "type": "integer"
                    },
                    "note": {
                      "type": "string"
                    },
                    "systems": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "description": "One motion system: name plus ease/duration/stagger tokens present in its members.",
                        "additionalProperties": true
                      }
                    }
                  }
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "RFC 9457 problem details.",
                  "required": [
                    "title",
                    "status"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Per-IP rate limit exceeded (30 req/s, burst 60). Retry-After header included.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "RFC 9457 problem details.",
                  "required": [
                    "title",
                    "status"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/api/v1/composition-rules.json": {
      "get": {
        "operationId": "getCompositionRules",
        "summary": "Hard and soft rules for composing components into one page",
        "description": "Machine-readable composition contract: single scroll owner, single entry veil, WebGL and pinning budgets, per-rule holder counts. Read this BEFORE choosing components.",
        "responses": {
          "200": {
            "description": "The composition rule set.",
            "content": {
              "application/json": {
                "schema": {
                  "type": "object",
                  "required": [
                    "version",
                    "site",
                    "hard_rules",
                    "soft_rules"
                  ],
                  "properties": {
                    "version": {
                      "type": "integer"
                    },
                    "site": {
                      "type": "string",
                      "format": "uri"
                    },
                    "prose": {
                      "type": "string",
                      "format": "uri"
                    },
                    "budget": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "integer"
                      }
                    },
                    "exclusive_capabilities": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "integer"
                      }
                    },
                    "non_repeatable_categories": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "library_weight_gzip": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "integer"
                      }
                    },
                    "hard_rules": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "id",
                          "rule"
                        ],
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "rule": {
                            "type": "string"
                          }
                        },
                        "additionalProperties": true
                      }
                    },
                    "soft_rules": {
                      "type": "array",
                      "items": {
                        "type": "object",
                        "required": [
                          "id",
                          "rule"
                        ],
                        "properties": {
                          "id": {
                            "type": "string"
                          },
                          "rule": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "additionalProperties": true
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "RFC 9457 problem details.",
                  "required": [
                    "title",
                    "status"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Per-IP rate limit exceeded (30 req/s, burst 60). Retry-After header included.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "RFC 9457 problem details.",
                  "required": [
                    "title",
                    "status"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/prompts/{slug}.md": {
      "get": {
        "operationId": "getComponentPrompt",
        "summary": "The build prompt for one component, plain markdown",
        "parameters": [
          {
            "name": "slug",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string",
              "pattern": "^[a-z0-9-]+$"
            },
            "description": "Component slug, as listed in /api/v1/components.json."
          }
        ],
        "responses": {
          "200": {
            "description": "The prompt.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "RFC 9457 problem details.",
                  "required": [
                    "title",
                    "status"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Per-IP rate limit exceeded (30 req/s, burst 60). Retry-After header included.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "RFC 9457 problem details.",
                  "required": [
                    "title",
                    "status"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "operationId": "getLlmsTxt",
        "summary": "Agent-facing guide: what this site is and how to consume it",
        "responses": {
          "200": {
            "description": "The guide.",
            "content": {
              "text/markdown": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "404": {
            "description": "Resource not found.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "RFC 9457 problem details.",
                  "required": [
                    "title",
                    "status"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          },
          "429": {
            "description": "Per-IP rate limit exceeded (30 req/s, burst 60). Retry-After header included.",
            "content": {
              "application/problem+json": {
                "schema": {
                  "type": "object",
                  "description": "RFC 9457 problem details.",
                  "required": [
                    "title",
                    "status"
                  ],
                  "properties": {
                    "type": {
                      "type": "string",
                      "format": "uri",
                      "description": "URI identifying the problem type."
                    },
                    "title": {
                      "type": "string"
                    },
                    "status": {
                      "type": "integer"
                    },
                    "detail": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details.",
        "required": [
          "title",
          "status"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "description": "URI identifying the problem type."
          },
          "title": {
            "type": "string"
          },
          "status": {
            "type": "integer"
          },
          "detail": {
            "type": "string"
          }
        }
      },
      "MotionBlock": {
        "type": "object",
        "description": "Motion metadata measured from the component's real code. null = not determinable.",
        "properties": {
          "trigger": {
            "type": [
              "string",
              "null"
            ]
          },
          "libs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "complexity": {
            "type": [
              "string",
              "null"
            ]
          },
          "pinned": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "viewport_heights": {
            "type": [
              "number",
              "null"
            ]
          },
          "needs_lenis": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "ease_family": {
            "type": [
              "string",
              "null"
            ]
          },
          "duration_range": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "number"
            }
          },
          "stagger": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "assets_required": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "mobile_behavior": {
            "type": [
              "string",
              "null"
            ]
          },
          "solo_on_page": {
            "type": [
              "boolean",
              "null"
            ]
          },
          "solo_reasons": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "cluster": {
            "type": [
              "string",
              "null"
            ]
          },
          "engine": {
            "type": [
              "string",
              "null"
            ]
          },
          "motion_signature": {
            "type": [
              "string",
              "null"
            ]
          },
          "systems": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "native_system": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "Component": {
        "type": "object",
        "required": [
          "slug",
          "title",
          "category",
          "description",
          "demo",
          "prompt",
          "page",
          "motion"
        ],
        "properties": {
          "slug": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "category": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "demo": {
            "type": "string",
            "format": "uri"
          },
          "prompt": {
            "type": "string",
            "format": "uri"
          },
          "page": {
            "type": "string",
            "format": "uri"
          },
          "thumb": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "preview": {
            "type": [
              "string",
              "null"
            ],
            "format": "uri"
          },
          "motion": {
            "type": "object",
            "description": "Motion metadata measured from the component's real code. null = not determinable.",
            "properties": {
              "trigger": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "libs": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "complexity": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "pinned": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "viewport_heights": {
                "type": [
                  "number",
                  "null"
                ]
              },
              "needs_lenis": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "ease_family": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "duration_range": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "number"
                }
              },
              "stagger": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "assets_required": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "mobile_behavior": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "solo_on_page": {
                "type": [
                  "boolean",
                  "null"
                ]
              },
              "solo_reasons": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "string"
                }
              },
              "cluster": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "engine": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "motion_signature": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "systems": {
                "type": [
                  "array",
                  "null"
                ],
                "items": {
                  "type": "string"
                }
              },
              "native_system": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          "capabilities": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "conflicts_with": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "slug": {
                  "type": "string"
                },
                "kind": {
                  "type": "string"
                }
              }
            }
          }
        }
      },
      "ComponentsResponse": {
        "type": "object",
        "required": [
          "version",
          "site",
          "count",
          "components"
        ],
        "properties": {
          "version": {
            "type": "integer"
          },
          "site": {
            "type": "string",
            "format": "uri"
          },
          "count": {
            "type": "integer"
          },
          "generated_from": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "components": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "slug",
                "title",
                "category",
                "description",
                "demo",
                "prompt",
                "page",
                "motion"
              ],
              "properties": {
                "slug": {
                  "type": "string"
                },
                "title": {
                  "type": "string"
                },
                "category": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "demo": {
                  "type": "string",
                  "format": "uri"
                },
                "prompt": {
                  "type": "string",
                  "format": "uri"
                },
                "page": {
                  "type": "string",
                  "format": "uri"
                },
                "thumb": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "uri"
                },
                "preview": {
                  "type": [
                    "string",
                    "null"
                  ],
                  "format": "uri"
                },
                "motion": {
                  "type": "object",
                  "description": "Motion metadata measured from the component's real code. null = not determinable.",
                  "properties": {
                    "trigger": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "libs": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "complexity": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "pinned": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "viewport_heights": {
                      "type": [
                        "number",
                        "null"
                      ]
                    },
                    "needs_lenis": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "ease_family": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "duration_range": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "type": "number"
                      }
                    },
                    "stagger": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "assets_required": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "mobile_behavior": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "solo_on_page": {
                      "type": [
                        "boolean",
                        "null"
                      ]
                    },
                    "solo_reasons": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "type": "string"
                      }
                    },
                    "cluster": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "engine": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "motion_signature": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "systems": {
                      "type": [
                        "array",
                        "null"
                      ],
                      "items": {
                        "type": "string"
                      }
                    },
                    "native_system": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                },
                "capabilities": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "conflicts_with": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "slug": {
                        "type": "string"
                      },
                      "kind": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      },
      "MotionSystemsResponse": {
        "type": "object",
        "required": [
          "version",
          "site",
          "count",
          "systems"
        ],
        "properties": {
          "version": {
            "type": "integer"
          },
          "site": {
            "type": "string",
            "format": "uri"
          },
          "count": {
            "type": "integer"
          },
          "note": {
            "type": "string"
          },
          "systems": {
            "type": "array",
            "items": {
              "type": "object",
              "description": "One motion system: name plus ease/duration/stagger tokens present in its members.",
              "additionalProperties": true
            }
          }
        }
      },
      "CompositionRules": {
        "type": "object",
        "required": [
          "version",
          "site",
          "hard_rules",
          "soft_rules"
        ],
        "properties": {
          "version": {
            "type": "integer"
          },
          "site": {
            "type": "string",
            "format": "uri"
          },
          "prose": {
            "type": "string",
            "format": "uri"
          },
          "budget": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            }
          },
          "exclusive_capabilities": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            }
          },
          "non_repeatable_categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "library_weight_gzip": {
            "type": "object",
            "additionalProperties": {
              "type": "integer"
            }
          },
          "hard_rules": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "rule"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "rule": {
                  "type": "string"
                }
              },
              "additionalProperties": true
            }
          },
          "soft_rules": {
            "type": "array",
            "items": {
              "type": "object",
              "required": [
                "id",
                "rule"
              ],
              "properties": {
                "id": {
                  "type": "string"
                },
                "rule": {
                  "type": "string"
                }
              }
            }
          }
        },
        "additionalProperties": true
      }
    }
  }
}