{"openapi":"3.1.0","info":{"title":"Fuse Bead API","version":"1.0.0","description":"Fuse-bead maths as an API, computed locally and deterministically — the bead-count, pegboard and colour numbers a Perler, Hama or melty-bead crafter plans a pixel design with. The grid endpoint turns a width × height pixel pattern into the real build: total beads = width × height, pegboards = ⌈width ÷ board⌉ × ⌈height ÷ board⌉ (a 29-peg square board for midi beads), and the finished size = beads × the bead pitch — so a 58 × 58 midi design is 3,364 beads, four pegboards and about 29 × 29 cm, in millimetres, centimetres and inches, with midi at 5 mm, mini at 2.6 mm and biggie at 9–10 mm. The palette endpoint splits the beads by colour: give it the total and a list of colour percentages and it returns the count per colour (normalised by the percent sum, so it works even when they don’t add to exactly 100) and the bags to buy at about a thousand beads each, or pass raw counts to bag them directly. Everything is computed locally and deterministically, so it is instant and private. Ideal for fuse-bead, pixel-art, kids-craft and maker app developers, pattern-to-shopping-list and project-estimator tools, and craft software. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 2 compute endpoints. For cross-stitch fabric counts use a different API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/fusebead-api","description":"oanor gateway"}],"tags":[{"name":"FuseBead"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/grid":{"get":{"operationId":"get_v1_grid","tags":["FuseBead"],"summary":"Beads, pegboards + size","description":"","parameters":[{"name":"width_beads","in":"query","required":true,"description":"Pattern width (beads)","schema":{"type":"string"},"example":"58"},{"name":"height_beads","in":"query","required":true,"description":"Pattern height (beads)","schema":{"type":"string"},"example":"58"},{"name":"bead_type","in":"query","required":false,"description":"midi, mini, biggie or maxi (default midi)","schema":{"type":"string"},"example":"midi"},{"name":"board_size","in":"query","required":false,"description":"Pegboard beads per side","schema":{"type":"string"}},{"name":"pitch_mm","in":"query","required":false,"description":"Custom bead pitch (mm)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Total beads = width × height. Pegboards = ⌈width ÷ board⌉ × ⌈height ÷ board⌉ (default 29×29 for midi). Finished size = beads × bead pitch (midi 5 mm, mini 2.6 mm). It shrinks slightly when ironed.","inputs":{"pitch_mm":5,"bead_type":"midi","board_size":29,"width_beads":58,"height_beads":58},"pegboards":{"down":2,"total":4,"across":2},"total_beads":3364,"finished_size":{"width_cm":29,"width_in":11.42,"width_mm":290,"height_cm":29,"height_in":11.42,"height_mm":290}},"meta":{"timestamp":"2026-06-06T07:13:57.288Z","request_id":"9760d92e-4f08-4436-8cec-330401855543"},"status":"ok","message":"Bead grid","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/palette":{"get":{"operationId":"get_v1_palette","tags":["FuseBead"],"summary":"Beads per colour + bags","description":"","parameters":[{"name":"palette","in":"query","required":true,"description":"Comma list 'colour:percent' or 'colour:count'","schema":{"type":"string"},"example":"red:50,blue:30,white:20"},{"name":"mode","in":"query","required":false,"description":"percent or count (default percent)","schema":{"type":"string"},"example":"percent"},{"name":"total_beads","in":"query","required":false,"description":"Total beads (percent mode)","schema":{"type":"string"},"example":"3364"},{"name":"beads_per_bag","in":"query","required":false,"description":"Beads per bag (default 1000)","schema":{"type":"string"},"example":"1000"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Percent mode splits a total by each colour's share (normalised by the percent sum, so it works even if they don't add to 100). Count mode just bags the counts. Bags assume ~1000 beads each — set beads_per_bag for your supplier.","colors":[{"bags":2,"beads":1682,"color":"red","percent":50},{"bags":2,"beads":1009,"color":"blue","percent":30},{"bags":1,"beads":673,"color":"white","percent":20}],"inputs":{"mode":"percent","total_beads":3364,"beads_per_bag":1000},"total_bags":5,"total_beads":3364},"meta":{"timestamp":"2026-06-06T07:13:57.399Z","request_id":"c816fe5f-59a5-4999-b322-ddf0387f08f8"},"status":"ok","message":"Color palette","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"notes":"Bead types: midi (5 mm, 29-board), mini (2.6 mm), biggie/maxi (9–10 mm). Total beads = width × height; size = beads × pitch; pegboards tile the grid. For cross-stitch fabric counts use a different API.","service":"fusebead-api","endpoints":{"GET /v1/grid":"Total beads, pegboards and finished size for a width × height grid.","GET /v1/meta":"This document.","GET /v1/palette":"Bead counts per colour and bags needed, by percentage or by count."},"description":"Fuse-bead (Perler/Hama) maths: bead count, pegboards and finished size for a pixel grid, and bead counts per colour."},"meta":{"timestamp":"2026-06-06T07:13:57.500Z","request_id":"1c3073de-0a9d-42c4-9117-9988f177fe8c"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":7480,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":409,"monthly_call_quota":58200,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1148,"monthly_call_quota":235800,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":3625,"monthly_call_quota":1360000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/fusebead-api"}