mirrored listing x402 eip155:8453

Draft a made-to-measure sewing pattern from a pinned freesewing design (aaron, bruce, teag

Draft a made-to-measure sewing pattern from a pinned freesewing design (aaron, bruce, teagan, simon, hugo, wahid, bella, sven) using your measurements and design options, run fit/seam-allowance checks, lay pieces out on your fabric width with a bounding-box marker, and return a fabric-yield report plus downloadable pattern, layout, cutlist and piece artifacts. Freesewing designs are CC-BY (freesewing.org); this service adds drafting, layout, and reporting.

Do you run garment.api.williamrobinson.dev? This listing was mirrored from Coinbase's public Bazaar. Claim it in 30 seconds — no account required — and it becomes verified, permanently overriding the mirrored copy.

Claim this listing
100000 (raw units)
price
1
calls / 30d
1
unique payers
2026-09-11
updated

Provider

garment.api.williamrobinson.dev · discovered, not yet claimed by its owner

Payment (x402 accepts[])

[
  {
    "scheme": "exact",
    "network": "eip155:8453",
    "payTo": "0x26026370fe8b2bb17af9092a17691c76519366da",
    "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
    "amount": "100000",
    "maxTimeoutSeconds": 300
  }
]

Output schema

{
  "bazaar": {
    "info": {
      "input": {
        "body": {
          "design": "aaron",
          "fabric": {
            "folded": true,
            "gapMm": 10,
            "widthMm": 1500
          },
          "measurements": {
            "biceps": 300,
            "chest": 1000,
            "hips": 1030,
            "hpsToBust": 320,
            "hpsToWaistBack": 420,
            "neck": 380,
            "shoulderSlope": 13,
            "shoulderToShoulder": 400,
            "waistToArmpit": 220,
            "waistToHips": 200
          },
          "options": {
            "chestEase": 10,
            "hipsEase": 12,
            "lengthBonus": 15
          },
          "saMm": 10
        },
        "bodyType": "json",
        "method": "POST",
        "type": "http"
      },
      "output": {
        "example": {
          "artifacts": [
            {
              "href": "https://garment.api.williamrobinson.dev/v1/garment/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/pattern.svg",
              "mediaType": "image/svg+xml",
              "name": "pattern.svg",
              "sha256": "7fdc2fed33e9e13816bdc135f63dfd9aa355d137a4979c744945d68eb62486cd",
              "sizeBytes": 167624
            },
            {
              "href": "https://garment.api.williamrobinson.dev/v1/garment/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/layout.svg",
              "mediaType": "image/svg+xml",
              "name": "layout.svg",
              "sha256": "9c3272c0cbe195c979d5d47afd99cf58ac77b18a953e17f0438cf8fa3bf5dfd0",
              "sizeBytes": 2336
            },
            {
              "href": "https://garment.api.williamrobinson.dev/v1/garment/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/pieces.json",
              "mediaType": "application/json",
              "name": "pieces.json",
              "sha256": "925703c0e433706e985bc07ef914ea9c34d8c32ddfc93d701502f26dda023770",
              "sizeBytes": 2090
            },
            {
              "href": "https://garment.api.williamrobinson.dev/v1/garment/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/cutlist.csv",
              "mediaType": "text/csv; charset=utf-8",
              "name": "cutlist.csv",
              "sha256": "f847c8039263f44ca3f6d755484de68d7b023c15c5c5f7757f48be905dc74563",
              "sizeBytes": 443
            },
            {
              "href": "https://garment.api.williamrobinson.dev/v1/garment/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/report.json",
              "mediaType": "application/json",
              "name": "report.json",
              "sha256": "3712bddf823468d4b699e8e725cc9b8c7df9499308b8b6aae56a11b725b4789a",
              "sizeBytes": 5949
            }
          ],
          "checks": [
            {
              "code": "DESIGN_SUPPORTED",
              "detail": "\"aaron\" (Aaron A-shirt) is an allowlisted freesewing design",
              "status": "passed"
            },
            {
              "code": "MEASUREMENTS_COMPLETE",
              "detail": "All 10 required measurement(s) are present",
              "status": "passed"
            },
            {
              "code": "MEASUREMENTS_PLAUSIBLE",
              "detail": "Every provided measurement is within its plausible range",
              "status": "passed"
            },
            {
              "code": "OPTIONS_IN_RANGE",
              "detail": "All 3 provided option(s) are in range",
              "status": "passed"
            },
            {
              "code": "DRAFT",
              "detail": "Drafted and rendered without errors in 42.4 ms",
              "status": "passed"
            },
            {
              "code": "PIECES_NONEMPTY",
              "detail": "4 piece(s) drafted",
              "status": "passed"
            },
            {
              "code": "SEAM_ALLOWANCE_APPLIED",
              "detail": "Every piece with seam-allowance geometry used it for its cutting outline; 2 piece(s) are drafted without a seam allowance by the design: aaron.armBinding, aaron.neckBinding",
              "status": "passed"
            },
            {
              "code": "PIECES_FIT_FABRIC",
              "detail": "Every piece fits within the usable fabric width of 750 mm",
              "status": "passed"
            },
            {
              "code": "LAYOUT_PACKED",
              "detail": "4 piece placement(s) packed across 1491.5 mm of fabric length",
              "status": "passed"
            },
            {
              "code": "FABRIC_YIELD",
              "detail": "Utilization 29.6% of the usable fabric area",
              "status": "passed"
            }
          ],
          "design": "aaron",
          "designVersion": "4.10.1",
          "expiresAt": "2026-09-13T14:56:37.143Z",
          "freesewingVersion": "4.10.1",
          "layout": {
            "fabricWidthMm": 1500,
            "folded": true,
            "gapMm": 10,
            "lengthMm": 1491.4860652603518,
            "method": "bbox-shelf",
            "placements": [
              {
                "copy": 1,
                "mirrored": false,
                "onFold": true,
                "piece": "aaron.back",
                "rotationDeg": 0,
                "xMm": 0,
                "yMm": 0
              },
              {
                "copy": 1,
                "mirrored": false,
                "onFold": true,
                "piece": "aaron.front",
                "rotationDeg": 0,
                "xMm": 0,
                "yMm": 750.7430326301759
              },
              {
                "copy": 1,
                "mirrored": true,
                "onFold": false,
                "piece": "aaron.armBinding",
                "rotationDeg": 0,
                "xMm": 293.97999999999996,
                "yMm": 750.7430326301759
              },
              {
                "copy": 1,
                "mirrored": true,
                "onFold": false,
                "piece": "aaron.neckBinding",
                "rotationDeg": 0,
                "xMm": 363.97999999999996,
                "yMm": 750.7430326301759
              }
            ],
            "usableWidthMm": 750,
            "utilization": 0.2958254665958102
          },
          "limitations": [
            "The layout is a bounding-box shelf packing (NFDH), an upper bound on how little fabric a true irregular-shape nesting could use, not a proven optimum or a real marker.",
            "Every freesewing pattern this product drafts is CC-BY licensed by freesewing.org (https://freesewing.org); the drafted geometry is derivative of their designs and must be attributed on redistribution.",
            "This product does not perform freeform pattern changes, full bust adjustments (beyond a design's own `draftForHighBust`/bust-plugin options), or grading tables; it drafts exactly one size from the measurements given.",
            "Measurements and fabric dimensions are metric-only (mm/degrees); no imperial input or output is supported.",
            "A drafted, checked pattern is not a guarantee of fit on a body: no physical prototype or wear test is performed.",
            "The layout, fabric length, and fabric-yield percentage cover only pieces cut from the design's primary shell fabric; a piece that needs a different material (lining, interfacing, ribbing, etc., named in a warning when present) is still reported with its own bbox/area/cut count but is not laid out or included in that yardage."
          ],
          "measurementsApplied": {
            "biceps": 300,
            "chest": 1000,
            "hips": 1030,
            "hpsToBust": 320,
            "hpsToWaistBack": 420,
            "neck": 380,
            "shoulderSlope": 13,
            "shoulderToShoulder": 400,
            "waistToArmpit": 220,
            "waistToHips": 200
          },
          "optionsApplied": {
            "chestEase": 10,
            "hipsEase": 12,
            "lengthBonus": 15
          },
          "pieces": [
            {
              "areaMm2": 133361.34427204923,
              "bboxMm": {
                "heightMm": 740.7430326301759,
                "widthMm": 283.97999999999996
              },
              "cut": 1,
              "hasGrainline": false,
              "material": "fabric",
              "name": "aaron.front",
              "onFold": true,
              "saApplied": true,
              "title": "front"
            },
            {
              "areaMm2": 133361.34427204923,
              "bboxMm": {
                "heightMm": 740.7430326301759,
                "widthMm": 283.97999999999996
              },
              "cut": 1,
              "hasGrainline": false,
              "material": "fabric",
              "name": "aaron.back",
              "onFold": true,
              "saApplied": true,
              "title": "back"
            },
            {
              "areaMm2": 32311.488442599337,
              "bboxMm": {
                "heightMm": 538.5248073766556,
                "widthMm": 60
              },
              "cut": 2,
              "hasGrainline": false,
              "material": "fabric",
              "name": "aaron.armBinding",
              "onFold": false,
              "saApplied": false,
              "title": "aaron:armBinding"
            },
            {
              "areaMm2": 31880.493895896623,
              "bboxMm": {
                "heightMm": 531.3415649316104,
                "widthMm": 60
              },
              "cut": 1,
              "hasGrainline": false,
              "material": "fabric",
              "name": "aaron.neckBinding",
              "onFold": false,
              "saApplied": false,
              "title": "aaron:neckBinding"
            }
          ],
          "saMm": 10,
          "status": "passed",
          "totals": {
            "cutPieces": 5,
            "draftMs": 42.43397900000002,
            "pieceAreaMm2": 629948.8478692923
          },
          "warnings": [
            "Part \"aaron.armBinding\" is drafted without a seam allowance by the design; its cutting outline is the seam line.",
            "Part \"aaron.neckBinding\" is drafted without a seam allowance by the design; its cutting outline is the seam line."
          ]
        },
        "type": "json"
      }
    },
    "schema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "input": {
          "additionalProperties": false,
          "properties": {
            "body": {
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "design": {
                  "description": "aaron (v4.10.1): requires biceps, chest, hpsToBust, hpsToWaistBack, neck, shoulderToShoulder, shoulderSlope, waistToArmpit, waistToHips, hips; optional highBust; options chestEase:pct[0,20], draftForHighBust:bool, lengthBonus:pct[-20,60], armholeDepth:pct[-10,50], legacyArmholeDepth:bool, hipsEase:pct[0,20], stretchFactor:pct[0,15], armholeDrop:pct[0,75], necklineBend:pct[40,100], necklineDrop:pct[10,35], shoulderStrapWidth:pct[10,40], shoulderStrapPlacement:pct[20,80], backlineBend:pct[25,100], knitBindingWidth:pct[300,800] | bruce (v4.10.1): requires hips, upperLeg, waistToHips, waistToUpperLeg; options bulge:deg[0,40], legBonus:pct[-10,20], rise:pct[0,25], stretch:pct[5,25], legStretch:pct[25,45], backRise:pct[0,10] | teagan (v4.10.1): requires biceps, chest, hpsToBust, hpsToWaistBack, neck, shoulderToShoulder, shoulderSlope, waistToArmpit, waistToHips, hips, waist, shoulderToWrist, wrist; optional highBust; options chestEase:pct[5,25], cuffEase:pct[0,200], draftForHighBust:bool, lengthBonus:pct[-20,60], s3Collar:pct[-100,100], s3Armhole:pct[-100,100], acrossBackFactor:pct[93,100], armholeDepth:pct[-10,50], armholeDepthFactor:pct[50,70], backNeckCutout:pct[4,12], legacyArmholeDepth:bool, sleeveWidthGuarantee:pct[25,100], sleeveLength:pct[20,100], fitWaist:bool, waistEase:pct[8,40], hipsEase:pct[8,30], necklineDepth:pct[20,40], necklineWidth:pct[10,50], necklineBend:pct[0,70], sleevecapEase:pct[0,10], sleevecapTopFactorX:pct[25,75], sleevecapTopFactorY:pct[35,125], sleevecapBackFactorX:pct[35,65], sleevecapBackFactorY:pct[30,65], sleevecapFrontFactorX:pct[35,65], sleevecapFrontFactorY:pct[30,65], sleevecapQ1Offset:pct[0,7], sleevecapQ2Offset:pct[0,7], sleevecapQ3Offset:pct[0,7], sleevecapQ4Offset:pct[0,7], sleevecapQ1Spread1:pct[4,20], sleevecapQ1Spread2:pct[4,20], sleevecapQ2Spread1:pct[4,20], sleevecapQ2Spread2:pct[4,20], sleevecapQ3Spread1:pct[4,20], sleevecapQ3Spread2:pct[4,20], sleevecapQ4Spread1:pct[4,20], sleevecapQ4Spread2:pct[4,20], sleeveEase:pct[5,35] | simon (v4.10.1): requires biceps, chest, hpsToBust, hpsToWaistBack, neck, shoulderToShoulder, shoulderSlope, waistToArmpit, waistToHips, waist, hips, shoulderToWrist, wrist; optional highBust; options bicepsEase:pct[0,50], chestEase:pct[-4,35], collarEase:pct[0,10], cuffEase:pct[10,40], draftForHighBust:bool, shoulderEase:pct[0,15], lengthBonus:pct[-4,60], s3Collar:pct[-100,100], s3Armhole:pct[-100,100], acrossBackFactor:pct[93,100], armholeDepth:pct[-10,50], armholeDepthFactor:pct[50,70], backNeckCutout:pct[2,8], frontArmholeDeeper:pct[0,0.5], shoulderSlopeReduction:pct[0,80], legacyArmholeDepth:bool, backDarts:list[auto/never/always], backDartShaping:pct[5,75], boxPleat:bool, boxPleatFold:pct[10,20], boxPleatWidth:pct[4,10], roundBack:pct[0,10], buttonholePlacketWidth:pct[4,12], buttonholePlacketFoldWidth:pct[8,24], buttonPlacketWidth:pct[2,8], hemCurve:pct[25,100], hemStyle:list[straight/baseball/slashed], hipsEase:pct[10,35], yokeHeight:pct[40,90], sleevePlacketWidth:pct[8,18], waistEase:pct[10,35], buttonFreeLength:pct[-10,15], extraTopButton:bool, separateButtonPlacket:bool, separateButtonholePlacket:bool, buttons:count[4,12], ffsa:pct[100,200], collarAngle:deg[60,130], collarBend:pct[0,10], collarFlare:deg[0,10], collarGap:pct[0,6], collarRoll:pct[0,6], collarWidth:pct[90,200], collarStandBend:deg[0,5], collarStandCurve:deg[0,5], collarStandWidth:pct[3,13], barrelCuffNarrowButton:bool, cuffButtonRows:count[1,2], cuffDrape:pct[0,10], cuffLength:pct[3,15], cuffStyle:list[roundedBarrelCuff/angledBarrelCuff/straightBarrelCuff/roundedFrenchCuff/angledFrenchCuff/straightFrenchCuff], sleeveStyle:list[short/long], buttonPlacketStyle:list[classic/seamless], buttonholePlacketStyle:list[classic/seamless], sleevecapEase:pct[0,10], sleevecapTopFactorX:pct[25,75], sleevecapTopFactorY:pct[35,125], sleevecapBackFactorX:pct[35,65], sleevecapBackFactorY:pct[30,65], sleevecapFrontFactorX:pct[35,65], sleevecapFrontFactorY:pct[30,65], sleevecapQ1Offset:pct[0,7], sleevecapQ2Offset:pct[0,7], sleevecapQ3Offset:pct[0,7], sleevecapQ4Offset:pct[0,7], sleevecapQ1Spread1:pct[4,20], sleevecapQ1Spread2:pct[4,20], sleevecapQ2Spread1:pct[4,20], sleevecapQ2Spread2:pct[4,20], sleevecapQ3Spread1:pct[4,20], sleevecapQ3Spread2:pct[4,20], sleevecapQ4Spread1:pct[4,20], sleevecapQ4Spread2:pct[4,20], sleeveLengthBonus:pct[-40,10], sleeveWidthGuarantee:pct[25,100], sleeveLengthShort:pct[20,100], sleeveHemShort:pct[1,20], sleevePlacketLength:pct[15,35], splitYoke:bool | hugo (v4.10.1): requires biceps, chest, hpsToBust, hpsToWaistBack, neck, shoulderToShoulder, shoulderSlope, waistToArmpit, waistToHips, hips, shoulderToWrist, wrist, head; optional highBust; options bicepsEase:pct[0,50], chestEase:pct[4,20], collarEase:pct[0,10], cuffEase:pct[10,50], draftForHighBust:bool, shoulderEase:pct[-2,6], lengthBonus:pct[-4,60], s3Collar:pct[-100,100], s3Armhole:pct[-100,100], acrossBackFactor:pct[93,100], armholeDepth:pct[-10,50], armholeDepthFactor:pct[50,70], backNeckCutout:pct[2,8], frontArmholeDeeper:pct[0,0.5], shoulderSlopeReduction:pct[0,80], legacyArmholeDepth:bool, hipsEase:pct[4,20], ribbingHeight:pct[4,20], pocketWidth:pct[35,65], sleeveLengthBonus:pct[0,10], ribbingStretch:pct[0,10] | wahid (v4.10.1): requires biceps, chest, hpsToBust, hpsToWaistBack, neck, shoulderToShoulder, shoulderSlope, waistToArmpit, waistToHips, hips, waist; optional highBust; options chestEase:pct[1,10], draftForHighBust:bool, lengthBonus:pct[0,8], armholeDepth:pct[-10,50], armholeDepthFactor:pct[60,80], backNeckCutout:pct[-2,8], shoulderSlopeReduction:pct[0,80], legacyArmholeDepth:bool, necklineDrop:pct[35,85], frontStyle:list[classic/rounded], frontInset:pct[10,20], shoulderInset:pct[0,20], neckInset:pct[0,10], hemStyle:list[classic/rounded/square], hemRadius:pct[2,12], pocketWidth:pct[8,15], pocketAngle:deg[0,5], pocketLocation:pct[25,55], frontScyeDart:deg[0,12], buttons:count[4,12], waistEase:pct[2,15], hipsEase:pct[2,15], legacyWaistHips:bool, backInset:pct[10,20], centerBackDart:pct[0,5], backScyeDart:deg[0,6], weltHeight:pct[10,20] | bella (v4.10.1): requires highBust, chest, underbust, waist, waistBack, bustSpan, neck, hpsToBust, hpsToWaistFront, hpsToWaistBack, shoulderToShoulder, shoulderSlope, biceps, shoulderToWrist, waistToArmpit, wrist; options bustSpanEase:pct[0,20], chestEase:pct[5,20], fullChestEaseReduction:pct[0,8], shoulderToShoulderEase:pct[-1,5], waistEase:pct[1,20], backDartHeight:pct[38,54], bustDartCurve:pct[-100,100], bustDartLength:pct[75,100], bustDartAngle:count[-45,45], bustDartMinimumFabric:pct[1,50], waistDartLength:pct[75,95], waistDartCurve:pct[-100,100], armholeDepth:pct[38,46], backArmholeCurvature:pct[50,85], backArmholePitchDepth:pct[30,40], backArmholeSlant:deg[1,9], frontArmholeCurvature:pct[50,85], frontArmholePitchDepth:pct[27,31], backHemSlope:deg[0,5], backNeckCutout:pct[3,9], frontShoulderWidth:pct[92,98], highBustWidth:pct[80,92], sleevecapEase:pct[0,10], sleevecapTopFactorX:pct[25,75], sleevecapTopFactorY:pct[35,125], sleevecapBackFactorX:pct[35,65], sleevecapBackFactorY:pct[30,65], sleevecapFrontFactorX:pct[35,65], sleevecapFrontFactorY:pct[30,65], sleevecapQ1Offset:pct[0,7], sleevecapQ2Offset:pct[0,7], sleevecapQ3Offset:pct[0,7], sleevecapQ4Offset:pct[0,7], sleevecapQ1Spread1:pct[4,20], sleevecapQ1Spread2:pct[4,20], sleevecapQ2Spread1:pct[4,20], sleevecapQ2Spread2:pct[4,20], sleevecapQ3Spread1:pct[4,20], sleevecapQ3Spread2:pct[4,20], sleevecapQ4Spread1:pct[4,20], sleevecapQ4Spread2:pct[4,20], sleeveLengthBonus:pct[-40,10], sleeveWidthGuarantee:pct[25,100], bellaSleeve:bool, bicepsEase:pct[0,50], cuffEase:pct[0,200] | sven (v4.10.1): requires biceps, chest, hpsToBust, hpsToWaistBack, neck, shoulderToShoulder, shoulderSlope, waistToArmpit, waistToHips, hips, waist, shoulderToWrist, wrist; optional highBust; options bicepsEase:pct[0,50], chestEase:pct[-4,35], collarEase:pct[5,30], cuffEase:pct[0,200], draftForHighBust:bool, shoulderEase:pct[-2,6], lengthBonus:pct[0,30], s3Collar:pct[-100,100], s3Armhole:pct[-100,100], acrossBackFactor:pct[93,100], armholeDepth:pct[-10,50], armholeDepthFactor:pct[50,70], backNeckCutout:pct[2,8], frontArmholeDeeper:pct[0,0.5], shoulderSlopeReduction:pct[0,80], legacyArmholeDepth:bool, sleeveLengthBonus:pct[0,10], ribbingHeight:pct[3,15], hipsEase:pct[-4,20], ribbing:bool, sleevecapEase:pct[0,10], sleevecapTopFactorX:pct[25,75], sleevecapTopFactorY:pct[35,125], sleevecapBackFactorX:pct[35,65], sleevecapBackFactorY:pct[30,65], sleevecapFrontFactorX:pct[35,65], sleevecapFrontFactorY:pct[30,65], sleevecapQ1Offset:pct[0,7], sleevecapQ2Offset:pct[0,7], sleevecapQ3Offset:pct[0,7], sleevecapQ4Offset:pct[0,7], sleevecapQ1Spread1:pct[4,20], sleevecapQ1Spread2:pct[4,20], sleevecapQ2Spread1:pct[4,20], sleevecapQ2Spread2:pct[4,20], sleevecapQ3Spread1:pct[4,20], sleevecapQ3Spread2:pct[4,20], sleevecapQ4Spread1:pct[4,20], sleevecapQ4Spread2:pct[4,20], sleeveWidthGuarantee:pct[25,100], ribbingStretch:pct[0,30] | pct options are percent numbers on freesewing's own 0-100 scale (e.g. chestEase 15 = 15% ease), not 0-1 fractions; their [min,max] can exceed 100.",
                  "enum": [
                    "aaron",
                    "bruce",
                    "teagan",
                    "simon",
                    "hugo",
                    "wahid",
                    "bella",
                    "sven"
                  ],
                  "type": "string"
                },
                "fabric": {
                  "additionalProperties": false,
                  "properties": {
                    "folded": {
                      "default": true,
                      "description": "Lay the fabric folded lengthwise; usable width halves and on-fold pieces sit on the fold.",
                      "type": "boolean"
                    },
                    "gapMm": {
                      "default": 10,
                      "description": "Minimum gap between placed pieces, millimetres.",
                      "maximum": 100,
                      "minimum": 0,
                      "type": "number"
                    },
                    "widthMm": {
                      "description": "Usable fabric width (selvedge to selvedge), millimetres.",
                      "maximum": 3000,
                      "minimum": 300,
                      "type": "number"
                    }
                  },
                  "required": [
                    "widthMm"
                  ],
                  "type": "object"
                },
                "measurements": {
                  "additionalProperties": {
                    "exclusiveMinimum": 0,
                    "maximum": 10000,
                    "type": "number"
                  },
                  "description": "Millimetres for lengths, degrees for angles; keys are the chosen design's required/optional freesewing measurement names.",
                  "maxProperties": 64,
                  "type": "object"
                },
                "options": {
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      },
                      {
                        "type": "boolean"
                      }
                    ]
                  },
                  "description": "Freesewing design option overrides by name; type and range/enum are validated per the design's option catalog. Fixed-constant options are never settable.",
                  "maxProperties": 64,
                  "type": "object"
                },
                "saMm": {
                  "default": 10,
                  "description": "Seam allowance, millimetres (0 = none).",
                  "maximum": 50,
                  "minimum": 0,
                  "type": "number"
                }
              },
              "required": [
                "design",
                "measurements",
                "fabric"
              ],
              "type": "object"
            },
            "bodyType": {
              "enum": [
                "json",
                "form-data",
                "text"
              ],
              "type": "string"
            },
            "method": {
              "enum": [
                "POST"
              ],
              "type": "string"
            },
            "type": {
              "const": "http",
              "type": "string"
            }
          },
          "required": [
            "type",
            "method",
            "bodyType",
            "body"
          ],
          "type": "object"
        },
        "output": {
          "properties": {
            "example": {
              "$defs": {
                "bbox": {
                  "additionalProperties": false,
                  "properties": {
                    "heightMm": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "widthMm": {
                      "minimum": 0,
                      "type": "number"
                    }
                  },
                  "required": [
                    "widthMm",
                    "heightMm"
                  ],
                  "type": "object"
                },
                "check": {
                  "additionalProperties": false,
                  "properties": {
                    "code": {
                      "type": "string"
                    },
                    "detail": {
                      "maxLength": 2048,
                      "type": "string"
                    },
                    "status": {
                      "enum": [
                        "passed",
                        "failed",
                        "not_checked"
                      ],
                      "type": "string"
                    }
                  },
                  "required": [
                    "code",
                    "status",
                    "detail"
                  ],
                  "type": "object"
                },
                "placement": {
                  "additionalProperties": false,
                  "properties": {
                    "copy": {
                      "minimum": 0,
                      "type": "integer"
                    },
                    "mirrored": {
                      "type": "boolean"
                    },
                    "onFold": {
                      "type": "boolean"
                    },
                    "piece": {
                      "type": "string"
                    },
                    "rotationDeg": {
                      "enum": [
                        0,
                        180
                      ],
                      "type": "integer"
                    },
                    "xMm": {
                      "type": "number"
                    },
                    "yMm": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "piece",
                    "copy",
                    "xMm",
                    "yMm",
                    "rotationDeg",
                    "mirrored",
                    "onFold"
                  ],
                  "type": "object"
                }
              },
              "$schema": "https://json-schema.org/draft/2020-12/schema",
              "additionalProperties": false,
              "properties": {
                "artifacts": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "href": {
                        "format": "uri",
                        "type": "string"
                      },
                      "mediaType": {
                        "maxLength": 128,
                        "minLength": 1,
                        "type": "string"
                      },
                      "name": {
                        "enum": [
                          "pattern.svg",
                          "layout.svg",
                          "pieces.json",
                          "cutlist.csv",
                          "report.json"
                        ],
                        "type": "string"
                      },
                      "sha256": {
                        "pattern": "^[a-f0-9]{64}$",
                        "type": "string"
                      },
                      "sizeBytes": {
                        "minimum": 0,
                        "type": "integer"
                      }
                    },
                    "required": [
                      "name",
                      "mediaType",
                      "sizeBytes",
                      "sha256",
                      "href"
                    ],
                    "type": "object"
                  },
                  "maxItems": 5,
                  "type": "array"
                },
                "checks": {
                  "items": {
                    "$ref": "#/properties/output/properties/example/$defs/check"
                  },
                  "type": "array"
                },
                "design": {
                  "enum": [
                    "aaron",
                    "bruce",
                    "teagan",
                    "simon",
                    "hugo",
                    "wahid",
                    "bella",
                    "sven"
                  ],
                  "type": "string"
                },
                "designVersion": {
                  "type": "string"
                },
                "expiresAt": {
                  "format": "date-time",
                  "type": "string"
                },
                "freesewingVersion": {
                  "const": "4.10.1",
                  "type": "string"
                },
                "layout": {
                  "additionalProperties": false,
                  "properties": {
                    "fabricWidthMm": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "folded": {
                      "type": "boolean"
                    },
                    "gapMm": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "lengthMm": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "method": {
                      "const": "bbox-shelf",
                      "type": "string"
                    },
                    "placements": {
                      "items": {
                        "$ref": "#/properties/output/properties/example/$defs/placement"
                      },
                      "type": "array"
                    },
                    "usableWidthMm": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "utilization": {
                      "maximum": 1,
                      "minimum": 0,
                      "type": "number"
                    }
                  },
                  "required": [
                    "fabricWidthMm",
                    "usableWidthMm",
                    "folded",
                    "gapMm",
                    "lengthMm",
                    "utilization",
                    "method",
                    "placements"
                  ],
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "limitations": {
                  "items": {
                    "maxLength": 4096,
                    "type": "string"
                  },
                  "type": "array"
                },
                "measurementsApplied": {
                  "additionalProperties": {
                    "type": "number"
                  },
                  "type": "object"
                },
                "optionsApplied": {
                  "additionalProperties": {
                    "anyOf": [
                      {
                        "type": "number"
                      },
                      {
                        "type": "string"
                      },
                      {
                        "type": "boolean"
                      }
                    ]
                  },
                  "type": "object"
                },
                "pieces": {
                  "items": {
                    "additionalProperties": false,
                    "properties": {
                      "areaMm2": {
                        "minimum": 0,
                        "type": "number"
                      },
                      "bboxMm": {
                        "$ref": "#/properties/output/properties/example/$defs/bbox"
                      },
                      "cut": {
                        "minimum": 0,
                        "type": "integer"
                      },
                      "hasGrainline": {
                        "type": "boolean"
                      },
                      "material": {
                        "type": [
                          "string",
                          "null"
                        ]
                      },
                      "name": {
                        "type": "string"
                      },
                      "onFold": {
                        "type": "boolean"
                      },
                      "saApplied": {
                        "type": "boolean"
                      },
                      "title": {
                        "type": "string"
                      }
                    },
                    "required": [
                      "name",
                      "title",
                      "bboxMm",
                      "areaMm2",
                      "cut",
                      "onFold",
                      "hasGrainline",
                      "material",
                      "saApplied"
                    ],
                    "type": "object"
                  },
                  "type": "array"
                },
                "saMm": {
                  "minimum": 0,
                  "type": "number"
                },
                "status": {
                  "enum": [
                    "passed",
                    "rejected"
                  ],
                  "type": "string"
                },
                "totals": {
                  "additionalProperties": false,
                  "properties": {
                    "cutPieces": {
                      "minimum": 0,
                      "type": "integer"
                    },
                    "draftMs": {
                      "minimum": 0,
                      "type": "number"
                    },
                    "pieceAreaMm2": {
                      "minimum": 0,
                      "type": "number"
                    }
                  },
                  "required": [
                    "pieceAreaMm2",
                    "cutPieces",
                    "draftMs"
                  ],
                  "type": [
                    "object",
                    "null"
                  ]
                },
                "warnings": {
                  "items": {
                    "maxLength": 4096,
                    "type": "string"
                  },
                  "type": "array"
                }
              },
              "required": [
                "status",
                "design",
                "designVersion",
                "freesewingVersion",
                "measurementsApplied",
                "optionsApplied",
                "saMm",
                "pieces",
                "layout",
                "totals",
                "checks",
                "warnings",
                "limitations",
                "expiresAt",
                "artifacts"
              ],
              "type": "object"
            },
            "type": {
              "type": "string"
            }
          },
          "required": [
            "type"
          ],
          "type": "object"
        }
      },
      "required": [
        "input"
      ],
      "type": "object"
    }
  },
  "builder-code": {
    "info": {
      "s": [
        "cdp_sdk_server"
      ]
    },
    "schema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "additionalProperties": false,
      "properties": {
        "a": {
          "description": "App builder code",
          "pattern": "^[a-z0-9_]{1,32}$",
          "type": "string"
        },
        "s": {
          "description": "Service builder codes",
          "items": {
            "pattern": "^[a-z0-9_]{1,32}$",
            "type": "string"
          },
          "maxItems": 11,
          "type": "array"
        },
        "w": {
          "description": "Wallet builder code",
          "pattern": "^[a-z0-9_]{1,32}$",
          "type": "string"
        }
      },
      "type": "object"
    }
  },
  "eip2612GasSponsoring": {},
  "erc20ApprovalGasSponsoring": {},
  "payment-identifier": {
    "info": {
      "required": true
    },
    "schema": {
      "$schema": "https://json-schema.org/draft/2020-12/schema",
      "properties": {
        "id": {
          "maxLength": 128,
          "minLength": 16,
          "pattern": "^[a-zA-Z0-9_-]+$",
          "type": "string"
        },
        "required": {
          "type": "boolean"
        }
      },
      "required": [
        "required"
      ],
      "type": "object"
    }
  }
}

Use it

curl

curl "https://garment.api.williamrobinson.dev/v1/garment/draft"
# -> 402 Payment Required, accepts[] lists how to pay
# retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid

JavaScript

const res = await fetch("https://garment.api.williamrobinson.dev/v1/garment/draft");
if (res.status === 402) {
  const { accepts } = await res.json();
  // pay one of accepts[] via an x402 client, then retry with the payment header
}

Python

import httpx
res = httpx.get("https://garment.api.williamrobinson.dev/v1/garment/draft")
if res.status_code == 402:
    accepts = res.json()["accepts"]
    # pay one of accepts[] via an x402 client, then retry with the payment header

Machine-readable

Everything on this page is also available as clean JSON at /resources/8204.json, and this resource appears in /discovery/resources and /discovery/search.