Garment-Pattern Engineer
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.
The wallet the 402 directs payment to. Its whole payment record — every payer, every chain — is on the merchant page.
Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
The payTo wallet does not resolve to a registered ERC-8004 agent. That is not a verdict on the service — most of the catalog is unregistered.
Accepts
The payment requirements as published to the catalog. Read the live 402 before paying — a price here is a claim, not a quote.
Pay 0.1 USDC on Base to 0x2602…366da. The signed payment is good for 5 minutes.
- Paid to
- 0x2602…366da
- USD Coin contract
- 0x8335…02913
- Payment window
- 5 minutes
- As published
- 100000 smallest units
The catalog’s raw entry
[
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0x26026370fe8b2bb17af9092a17691c76519366da",
"amount": "100000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 300
}
]Extensions
{
"bazaar": {
"info": {
"input": {
"body": {
"saMm": 10,
"design": "aaron",
"fabric": {
"gapMm": 10,
"folded": true,
"widthMm": 1500
},
"options": {
"hipsEase": 12,
"chestEase": 10,
"lengthBonus": 15
},
"measurements": {
"hips": 1030,
"neck": 380,
"chest": 1000,
"biceps": 300,
"hpsToBust": 320,
"waistToHips": 200,
"shoulderSlope": 13,
"waistToArmpit": 220,
"hpsToWaistBack": 420,
"shoulderToShoulder": 400
}
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"saMm": 10,
"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",
"layout": {
"gapMm": 10,
"folded": true,
"method": "bbox-shelf",
"lengthMm": 1491.4860652603518,
"placements": [
{
"xMm": 0,
"yMm": 0,
"copy": 1,
"piece": "aaron.back",
"onFold": true,
"mirrored": false,
"rotationDeg": 0
},
{
"xMm": 0,
"yMm": 750.7430326301759,
"copy": 1,
"piece": "aaron.front",
"onFold": true,
"mirrored": false,
"rotationDeg": 0
},
{
"xMm": 293.97999999999996,
"yMm": 750.7430326301759,
"copy": 1,
"piece": "aaron.armBinding",
"onFold": false,
"mirrored": true,
"rotationDeg": 0
},
{
"xMm": 363.97999999999996,
"yMm": 750.7430326301759,
"copy": 1,
"piece": "aaron.neckBinding",
"onFold": false,
"mirrored": true,
"rotationDeg": 0
}
],
"utilization": 0.2958254665958102,
"fabricWidthMm": 1500,
"usableWidthMm": 750
},
"pieces": [
{
"cut": 1,
"name": "aaron.front",
"title": "front",
"bboxMm": {
"widthMm": 283.97999999999996,
"heightMm": 740.7430326301759
},
"onFold": true,
"areaMm2": 133361.34427204923,
"material": "fabric",
"saApplied": true,
"hasGrainline": false
},
{
"cut": 1,
"name": "aaron.back",
"title": "back",
"bboxMm": {
"widthMm": 283.97999999999996,
"heightMm": 740.7430326301759
},
"onFold": true,
"areaMm2": 133361.34427204923,
"material": "fabric",
"saApplied": true,
"hasGrainline": false
},
{
"cut": 2,
"name": "aaron.armBinding",
"title": "aaron:armBinding",
"bboxMm": {
"widthMm": 60,
"heightMm": 538.5248073766556
},
"onFold": false,
"areaMm2": 32311.488442599337,
"material": "fabric",
"saApplied": false,
"hasGrainline": false
},
{
"cut": 1,
"name": "aaron.neckBinding",
"title": "aaron:neckBinding",
"bboxMm": {
"widthMm": 60,
"heightMm": 531.3415649316104
},
"onFold": false,
"areaMm2": 31880.493895896623,
"material": "fabric",
"saApplied": false,
"hasGrainline": false
}
],
"status": "passed",
"totals": {
"draftMs": 42.43397900000002,
"cutPieces": 5,
"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."
],
"artifacts": [
{
"href": "https://garment.api.williamrobinson.dev/v1/garment/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/pattern.svg",
"name": "pattern.svg",
"sha256": "7fdc2fed33e9e13816bdc135f63dfd9aa355d137a4979c744945d68eb62486cd",
"mediaType": "image/svg+xml",
"sizeBytes": 167624
},
{
"href": "https://garment.api.williamrobinson.dev/v1/garment/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/layout.svg",
"name": "layout.svg",
"sha256": "9c3272c0cbe195c979d5d47afd99cf58ac77b18a953e17f0438cf8fa3bf5dfd0",
"mediaType": "image/svg+xml",
"sizeBytes": 2336
},
{
"href": "https://garment.api.williamrobinson.dev/v1/garment/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/pieces.json",
"name": "pieces.json",
"sha256": "925703c0e433706e985bc07ef914ea9c34d8c32ddfc93d701502f26dda023770",
"mediaType": "application/json",
"sizeBytes": 2090
},
{
"href": "https://garment.api.williamrobinson.dev/v1/garment/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/cutlist.csv",
"name": "cutlist.csv",
"sha256": "f847c8039263f44ca3f6d755484de68d7b023c15c5c5f7757f48be905dc74563",
"mediaType": "text/csv; charset=utf-8",
"sizeBytes": 443
},
{
"href": "https://garment.api.williamrobinson.dev/v1/garment/artifacts/0123456789abcdef0123456789abcdef0123456789abcdef/report.json",
"name": "report.json",
"sha256": "3712bddf823468d4b699e8e725cc9b8c7df9499308b8b6aae56a11b725b4789a",
"mediaType": "application/json",
"sizeBytes": 5949
}
],
"expiresAt": "2026-09-13T14:56:37.143Z",
"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."
],
"designVersion": "4.10.1",
"optionsApplied": {
"hipsEase": 12,
"chestEase": 10,
"lengthBonus": 15
},
"freesewingVersion": "4.10.1",
"measurementsApplied": {
"hips": 1030,
"neck": 380,
"chest": 1000,
"biceps": 300,
"hpsToBust": 320,
"waistToHips": 200,
"shoulderSlope": 13,
"waistToArmpit": 220,
"hpsToWaistBack": 420,
"shoulderToShoulder": 400
}
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"design",
"measurements",
"fabric"
],
"properties": {
"saMm": {
"type": "number",
"default": 10,
"maximum": 50,
"minimum": 0,
"description": "Seam allowance, millimetres (0 = none)."
},
"design": {
"enum": [
"aaron",
"bruce",
"teagan",
"simon",
"hugo",
"wahid",
"bella",
"sven"
],
"type": "string",
"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."
},
"fabric": {
"type": "object",
"required": [
"widthMm"
],
"properties": {
"gapMm": {
"type": "number",
"default": 10,
"maximum": 100,
"minimum": 0,
"description": "Minimum gap between placed pieces, millimetres."
},
"folded": {
"type": "boolean",
"default": true,
"description": "Lay the fabric folded lengthwise; usable width halves and on-fold pieces sit on the fold."
},
"widthMm": {
"type": "number",
"maximum": 3000,
"minimum": 300,
"description": "Usable fabric width (selvedge to selvedge), millimetres."
}
},
"additionalProperties": false
},
"options": {
"type": "object",
"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,
"additionalProperties": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"type": "boolean"
}
]
}
},
"measurements": {
"type": "object",
"description": "Millimetres for lengths, degrees for angles; keys are the chosen design's required/optional freesewing measurement names.",
"maxProperties": 64,
"additionalProperties": {
"type": "number",
"maximum": 10000,
"exclusiveMinimum": 0
}
}
},
"additionalProperties": false
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"$defs": {
"bbox": {
"type": "object",
"required": [
"widthMm",
"heightMm"
],
"properties": {
"widthMm": {
"type": "number",
"minimum": 0
},
"heightMm": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"check": {
"type": "object",
"required": [
"code",
"status",
"detail"
],
"properties": {
"code": {
"type": "string"
},
"detail": {
"type": "string",
"maxLength": 2048
},
"status": {
"enum": [
"passed",
"failed",
"not_checked"
],
"type": "string"
}
},
"additionalProperties": false
},
"placement": {
"type": "object",
"required": [
"piece",
"copy",
"xMm",
"yMm",
"rotationDeg",
"mirrored",
"onFold"
],
"properties": {
"xMm": {
"type": "number"
},
"yMm": {
"type": "number"
},
"copy": {
"type": "integer",
"minimum": 0
},
"piece": {
"type": "string"
},
"onFold": {
"type": "boolean"
},
"mirrored": {
"type": "boolean"
},
"rotationDeg": {
"enum": [
0,
180
],
"type": "integer"
}
},
"additionalProperties": false
}
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"status",
"design",
"designVersion",
"freesewingVersion",
"measurementsApplied",
"optionsApplied",
"saMm",
"pieces",
"layout",
"totals",
"checks",
"warnings",
"limitations",
"expiresAt",
"artifacts"
],
"properties": {
"saMm": {
"type": "number",
"minimum": 0
},
"checks": {
"type": "array",
"items": {
"$ref": "#/properties/output/properties/example/$defs/check"
}
},
"design": {
"enum": [
"aaron",
"bruce",
"teagan",
"simon",
"hugo",
"wahid",
"bella",
"sven"
],
"type": "string"
},
"layout": {
"type": [
"object",
"null"
],
"required": [
"fabricWidthMm",
"usableWidthMm",
"folded",
"gapMm",
"lengthMm",
"utilization",
"method",
"placements"
],
"properties": {
"gapMm": {
"type": "number",
"minimum": 0
},
"folded": {
"type": "boolean"
},
"method": {
"type": "string",
"const": "bbox-shelf"
},
"lengthMm": {
"type": "number",
"minimum": 0
},
"placements": {
"type": "array",
"items": {
"$ref": "#/properties/output/properties/example/$defs/placement"
}
},
"utilization": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"fabricWidthMm": {
"type": "number",
"minimum": 0
},
"usableWidthMm": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"pieces": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"title",
"bboxMm",
"areaMm2",
"cut",
"onFold",
"hasGrainline",
"material",
"saApplied"
],
"properties": {
"cut": {
"type": "integer",
"minimum": 0
},
"name": {
"type": "string"
},
"title": {
"type": "string"
},
"bboxMm": {
"$ref": "#/properties/output/properties/example/$defs/bbox"
},
"onFold": {
"type": "boolean"
},
"areaMm2": {
"type": "number",
"minimum": 0
},
"material": {
"type": [
"string",
"null"
]
},
"saApplied": {
"type": "boolean"
},
"hasGrainline": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"status": {
"enum": [
"passed",
"rejected"
],
"type": "string"
},
"totals": {
"type": [
"object",
"null"
],
"required": [
"pieceAreaMm2",
"cutPieces",
"draftMs"
],
"properties": {
"draftMs": {
"type": "number",
"minimum": 0
},
"cutPieces": {
"type": "integer",
"minimum": 0
},
"pieceAreaMm2": {
"type": "number",
"minimum": 0
}
},
"additionalProperties": false
},
"warnings": {
"type": "array",
"items": {
"type": "string",
"maxLength": 4096
}
},
"artifacts": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"mediaType",
"sizeBytes",
"sha256",
"href"
],
"properties": {
"href": {
"type": "string",
"format": "uri"
},
"name": {
"enum": [
"pattern.svg",
"layout.svg",
"pieces.json",
"cutlist.csv",
"report.json"
],
"type": "string"
},
"sha256": {
"type": "string",
"pattern": "^[a-f0-9]{64}$"
},
"mediaType": {
"type": "string",
"maxLength": 128,
"minLength": 1
},
"sizeBytes": {
"type": "integer",
"minimum": 0
}
},
"additionalProperties": false
},
"maxItems": 5
},
"expiresAt": {
"type": "string",
"format": "date-time"
},
"limitations": {
"type": "array",
"items": {
"type": "string",
"maxLength": 4096
}
},
"designVersion": {
"type": "string"
},
"optionsApplied": {
"type": "object",
"additionalProperties": {
"anyOf": [
{
"type": "number"
},
{
"type": "string"
},
{
"type": "boolean"
}
]
}
},
"freesewingVersion": {
"type": "string",
"const": "4.10.1"
},
"measurementsApplied": {
"type": "object",
"additionalProperties": {
"type": "number"
}
}
},
"additionalProperties": false
}
}
}
}
}
},
"builder-code": {
"info": {
"s": [
"cdp_sdk_server"
]
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"a": {
"type": "string",
"pattern": "^[a-z0-9_]{1,32}$",
"description": "App builder code"
},
"s": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[a-z0-9_]{1,32}$"
},
"maxItems": 11,
"description": "Service builder codes"
},
"w": {
"type": "string",
"pattern": "^[a-z0-9_]{1,32}$",
"description": "Wallet builder code"
}
},
"additionalProperties": false
}
},
"payment-identifier": {
"info": {
"required": true
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"required"
],
"properties": {
"id": {
"type": "string",
"pattern": "^[a-zA-Z0-9_-]+$",
"maxLength": 128,
"minLength": 16
},
"required": {
"type": "boolean"
}
}
}
},
"eip2612GasSponsoring": {},
"erc20ApprovalGasSponsoring": {}
}Provenance
- Seen in the source catalog
- 2026-09-11 19:22Z
- Last indexed by Roundhouse
- 2026-09-25 12:50Z
- Last enriched (probe, favicon, geo)
- 2026-09-11 19:45Z
- x402 version
- 2
- Max timeout
- 300s
- Liveness probe
- HTTP 404
Hand this page to an agent
Copy the prompt and paste it into Claude, an MCP client or your own agent — it will vet this service and call it over the free read API. No key, no account.
GET api.roundhouseai.io/v0/endpoints
This endpoint's own trailing-30-day call count, as published by the upstream catalog and snapshotted daily. 14 snapshots so far. Verified volume counts only settlements with an on-chain EIP-3009 marker.
Show the promptHide the prompt
Using Roundhouse, look up the x402 service Garment-Pattern Engineer and tell me whether it is worth paying: what a call costs, whether the endpoint answered when last probed, and what its payment record actually shows. curl -s 'https://api.roundhouseai.io/v0/endpoints?q=Garment-Pattern%20Engineer' curl -s 'https://api.roundhouseai.io/v0/merchants/<the payTo wallet returned above>' Then call it: read the price from the live 402 at https://garment.api.williamrobinson.dev/v1/garment/draft, never from a cached figure, and pay with an x402 client. The /v0 API needs an API key (`authorization: Bearer rh_live_…`) on everything except /v0/unified* and /v0/endpoints. Mint a personal key for $0.01 at GET https://api.roundhouseai.io/v0/test/x402, or use an organization key from https://roundhouseai.io/dashboard/team. If you do not have Roundhouse tools or skills installed, read https://roundhouseai.io/skill.md first — it is the whole procedure.