Reference

API

Stronghold holds fonts, gradients, palettes, icons and shaders. The API exists so they can leave the browser — converted into the formats your actual tools read, or bundled as one archive.

Recipes

Find assets

curl 'https://stronghold.manganum.com/api/palettes?q=sunset&limit=5'

Every list endpoint takes q, page and limit. Icons, palettes, shaders and patterns also take sort=random with a stable seed.

A palette for Illustrator

curl -OJ 'https://stronghold.manganum.com/api/export/palettes/<id>?format=ase'

-OJ keeps the filename the server sends. Double-click the .ase to load it as a colour group.

A whole icon set as one sprite

curl -OJ 'https://stronghold.manganum.com/api/export/icons?format=bundle&iconSet=lucide&limit=500'

Gives you sprite.svg, a CSS mask sheet, an Iconify collection and every individual SVG.

Selected icons as React components

curl -OJ -X POST 'https://stronghold.manganum.com/api/export/icons' \
  -H 'content-type: application/json' \
  -d '{"format":"react","ids":["<id>","<id>"]}'

POST when the id list would overflow a URL. Up to 2000 ids per request.

A gradient as a colour-grading LUT

curl -OJ 'https://stronghold.manganum.com/api/export/gradients/<id>?format=cube'

A 33³ 3D LUT mapping input luma onto the gradient. Load it in Resolve, Premiere, Final Cut or OBS.

A complete font family

curl -OJ 'https://stronghold.manganum.com/api/export/fonts/<id>?format=zip'

Every weight, @font-face CSS pointing at the bundled files, and a specimen page you can open offline.

A mixed selection as a style kit

curl -OJ -X POST 'https://stronghold.manganum.com/api/export/kit' \
  -H 'content-type: application/json' \
  -d '{"name":"Landing page","items":[
    {"type":"fonts","id":"<id>"},
    {"type":"palettes","id":"<id>"},
    {"type":"gradients","id":"<id>"}
  ]}'

One archive with each asset in its native format, plus a combined kit.css and an index.html overview.

Scripted access with an API key

curl 'https://stronghold.manganum.com/api/collections' \
  -H 'X-API-Key: ak_...' \
  -H 'X-Stronghold-User: <user uuid>'

An Alexandria key scoped to the stronghold app. The user header is only needed for per-user routes. Keys never grant admin.

Browsing

EndpointNotes
GET /api/fontsq, category, page, limit
GET /api/gradientsq, type, source
GET /api/palettesq, source, colors, sort, seed
GET /api/iconsq, set, sort, seed
GET /api/shadersq, source, type, language, sort
GET /api/patternsq, type, tile, source, sort (incl. tile-asc)
GET /api/assetsCounts of every type; with ?type=, a page of the eight types that have no endpoint of their own
GET /api/assets/{id}One asset, whichever type it belongs to
GET /api/fonts/css?ids=@font-face rules, or an @import for Google-hosted families
POST /api/uploadMultipart image or font, private to you; the bytes decide the type
GET /api/collectionsRequires a caller identity
POST /api/collections/{id}One { assetType, assetId }, or an items array of up to 200
GET /api/collections/{id}/exportThe whole collection as one style kit

Responses are { items, total, page, limit, pages }. limit is capped at 100. sort=random is seeded, so paging a shuffled list never repeats or skips an item — pass back the seed from filters to keep the same shuffle.

Exporting

EndpointNotes
GET /api/export/formatsThe catalog. Read this instead of hard-coding format ids.
GET /api/export/{type}/{id}?format=One asset
GET /api/export/{type}?format=&ids=Several assets merged into one file
GET /api/export/icons?format=&iconSet=A whole icon set, without listing ids
POST /api/export/{type}Same as GET, for id lists too long for a URL
POST /api/export/kitA mixed selection as one style-kit archive
GET /api/collections/{id}/exportA saved collection as a style kit

