{"openapi":"3.1.0","info":{"title":"Deck Builder API","version":"1.0.0","description":"Deck-building maths as an API, computed locally and deterministically — the board, joist and fastener counts a homeowner or contractor needs to material out a rectangular deck. The boards endpoint turns the deck size into a real shopping list: rows = deck width ÷ (board width + gap), rounded up, so a 16 ft × 12 ft deck with a 5.5-inch board face (a 5/4×6) and a 1/8-inch gap needs 26 rows; boards run the length, each row takes one 16 ft board, and a 10 % waste allowance brings it to 29 boards plus the linear footage and the deck area. The joists endpoint frames it: joists are spaced along the length, so count = ⌊length ÷ spacing⌋ + 1 — thirteen joists at 16-inch on-center (seventeen at 12-inch for stronger or diagonal decking), each spanning the width, plus two rim joists and a ledger as total framing linear feet. The fasteners endpoint counts the screws: every decking row crosses every joist once and is fastened with two face screws there, so a 16×12 deck takes 26 × 13 × 2 = 676 screws, about 744 with waste — or one hidden clip per intersection. Everything is computed locally and deterministically, so it is instant and private. Ideal for construction, contractor, home-improvement, building-materials and renovation app developers, deck-estimator and takeoff tools, and lumber-yard calculators. Pure local computation — no key, no third-party service, instant. US units (feet/inches). Live, nothing stored. 3 compute endpoints. Rectangular decks; for indoor floor area use a flooring API.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/deck-api","description":"oanor gateway"}],"tags":[{"name":"Deck"},{"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/boards":{"get":{"operationId":"get_v1_boards","tags":["Deck"],"summary":"Decking boards","description":"","parameters":[{"name":"length_ft","in":"query","required":true,"description":"Deck length (boards run this way)","schema":{"type":"string"},"example":"16"},{"name":"width_ft","in":"query","required":true,"description":"Deck width","schema":{"type":"string"},"example":"12"},{"name":"board_width_in","in":"query","required":false,"description":"Board face width (default 5.5)","schema":{"type":"string"},"example":"5.5"},{"name":"gap_in","in":"query","required":false,"description":"Gap between boards (default 0.125)","schema":{"type":"string"},"example":"0.125"},{"name":"board_length_ft","in":"query","required":false,"description":"Stock board length (default 16)","schema":{"type":"string"},"example":"16"},{"name":"waste_percent","in":"query","required":false,"description":"Waste allowance % (default 10)","schema":{"type":"string"},"example":"10"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Rows = deck width ÷ (board width + gap), rounded up. Boards run the length; each row needs ⌈length ÷ stock board length⌉ boards. A 5/4×6 board is about 5.5\" wide; 1/8\" gaps are typical. Waste covers cuts and culls.","rows":26,"inputs":{"gap_in":0.125,"width_ft":12,"length_ft":16,"waste_percent":10,"board_width_in":5.5,"board_length_ft":16},"linear_feet":416,"boards_per_row":1,"deck_area_sqft":192,"boards_no_waste":26,"boards_with_waste":29},"meta":{"timestamp":"2026-06-06T07:14:05.722Z","request_id":"aaaaa53d-68d9-41af-8e47-6d87c5d9c9e5"},"status":"ok","message":"Decking boards","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/fasteners":{"get":{"operationId":"get_v1_fasteners","tags":["Deck"],"summary":"Fasteners","description":"","parameters":[{"name":"length_ft","in":"query","required":true,"description":"Deck length","schema":{"type":"string"},"example":"16"},{"name":"width_ft","in":"query","required":true,"description":"Deck width","schema":{"type":"string"},"example":"12"},{"name":"board_width_in","in":"query","required":false,"description":"Board face width (default 5.5)","schema":{"type":"string"},"example":"5.5"},{"name":"gap_in","in":"query","required":false,"description":"Gap (default 0.125)","schema":{"type":"string"},"example":"0.125"},{"name":"spacing_in","in":"query","required":false,"description":"Joist spacing (default 16)","schema":{"type":"string"},"example":"16"},{"name":"screws_per_joist","in":"query","required":false,"description":"Screws per board per joist (default 2)","schema":{"type":"string"},"example":"2"},{"name":"waste_percent","in":"query","required":false,"description":"Waste % (default 10)","schema":{"type":"string"},"example":"10"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Each decking row crosses every joist once and is fastened with 2 face screws there: screws = rows × joists × 2. Hidden-clip systems use 1 clip per intersection instead. Add ~10 % for drops and stripped heads.","rows":26,"inputs":{"gap_in":0.125,"width_ft":12,"length_ft":16,"spacing_in":16,"waste_percent":10,"board_width_in":5.5,"screws_per_joist":2},"joist_count":13,"screws_no_waste":676,"screws_with_waste":744},"meta":{"timestamp":"2026-06-06T07:14:05.812Z","request_id":"8baa601a-9a5d-4855-bc85-337e15cd9dcf"},"status":"ok","message":"Fasteners","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/joists":{"get":{"operationId":"get_v1_joists","tags":["Deck"],"summary":"Joist framing","description":"","parameters":[{"name":"length_ft","in":"query","required":true,"description":"Deck length","schema":{"type":"string"},"example":"16"},{"name":"width_ft","in":"query","required":true,"description":"Deck width (joist span)","schema":{"type":"string"},"example":"12"},{"name":"spacing_in","in":"query","required":false,"description":"On-center spacing (default 16)","schema":{"type":"string"},"example":"16"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"note":"Joists are spaced along the deck length: count = ⌊length ÷ spacing⌋ + 1, each spanning the width. 16\" on-center is standard (12\" for stronger/diagonal decking, 24\" only for thick boards). Plus two rim joists and a ledger.","inputs":{"width_ft":12,"length_ft":16,"spacing_in":16},"joist_count":13,"ledger_feet":16,"rim_joist_feet":32,"joist_length_ft":12,"joist_linear_feet":156,"total_framing_linear_feet":204},"meta":{"timestamp":"2026-06-06T07:14:05.897Z","request_id":"597ff070-747b-4408-832e-642342a85498"},"status":"ok","message":"Joist framing","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":"US units (feet/inches). Boards run the deck length and lay across joists spaced along the length. Defaults: 5.5\" board face, 1/8\" gap, 16\" on-center joists, 10 % waste. Rectangular decks; for area-only flooring use a flooring API.","service":"deck-api","endpoints":{"GET /v1/meta":"This document.","GET /v1/boards":"Decking boards (rows, boards, linear feet) for a deck, with gap and waste.","GET /v1/joists":"Joist count, length and rim/ledger lumber for the frame.","GET /v1/fasteners":"Screws (or clips) to fasten the decking to the joists."},"description":"Deck-building maths: decking boards, joist framing, and fasteners for a rectangular deck."},"meta":{"timestamp":"2026-06-06T07:14:05.966Z","request_id":"d52f9707-2b08-4187-a35f-b9f44c48e49e"},"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":7600,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":465,"monthly_call_quota":52500,"rps_limit":6,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":1255,"monthly_call_quota":219000,"rps_limit":15,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":3980,"monthly_call_quota":1295000,"rps_limit":40,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/deck-api"}