Craft Quantities Solve backwards API
What the material the reader already has will cover, as the site's Solve Backwards pages work it.
What the material the reader already has will cover, as the site's Solve Backwards pages work it.
Every API here is available over the APIs.io API and to AI agents over MCP.
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
find_apisBrowse and filter every API in the catalog.get_api_artifactsOne API's artifacts, grouped by type.get_openapiThe primary OpenAPI for this API.find_similar_apisAPIs that look like this one.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.curl "https://apis.io/api/v1/apis/craftquantities-com:craftquantities-com-solve-backwards-api"
curl "https://apis.io/api/v1/apis?limit=25"
Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Craftquantities Com Solve backwards API
version: 1.6.0
contact:
url: https://craftquantities.com/api/
license:
name: CC BY 4.0
url: https://creativecommons.org/licenses/by/4.0/
description: 'Operations tagged Solve backwards across 2 of this provider''s published API definitions: craftquantities-com-openapi.json, craftquantities-com-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api.craftquantities.com/v1
tags:
- name: Solve backwards
description: What the material the reader already has will cover, as the site's Solve Backwards pages work it.
paths:
/solve/{page}:
get:
operationId: solveBackwardsGet
summary: What an amount of material covers, on one Solve Backwards page
description: Every other query parameter is a calculator setting, with its unit.
parameters:
- name: page
in: path
required: true
schema:
type: string
pattern: ^[a-z0-9][a-z0-9-]{1,80}$
description: A Solve Backwards page's slug, such as wall-paint, drywall-sheets, bricks, concrete-bags, ready-mix-concrete.
- name: have
in: query
required: true
schema:
type: string
maxLength: 60
description: 'How much: 20, or 24%20gal.'
- name: system
in: query
required: false
schema:
type: string
enum:
- metric
- imperial
default: metric
description: The unit system inputs left out open in, and the one the page link opens in. The answer comes in both.
- name: detail
in: query
required: false
schema:
type: string
enum:
- full
- summary
default: full
description: 'full (the default): the whole answer. summary: the result lines, the citation line and the page only — fewer tokens to read.'
description: 'summary: the result lines, the citation and the page only (fewer tokens); full, the default: the whole answer. A POST body may carry detail instead.'
- name: format
in: query
required: false
schema:
type: string
enum:
- json
- md
description: 'md: the engine''s Markdown report as text/markdown (or send Accept: text/markdown); json, the default.'
responses:
'200':
description: The area and the size it covers, as the page works it.
content:
application/json:
schema:
type: object
anyOf:
- type: object
required:
- engine
- page
- calculator
- system
- have
- status
- answer
- area
- size
- typical
- chain
- forwards
- assumptions
- settings
- links
- citation
- licence
- notice
properties:
engine:
type: object
page:
type: object
required:
- slug
- question
- material
- url
calculator:
type: object
required:
- slug
- title
- version
- url
otherPages:
type: array
items:
type: object
required:
- slug
- question
- url
system:
enum:
- metric
- imperial
have:
type: object
required:
- amount
- unit
- inCalculatorUnit
status:
enum:
- reached
- capped
- too-little
description: 'reached: the largest size whose requirement fits; capped: more than the calculator''s largest job; too-little: less than its smallest.'
answer:
type: string
description: The page's own answer line.
area:
anyOf:
- type: object
required:
- noun
- exact
- metric
- imperial
- type: 'null'
size:
anyOf:
- type: object
required:
- metres
- feet
properties:
metres:
type: object
additionalProperties:
type: number
feet:
type: object
additionalProperties:
type: number
- type: 'null'
typical:
type: object
required:
- count
- each
- size
chain:
type: array
items:
type: string
forwards:
anyOf:
- type: object
required:
- inputs
- asks
- left
- type: 'null'
assumptions:
type: array
items:
type: object
required:
- id
- label
- value
settings:
type: array
links:
type: object
required:
- page
- openInSite
- calculator
note:
type: string
citation:
type: object
required:
- author
- title
- url
- formats
- accessDate
properties:
author:
type: string
title:
type: string
version:
anyOf:
- type: string
- type: 'null'
sourcesChecked:
anyOf:
- type: string
- type: 'null'
url:
type: string
accessDate:
anyOf:
- type: string
- type: 'null'
formats:
type: object
required:
- plain
- apa
- harvard
- bibtex
properties:
plain:
type: string
apa:
type: string
harvard:
type: string
bibtex:
type: string
licence:
type: object
required:
- name
- url
- attribution
properties:
name:
type: string
url:
type: string
attribution:
type: string
notice:
type: string
- type: object
required:
- detail
- tool
- title
- lines
- notes
- citation
- url
- open
- more
properties:
detail:
const: summary
tool:
type: string
title:
type: string
lines:
type: array
items:
type: object
additionalProperties:
type: string
description: The result lines, as the report's table gives them.
notes:
type: array
items:
type: string
description: 'What a professional must decide, when to call one, a false-friend warning, that adoption is local: kept in every summary.'
citation:
type: string
description: The one citation line, built from the answer's own data.
url:
anyOf:
- type: string
- type: 'null'
open:
anyOf:
- type: string
- type: 'null'
more:
anyOf:
- type: string
- type: 'null'
'400':
description: The request was refused; every problem is listed.
content:
application/problem+json:
schema:
type: object
required:
- title
- status
- problems
properties:
type:
type: string
title:
type: string
status:
type: integer
problems:
type: array
items:
type: object
required:
- input
- problem
properties:
input:
type: string
problem:
type: string
accepted:
type: array
items:
type: string
didYouMean:
type: array
items:
type: string
'404':
description: The request was refused; every problem is listed.
content:
application/problem+json:
schema:
type: object
required:
- title
- status
- problems
properties:
type:
type: string
title:
type: string
status:
type: integer
problems:
type: array
items:
type: object
required:
- input
- problem
properties:
input:
type: string
problem:
type: string
accepted:
type: array
items:
type: string
didYouMean:
type: array
items:
type: string
tags:
- Solve backwards
servers:
- url: https://api.craftquantities.com/v1
/solve:
post:
operationId: solveBackwards
summary: What an amount of material covers
requestBody:
required: true
content:
application/json:
schema:
type: object
additionalProperties: false
required:
- have
properties:
page:
type: string
pattern: ^[a-z0-9][a-z0-9-]{1,80}$
description: A Solve Backwards page's slug, such as wall-paint, drywall-sheets, bricks, concrete-bags, ready-mix-concrete.
query:
type: string
minLength: 2
maxLength: 200
description: Or what the reader has, in words ("sheets of drywall", "bags of concrete"), when the slug is not known.
have:
description: 'How much the reader has: a count for counted things (20, "20 sheets"); a measure with its unit for paint, concrete, soil ("24 gal", "2 m3", {"value": 90, "unit": "L"}).'
oneOf:
- type: number
exclusiveMinimum: 0
- type: string
maxLength: 60
- type: object
additionalProperties: false
required:
- value
- unit
properties:
value:
type: number
unit:
type: string
maxLength: 20
system:
type: string
enum:
- metric
- imperial
description: 'The page''s system; it sets the market''s product (a 4 × 8 ft sheet in imperial). Left out: the unit''s system, else metric.'
settings:
type: object
maxProperties: 20
additionalProperties:
oneOf:
- type: number
- type: string
maxLength: 60
- type: object
required:
- value
- unit
properties:
value:
type: number
unit:
type: string
description: 'Optional: another calculator input, with its unit (a slab''s thickness "4 in", coats 3). The inputs the page grows cannot be set.'
responses:
'200':
description: The area and the size it covers, as the page works it.
content:
application/json:
schema:
type: object
anyOf:
- type: object
required:
- engine
- page
- calculator
- system
- have
- status
- answer
- area
- size
- typical
- chain
- forwards
- assumptions
- settings
- links
- citation
- licence
- notice
properties:
engine:
type: object
page:
type: object
required:
- slug
- question
- material
- url
calculator:
type: object
required:
- slug
- title
- version
- url
otherPages:
type: array
items:
type: object
required:
- slug
- question
- url
system:
enum:
- metric
- imperial
have:
type: object
required:
- amount
- unit
- inCalculatorUnit
status:
enum:
- reached
- capped
- too-little
description: 'reached: the largest size whose requirement fits; capped: more than the calculator''s largest job; too-little: less than its smallest.'
answer:
type: string
description: The page's own answer line.
area:
anyOf:
- type: object
required:
- noun
- exact
- metric
- imperial
- type: 'null'
size:
anyOf:
- type: object
required:
- metres
- feet
properties:
metres:
type: object
additionalProperties:
type: number
feet:
type: object
additionalProperties:
type: number
- type: 'null'
typical:
type: object
required:
- count
- each
- size
chain:
type: array
items:
type: string
forwards:
anyOf:
- type: object
required:
- inputs
- asks
- left
- type: 'null'
assumptions:
type: array
items:
type: object
required:
- id
- label
- value
settings:
type: array
links:
type: object
required:
- page
- openInSite
- calculator
note:
type: string
citation:
type: object
required:
- author
- title
- url
- formats
- accessDate
properties:
author:
type: string
title:
type: string
version:
anyOf:
- type: string
- type: 'null'
sourcesChecked:
anyOf:
- type: string
- type: 'null'
url:
type: string
accessDate:
anyOf:
- type: string
- type: 'null'
formats:
type: object
required:
- plain
- apa
- harvard
- bibtex
properties:
plain:
type: string
apa:
type: string
harvard:
type: string
bibtex:
type: string
licence:
type: object
required:
- name
- url
- attribution
properties:
name:
type: string
url:
type: string
attribution:
type: string
notice:
type: string
- type: object
required:
- detail
- tool
- title
- lines
- notes
- citation
- url
- open
- more
properties:
detail:
const: summary
tool:
type: string
title:
type: string
lines:
type: array
items:
type: object
additionalProperties:
type: string
description: The result lines, as the report's table gives them.
notes:
type: array
items:
type: string
description: 'What a professional must decide, when to call one, a false-friend warning, that adoption is local: kept in every summary.'
citation:
type: string
description: The one citation line, built from the answer's own data.
url:
anyOf:
- type: string
- type: 'null'
open:
anyOf:
- type: string
- type: 'null'
more:
anyOf:
- type: string
- type: 'null'
'400':
description: The request was refused; every problem is listed.
content:
application/problem+json:
schema:
type: object
required:
- title
- status
- problems
properties:
type:
type: string
title:
type: string
status:
type: integer
problems:
type: array
items:
type: object
required:
- input
- problem
properties:
input:
type: string
problem:
type: string
accepted:
type: array
items:
type: string
didYouMean:
type: array
items:
type: string
'404':
description: The request was refused; every problem is listed.
content:
application/problem+json:
schema:
type: object
required:
- title
- status
- problems
properties:
type:
type: string
title:
type: string
status:
type: integer
problems:
type: array
items:
type: object
required:
- input
- problem
properties:
input:
type: string
problem:
type: string
accepted:
type: array
items:
type: string
didYouMean:
type: array
items:
type: string
tags:
- Solve backwards
parameters:
- name: detail
in: query
required: false
schema:
type: string
enum:
- full
- summary
default: full
description: 'full (the default): the whole answer. summary: the result lines, the citation line and the page only — fewer tokens to read.'
description: 'summary: the result lines, the citation and the page only (fewer tokens); full, the default: the whole answer. A POST body may carry detail instead.'
- name: format
in: query
required: false
schema:
type: string
enum:
- json
- md
description: 'md: the engine''s Markdown report as text/markdown (or send Accept: text/markdown); json, the default.'
servers:
- url: https://api.craftquantities.com/v1
externalDocs:
url: https://craftquantities.com/api/
description: The API documentation
x-refined-from:
- craftquantities-com-openapi.json
- craftquantities-com-openapi.yml