Raster and sampling parameters: width and height for PNG targets, steps when a gradient is reduced to discrete swatches. At most 2000 assets per request. Formats marked batch below can merge a selection; the rest handle one asset at a time.

Formats

Palettes

Design tools

formatfilewhat it isreads itbatch
ase.aseSwatch group for the Adobe appsIllustrator, Photoshop, InDesign, Affinityyes
aco.acoNamed swatches for the Swatches panelPhotoshopyes
act.actIndexed-colour table, capped at 256 entriesPhotoshop, GIF pipelinesyes
gpl.gplDrop into the palettes folderGIMP, Inkscape, Krita, MyPaintyes
pal.palClassic pixel-art palette formatPaint Shop Pro, Aseprite, GrafX2yes
soc.socCustom colour table for the Office suiteLibreOffice, OpenOfficeyes
sketchpalette.sketchpaletteFor the Sketch Palettes pluginSketchyes
procreate.swatchesSplits into palettes of 30, the Procreate limitProcreateyes

Code

formatfilewhat it isreads itbatch
css.cssCustom properties plus an all-stops listyes
scss.scssVariables plus a Sass mapyes
tailwind.jstheme.extend.colors blockTailwind CSS 3yes
tailwind4.css@theme block with --color-* tokensTailwind CSS 4yes
tokens.jsonW3C design-tokens draft formatTokens Studio, Style Dictionaryyes
swift.swiftColor extensionXcodeyes
kotlin.ktJetpack Compose Color valuesAndroid Studioyes

Image

formatfilewhat it isreads itbatch
svg.svgLabelled grid, for presentations
png.pngProportional bands, no text

Data

formatfilewhat it isreads itbatch
json.jsonHex, RGB, HSB and Lab for every colouryes
txt.txtOne hex value per lineyes

Gradients

Design tools

formatfilewhat it isreads itbatch
ggr.ggrSegment-based, keeps midpoints and alphaGIMP, Inkscape, Krita
ase.aseSampled into discrete swatchesIllustrator, Photoshopyes
gpl.gplSampled into 16 swatchesGIMP, Kritayes
cube.cube3D LUT mapping luma onto the gradientDaVinci Resolve, Premiere, Final Cut, OBS

Code

formatfilewhat it isreads itbatch
css.cssCustom property plus a utility classyes
tailwind.cssv4 @theme entry, with the v3 config in a commentTailwind CSSyes
blender.pyScript that builds the node, in linear colourBlender
swiftui.swiftGradient stops plus the matching shapeXcode
glsl.glslvec3 ramp(float t) for shadersShadertoy, TouchDesigner, WebGL
android.xmlShape drawable with start/center/endAndroid Studio

Image

formatfilewhat it isreads itbatch
svg.svgVector gradient, editable after importFigma, Illustrator, Inkscape
png.pngRendered raster, exact at both ends

Data

formatfilewhat it isreads itbatch
json.jsonStops, angle, interpolation space and CSSyes

Icons

Code

formatfilewhat it isreads itbatch
datauri.txtPercent-encoded, for CSS url()
datauri-base64.txtFor tools that reject percent-encoding
css.cssOne class per icon, recoloured by currentColoryes
css-bg.cssKeeps the icon’s own colours, for logosyes
react.zipOne .tsx per icon plus a barrel indexReact, Next.jsyes
svelte.zipOne .svelte per icon plus a barrel indexSvelte 5yes
vue.zipOne SFC per icon plus a barrel indexVue 3, Nuxtyes

Image

formatfilewhat it isreads itbatch
svg.svgSingle normalized iconFigma, Illustrator, Sketch

Bundles

formatfilewhat it isreads itbatch
sprite.svg<symbol> sheet for <use href="#id">yes
zip.zipIndividual files, grouped by setyes
bundle.zipSprite, CSS, Iconify JSON and every SVGyes

Data

formatfilewhat it isreads itbatch
iconify.jsonCollection JSON with shared dimensionsIconify, unplugin-icons, Figma Iconifyyes

