{
  "x402Version": 2,
  "id": 8204,
  "slug": "8204",
  "resource": "https://garment.api.williamrobinson.dev/v1/garment/draft",
  "description": "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.",
  "type": "http",
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "payTo": "0x26026370fe8b2bb17af9092a17691c76519366da",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "amount": "100000",
      "maxTimeoutSeconds": 300
    }
  ],
  "outputSchema": {
    "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"
      }
    }
  },
  "tags": [
    "bazaar",
    "builder-code",
    "eip2612GasSponsoring",
    "erc20ApprovalGasSponsoring",
    "payment-identifier"
  ],
  "sourceHost": "garment.api.williamrobinson.dev",
  "lastUpdated": "2026-09-11T19:22:16.259Z",
  "quality": {
    "calls30d": 1,
    "uniquePayers30d": 1,
    "lastCalledAt": "2026-09-11T19:22:15.521Z"
  },
  "liveness": {},
  "verified": false,
  "featured": false,
  "provider": {
    "host": "garment.api.williamrobinson.dev",
    "manifest_name": "garment.api.williamrobinson.dev",
    "source": "cdp-mirror",
    "source_manifest_url": "https://api.cdp.coinbase.com/platform/v2/x402/discovery/resources",
    "submitted_at": "2026-09-18T22:00:31.484Z"
  }
}