{
  "kind": "descriptor",
  "protocol": "kura.query/v1",
  "audience": "agent",
  "description": "One query document for every source. discover searches providers; search searches assets already in the pool. Callers are agents.",
  "scopes": [
    "discover",
    "search"
  ],
  "http": {
    "describe": "GET /api/query",
    "get": "GET /api/query?text=crate&kinds=model&rights.commercialUse=true",
    "post": "POST /api/query",
    "fetch": "GET /api/fetch?providerId=polyhaven&externalId=CheeseBox_01"
  },
  "defaults": {
    "scope": "discover",
    "limit": 20,
    "offset": 0
  },
  "limits": {
    "limit": {
      "min": 1,
      "max": 100
    },
    "offset": {
      "min": 0,
      "max": 100000
    }
  },
  "text": "Case-insensitive. Every whitespace-separated term must match the name, description, tags, or facets.",
  "query": {
    "text": "string",
    "kinds": [
      "image",
      "texture",
      "sprite",
      "atlas",
      "audio",
      "music",
      "model",
      "material",
      "shader",
      "font",
      "animation",
      "prefab",
      "scene",
      "video",
      "document",
      "pack",
      "other"
    ],
    "tags": "string[]",
    "facets": "record of string | number | boolean",
    "providerIds": "string[]",
    "rights": [
      "commercialUse",
      "redistribution",
      "attributionOk",
      "allowGenerated",
      "allowUnknownLicense",
      "licenseIds"
    ],
    "target": [
      "engine",
      "engineVersion",
      "platform"
    ],
    "constraints": [
      "maxBytes",
      "maxTextureSize",
      "maxPolygonCount",
      "transparent",
      "formats"
    ],
    "limit": "integer",
    "offset": "integer"
  },
  "rejected": [
    "native"
  ]
}