Fonts

Code

formatfilewhat it isreads itbatch
css.cssPoints at this server; @import for Google familiesyes

Bundles

formatfilewhat it isreads itbatch
zip.zipEvery weight, @font-face CSS and a specimenyes
specimen.htmlSelf-contained weights and sizes preview

Data

formatfilewhat it isreads itbatch
json.jsonMetadata, weights, axes and file listyes

Shaders

Design tools

formatfilewhat it isreads itbatch
isf.fsInteractive Shader Format with a JSON headerVDMX, Resolume, CoGe, Millumin

Code

formatfilewhat it isreads itbatch
frag.fragStored code with a provenance header
standalone.fragUniform block and a real main()glslViewer, Bonzomatic, WebGL
shadertoy.glslPaste-ready; host uniforms strippedShadertoy

Bundles

formatfilewhat it isreads itbatch
html.htmlWebGL harness with no dependencies
zip.zipEvery host format plus a preview page

Data

formatfilewhat it isreads itbatch
json.jsonCode plus declared uniformsyes

patterns

Code

formatfilewhat it isreads itbatch
css.cssTile inlined as a data URI, recoloured by currentColoryes
tailwind.cssv4 @theme background-image entryTailwind CSSyes

Image

formatfilewhat it isreads itbatch
svg.svgReal <pattern> element, so it stays a repeat after importFigma, Illustrator, Inkscape
tile.svgOne tile at its natural size, to build a pattern fill fromFigma, Illustrator, Sketch

Bundles

formatfilewhat it isreads itbatch
sheet.htmlEvery pattern tiling, with a colour pickeryes
zip.zipTiles, tiling SVGs, CSS and a review sheetyes

Data

formatfilewhat it isreads itbatch
json.jsonTile size, markup and ready-made CSSyes

curves

Design tools

formatfilewhat it isreads itbatch
blender.pyScript that sets the keyframe Bezier handlesBlender
aftereffects.jsxEvaluates the real curve; AE influences cannotAfter Effects

Code

formatfilewhat it isreads itbatch
css.cssCustom property, or @keyframes for a springyes
tailwind.css@theme --ease-* tokenTailwind CSSyes
js.tsStandalone easing function, no dependencies
swiftui.swifttimingCurve, or an exact interpolatingSpringXcode
flutter.dartCubic, or an exact SpringDescriptionFlutter
unity.csKeyframe tangents derived from the control handlesUnity
glsl.glslShader-friendly, fixed iteration countShadertoy, TouchDesigner, WebGL

Image

formatfilewhat it isreads itbatch
svg.svgThe curve drawn in its unit box, for docs

Bundles

formatfilewhat it isreads itbatch
sheet.htmlEvery selected curve plotted side by sideyes
zip.zipEvery dialect plus a plot and a readme

Data

formatfilewhat it isreads itbatch
json.jsonDefinition, CSS value and sampled pointsyes
csv.csv64 x,y pairs for spreadsheets and scripts

textures

Design tools

formatfilewhat it isreads itbatch
blender.pyBuilds the node graph, with correct colour spacesBlender

Code

formatfilewhat it isreads itbatch
three.jsMeshStandardMaterial with the maps loadedthree.js
godot.tresStandardMaterial3D resourceGodot 4
unity.csEditor script that sets import settings tooUnity

Bundles

formatfilewhat it isreads itbatch
download.shcurl with resume and checksum verificationyes
zip.zipEvery engine, the download script and a readme

Data

formatfilewhat it isreads itbatch
markdown.mdMaps, sizes, colour spaces and credits
json.jsonCanonical map names and download URLsyes

luts

Design tools

formatfilewhat it isreads itbatch
cube.cube33³ by default; verified in ffmpeg, and what every NLE readsDaVinci Resolve, Premiere, Final Cut, OBS, ffmpeg

Image

formatfilewhat it isreads itbatch
hald.png512×512 image describing a 64³ cubeffmpeg, ImageMagick
preview.pngReference image, ungraded above and graded below

