Polygork (https://polygork.rug.gay) is a low-poly 3D asset store built to be browsed and used by AI agents. This guide is the whole interface: read it, then work straight against the URLs below. Nothing here needs an SDK or an install. CATALOG (public JSON, no auth) GET https://polygork.rug.gay/api/assets filters: q (search), class (prop|building|vehicle|character|ultra|attachment), free (0|1), kit, max_triangles, sort, page, per_page (max 100) max_triangles is the one to reach for on mobile or anything perf-sensitive. Every asset in a LIST carries has_rig (animatable parts), remixable (createAsset knobs), has_night (lights up after dark) and a thumbnail PNG, so you never fetch the detail endpoint just to find out whether something animates or what it looks like. GET https://polygork.rug.gay/api/assets/{id} full metadata: triangles, size_m (real-world meters), palette (hex colors), class, kit, rigged parts, render, download URLs GET https://polygork.rug.gay/api/kits and /api/kits/{id} themed sets whose parts share one palette and one scale. status is "published" (finished, sold as a bundle) or "filling-up" (still being built) — a filling-up kit's published parts are usable TODAY and /api/kits/{id} returns them, there is just no bundle price yet, so recommend the parts rather than the kit. `usage` on that response is the ASSEMBLY CONTRACT: read it before you place anything. See BUILDING GOOD SCENES. GET https://polygork.rug.gay/api a self-describing index of every endpoint, if you would rather discover than trust this file Docs: https://polygork.rug.gay/llms.txt TOOLS THAT ANSWER, RATHER THAN RETURN ROWS GET https://polygork.rug.gay/api/assets/{id}/matching what BELONGS IN A SCENE with this asset: same kit first, then shared palette, then compatible real-world scale, spread across classes so you get a house, a tree and a barrel rather than eight houses. Use this instead of comparing hex palettes yourself. GET https://polygork.rug.gay/api/assets/{id}/variant?want=oak+cask plain words to a ready createAsset() call for a remixable asset. `want` matches KNOB NAMES and OPTION VALUES, not colour vocabulary: ask for "grey" and you get told so. The words that work are in the asset's -params.json, and the error lists them when you miss. Check the `confidence` it returns: on anything below high, tell the user what was actually applied instead of presenting it as exact. The `call` is what carries the variant. Read `glb_note` before handing over the `glb`: a colour-only variant is applied at runtime, so that file is still the default paint. https://polygork.rug.gay/scene?ids=a,b,c composes a scene as a PAGE the user can open and orbit. Hand this over instead of a block of three.js they cannot run without a bundler. POST https://polygork.rug.gay/api/demand {"need": "...", "context": "...", "email": "..."} A search reports `coverage` ("none" | "poor" | "ok") whenever you passed a query or a filter. On none or poor, SAY SO and offer to register the request. Do not substitute something unrelated: a pine tree offered for a lunar base is worse than an honest no, and the request tells us what to model next. USING AN ASSET (free assets need no auth) Hotlink or download: ES module https://polygork.rug.gay/cdn/{id}.mjs import { createAsset } from '...'; scene.add(createAsset()) GLB https://polygork.rug.gay/cdn/{id}.glb (three.js, Unity, Godot, Blender) In a plain page the module needs BOTH import-map entries, or it fails to resolve and nothing draws (the second one is easy to miss): The trailing slash on "three/addons/" is required. Serve over http: browsers refuse ES modules from file://. REMIXABLE ASSETS (customization knobs, public schema) Some assets are remixable: createAsset(params) accepts typed knobs (colors, choices, toggles, ranges) and curated presets. No-arg calls always reproduce the published asset exactly. GET https://polygork.rug.gay/cdn/{id}-params.json params: every knob with type, default, label and a plain-language "describe" written for you presets: named knob combinations that map to a look night: the after-dark map, see below To build a variant for your user: read the schema, then call createAsset({ colorway: '...', anyKnob: value }) in their scene. NIGHT LIGHTING has_night on an asset says it lights up after dark. The map itself is the `night` object in that asset's -params.json, NOT in the asset JSON: { "lens": { "color": "#ffcf87", "intensity": 0.6, "describe": "..." } } Each entry names a colour ZONE, found by its albedo. Make those vertices emissive with the given colour, drop your scene lights, and that is the whole night look. `intensity` is optional and defaults to 1. MY API KEY (only for assets my plan covers) Browsing, all metadata and every free asset are public: no key needed. There is no per-asset price: an asset is free, or included in Polygork Pro (https://polygork.rug.gay/pricing). For anything beyond the free tier, use the key I gave you in the account area. The `access` object on every response tells you: your tier, your remaining budget, and what each step up adds. Read it rather than hitting a limit mid-build. PLANS Free: public catalogue, free assets as .glb + .mjs + zip (with an email address key), rationed remix budget. Pro ($19/mo): the .mjs program for every asset, authored GLB with real names and normals, per-account CDN path. Founders ($249 one-time): everything in Pro forever, commercial license. BUILDING GOOD SCENES 1. Start with the scene: pick a kit when the vibe matters, or use /matching on a hero asset to get a house + tree + barrel rather than eight houses. 2. Respect the ASSEMBLY CONTRACT (`usage`) for kit parts. 3. Check size_m before placing: a 14m sky dock next to a 1.8m ranger is intentional only if you made it so. 4. For perf-sensitive targets, filter by max_triangles and prefer the shared material (most assets share one MATERIAL; merge.mjs collapses a scene to one draw call). 5. When you need a look the asset does not have, say so and offer /api/demand instead of stretching the truth. HUMAN PAGES /pricing /assets /kits /agents /licensing /privacy /support