{"openapi":"3.1.0","info":{"title":"Weaving API","version":"1.0.0","description":"Weaving and loom maths as an API, computed locally and deterministically — the warp, weft and sett numbers a handweaver warps a loom by. The warp endpoint computes the total ends and the warp yarn for a project: ends = warp width × EPI (ends per inch, the sett), and the warp length per end = the cloth length adjusted for take-up (~10 %) and shrinkage plus the loom waste (~24 inches of thrums), so a 20-inch-wide piece at 12 EPI woven to 60 inches needs 240 ends and 600 yards of warp. The weft endpoint computes the weft yarn from the picks per inch, the width and the woven length: picks = PPI × woven length, each crossing the width plus the draw-in. The sett endpoint turns a yarn's wraps-per-inch into the ends-per-inch to set: a balanced plain weave is half the WPI, twill two-thirds, satin three-quarters — so a yarn that wraps 24 times per inch setts at 12 EPI for plain weave. Everything is computed locally and deterministically, so it is instant and private. Ideal for weaving, fiber-arts, textile and craft app developers, warp-calculator and project-planning tools, and weaving education. Pure local computation — no key, no third-party service, instant. Imperial inches in; yards out. Live, nothing stored. 3 compute endpoints. Take-up, draw-in and loom waste have sensible defaults — measure your own loom.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/weaving-api","description":"oanor gateway"}],"tags":[{"name":"Weaving"},{"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/sett":{"get":{"operationId":"get_v1_sett","tags":["Weaving"],"summary":"Sett (EPI from WPI)","description":"","parameters":[{"name":"wpi","in":"query","required":true,"description":"Wraps per inch of the yarn","schema":{"type":"string"},"example":"24"},{"name":"structure","in":"query","required":false,"description":"plain, twill or satin","schema":{"type":"string"},"example":"plain"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Sett (EPI) = wraps-per-inch × structure factor: plain weave ½, twill ⅔, satin ¾. WPI is how many times the yarn wraps around a ruler in an inch — a balanced plain weave uses half that.","inputs":{"wpi":24,"structure":"plain"},"sett_epi":12,"sett_factor":0.5},"meta":{"timestamp":"2026-06-06T07:14:08.729Z","request_id":"eaeb3732-8fe8-4d85-9bac-0bfea3513f0e"},"status":"ok","message":"Sett EPI","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/warp":{"get":{"operationId":"get_v1_warp","tags":["Weaving"],"summary":"Warp ends & yarn","description":"","parameters":[{"name":"warp_width","in":"query","required":true,"description":"Warp width in reed (in)","schema":{"type":"string"},"example":"20"},{"name":"epi","in":"query","required":true,"description":"Ends per inch (sett)","schema":{"type":"string"},"example":"12"},{"name":"cloth_length","in":"query","required":true,"description":"Woven/finished length (in)","schema":{"type":"string"},"example":"60"},{"name":"takeup_percent","in":"query","required":false,"description":"Take-up % (default 10)","schema":{"type":"string"}},{"name":"loom_waste","in":"query","required":false,"description":"Loom waste (in, default 24)","schema":{"type":"string"}},{"name":"shrinkage_percent","in":"query","required":false,"description":"Shrinkage %","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Ends = warp width × EPI. Warp length per end = cloth length × (1 + take-up) × (1 + shrinkage) + loom waste. Total warp = ends × that length.","inputs":{"epi":12,"loom_waste":24,"warp_width":20,"cloth_length":60,"takeup_percent":10},"total_ends":240,"total_warp_yarn_yards":600,"total_warp_yarn_inches":21600,"warp_length_per_end_inches":90},"meta":{"timestamp":"2026-06-06T07:14:08.838Z","request_id":"a3571fdb-87a1-476d-a1af-79a820e70389"},"status":"ok","message":"Warp yarn","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/weft":{"get":{"operationId":"get_v1_weft","tags":["Weaving"],"summary":"Weft yarn","description":"","parameters":[{"name":"ppi","in":"query","required":true,"description":"Picks per inch","schema":{"type":"string"},"example":"12"},{"name":"warp_width","in":"query","required":true,"description":"Width in reed (in)","schema":{"type":"string"},"example":"20"},{"name":"cloth_length","in":"query","required":true,"description":"Woven length (in)","schema":{"type":"string"},"example":"60"},{"name":"draw_in_percent","in":"query","required":false,"description":"Draw-in % (default 10)","schema":{"type":"string"}},{"name":"takeup_percent","in":"query","required":false,"description":"Take-up % (default 10)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Picks = PPI × woven length. Each pick crosses the warp width plus the draw-in. Total weft = picks × that length; add extra for selvedges and bobbin waste.","inputs":{"ppi":12,"warp_width":20,"cloth_length":60,"draw_in_percent":10},"total_picks":792,"weft_per_pick_inches":22,"total_weft_yarn_yards":484,"total_weft_yarn_inches":17424},"meta":{"timestamp":"2026-06-06T07:14:08.934Z","request_id":"71230feb-004d-4dec-b3d3-dfb3b60629fe"},"status":"ok","message":"Weft yarn","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":"Imperial inches in; yards out. Take-up (~10%), draw-in (~10%) and loom waste (~24\") have sensible defaults — measure your loom. EPI = ends per inch (the sett); WPI = wraps per inch of the yarn.","service":"weaving-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/sett":"Ends per inch from wraps per inch for plain, twill or satin weave.","GET /v1/warp":"Total ends and warp yarn from width, EPI, cloth length and take-up/waste.","GET /v1/weft":"Total weft yarn from picks per inch, width and length."},"description":"Weaving maths: warp yarn (ends & length), weft yarn, and sett (EPI from WPI) by weave structure."},"meta":{"timestamp":"2026-06-06T07:14:09.030Z","request_id":"931bb998-1322-4822-b1ce-43720f1c75ea"},"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":6050,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":375,"monthly_call_quota":56500,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1050,"monthly_call_quota":239000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":3350,"monthly_call_quota":1345000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/weaving-api"}