Bundles

formatfilewhat it isreads itbatch
sheet.htmlEvery selected LUT applied to the same inputsyes
zip.zipCube, 3DL, Hald, preview, recipe and a readme

Data

formatfilewhat it isreads itbatch
json.jsonThe operation stack, for computing the cube yourselfyes

hdris

Design tools

formatfilewhat it isreads itbatch
blender.pyWorld node graph with rotation and strength exposedBlender

Code

formatfilewhat it isreads itbatch
three.jsRight loader, equirectangular mapping, scene.environmentthree.js
godot.tresEnvironment with a panorama sky, lighting and reflections onGodot 4
unity.csEditor script: import settings, skybox material, ambient sourceUnity

Bundles

formatfilewhat it isreads itbatch
download.shcurl with resume and checksum verificationyes
zip.zipEvery engine, the download script and a readme

Data

formatfilewhat it isreads itbatch
markdown.mdResolutions, dynamic range, white balance and credits
json.jsonEvery resolution and format, with download URLsyes

models

Design tools

formatfilewhat it isreads itbatch
blender.pyRight operator per format; .blend is appended, not importedBlender

Code

formatfilewhat it isreads itbatch
three.jsGLTFLoader, added to the scene, shadows enabledthree.js
godot.tscnNode3D with the imported model instanced under itGodot 4
unity.csEditor script: FBX scale, normal maps, URP materialUnity

Bundles

formatfilewhat it isreads itbatch
download.shRebuilds the exact file tree the model referencesyes
zip.zipEvery engine, the download script and a readme

Data

formatfilewhat it isreads itbatch
markdown.mdFormats, polycount, real-world size and the file list
json.jsonEvery format and resolution, with relative pathsyes

packs

Design tools

formatfilewhat it isreads itbatch
blender.py3D kits: imports every model, laid out in a gridBlender

Code

formatfilewhat it isreads itbatch
unity.csFixes scale, point filtering and colour space across the packUnity
three.js3D kits: load a piece by name, cloned and cachedthree.js

Bundles

formatfilewhat it isreads itbatch
download.shFetches, unpacks, and prints an inventory of what arrivedyes
zip.zipEverything that applies to this pack, plus a readme

Data

formatfilewhat it isreads itbatch
markdown.mdContents, layout and what to watch for per category
json.jsonMetadata and the archive URLyes

audio

Bundles

formatfilewhat it isreads itbatch
download.shcurl with resume, and writes the credits beside the filesyes
convert.shMono OGG and WAV at 44.1 kHz, which is what engines wantffmpeg, Unity, Godotyes
zip.zipCredits, scripts, playlist and manifest — no audioyes

Data

formatfilewhat it isreads itbatch
credits.mdTitle, creator, licence and source per track — what CC-BY requiresyes
attribution.txtOne line per track, for a credits screen or a video descriptionyes
m3u.m3uStreams from the source; titles are the credit linesVLCyes
json.jsonMetadata, stream URLs and the composed credit lineyes

Authentication

Browsing is public. Anything belonging to a user — collections, favourites — needs a caller identity. Two credentials work:

Session cookie
Alexandria SSO. Sign in at /login; the jwt cookie is verified locally against Alexandria's JWKS. Access also requires an assignment to the stronghold app.
API key
An Alexandria ak_… key scoped to stronghold, for scripts, CI and MCP clients. Send it as X-API-Key or Authorization: Bearer ak_…. Add X-Stronghold-User: <uuid> for per-user routes. An API key never grants admin, so scraper control stays session-only.

A key that is present but invalid returns 401 rather than falling back to anonymous access, so a broken credential surfaces instead of quietly degrading.

Licensing

Assets carry their own licenses, and the API reports them per asset. Font bundles and icon bundles include the license text in their README.md. Check it before shipping: it governs embedding, modification and redistribution, and it varies from CC0 to non-commercial-only across the sources.