{"id":"print-estimate","title":"Print resolution, bleed and uncompressed bitmap size arithmetic","description":"Given an image's pixel size and a print size (inches, millimetres or centimetres) plus optional bleed, margin and target ppi, returns the effective ppi over trim plus bleed, whether it meets the target, the pixel count a target ppi needs, the largest print size a target ppi allows, the safe area, and the exact uncompressed bitmap size. Built for print-on-demand, layout and image-prep agents; the target ppi is yours to choose, there is no built-in quality rule. Unit maths is exact (1 in = 25.4 mm). It does not estimate compressed file sizes (JPEG, PNG, TIFF/LZW), colour management or printer-specific limits, and the raw size counts pixels only (no headers, row padding or alpha unless in channels).","roi":"Exact ppi, bleed and byte counts for print jobs without unit-conversion slips.","audience":"business","package":"creative-games-kit","channels":["x402","mcp"],"endpoint":{"method":"POST","url":"https://agents.writerslogic.com/api/v1/print-estimate","path":"/api/v1/print-estimate","contentType":"application/json"},"price":{"amount":"0.005","currency":"USDC","network":"base","perCall":true,"failedCallsCharged":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["widthPx","heightPx"],"properties":{"widthPx":{"type":"integer","description":"Image width in pixels.","minimum":1,"maximum":1000000},"heightPx":{"type":"integer","description":"Image height in pixels.","minimum":1,"maximum":1000000},"unit":{"type":"string","enum":["in","mm","cm"],"description":"Unit for print size, bleed and margin (default in)."},"printWidth":{"type":"number","description":"Trim width in unit.","minimum":0.001,"maximum":100000},"printHeight":{"type":"number","description":"Trim height in unit.","minimum":0.001,"maximum":100000},"bleed":{"type":"number","description":"Bleed added on each side of the trim, in unit (default 0).","minimum":0,"maximum":10000},"margin":{"type":"number","description":"Safe margin inside the trim on each side, in unit (default 0).","minimum":0,"maximum":10000},"targetPpi":{"type":"number","description":"The resolution you require, in pixels per inch.","minimum":1,"maximum":100000},"channels":{"type":"integer","description":"Channels per pixel for the raw size (default 3).","minimum":1,"maximum":8},"bitsPerChannel":{"type":"integer","enum":[1,8,16,32],"description":"Bits per channel (default 8)."},"claimedEffectivePpi":{"type":"number","description":"An effective ppi you assert; checked against the computed value.","minimum":0,"maximum":10000000},"claimedRawBytes":{"type":"integer","description":"An uncompressed byte count you assert.","minimum":0,"maximum":9000000000000000},"ppiTolerance":{"type":"number","description":"Accepted ppi difference for claimedEffectivePpi (default 0.5).","minimum":0,"maximum":1000}}},"resultSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"unit":{"type":"string"},"effectivePpiX":{"type":"number","description":"Pixels per inch horizontally over trim plus bleed."},"effectivePpiY":{"type":"number","description":"Pixels per inch vertically."},"effectivePpi":{"type":"number","description":"The smaller of the two: the resolution when the image covers the print area."},"aspectPixels":{"type":"number","description":"Pixel width / height."},"aspectPrint":{"type":"number","description":"Trim width / height."},"maxPrintSize":{"type":"object","description":"Largest width and height in unit at targetPpi."},"bleedPixelsRequired":{"type":"object","description":"Pixels needed to cover trim plus bleed at targetPpi (rounded up)."},"safeArea":{"type":"object","description":"Trim minus margins, in unit."},"rawBits":{"type":"number","description":"Exact width x height x channels x bits."},"rawBytes":{"type":"number","description":"rawBits / 8 rounded up; uncompressed, unpadded, no header."},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"outputSchema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"unit":{"type":"string"},"effectivePpiX":{"type":"number","description":"Pixels per inch horizontally over trim plus bleed."},"effectivePpiY":{"type":"number","description":"Pixels per inch vertically."},"effectivePpi":{"type":"number","description":"The smaller of the two: the resolution when the image covers the print area."},"aspectPixels":{"type":"number","description":"Pixel width / height."},"aspectPrint":{"type":"number","description":"Trim width / height."},"maxPrintSize":{"type":"object","description":"Largest width and height in unit at targetPpi."},"bleedPixelsRequired":{"type":"object","description":"Pixels needed to cover trim plus bleed at targetPpi (rounded up)."},"safeArea":{"type":"object","description":"Trim minus margins, in unit."},"rawBits":{"type":"number","description":"Exact width x height x channels x bits."},"rawBytes":{"type":"number","description":"rawBits / 8 rounded up; uncompressed, unpadded, no header."},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]},"example":{"widthPx":3000,"heightPx":2000,"printWidth":10,"printHeight":6.667,"bleed":0.125,"targetPpi":300,"unit":"in"},"openapiOperation":{"operationId":"print_estimate","summary":"Print resolution, bleed and uncompressed bitmap size arithmetic","description":"Given an image's pixel size and a print size (inches, millimetres or centimetres) plus optional bleed, margin and target ppi, returns the effective ppi over trim plus bleed, whether it meets the target, the pixel count a target ppi needs, the largest print size a target ppi allows, the safe area, and the exact uncompressed bitmap size. Built for print-on-demand, layout and image-prep agents; the target ppi is yours to choose, there is no built-in quality rule. Unit maths is exact (1 in = 25.4 mm). It does not estimate compressed file sizes (JPEG, PNG, TIFF/LZW), colour management or printer-specific limits, and the raw size counts pixels only (no headers, row padding or alpha unless in channels).\n\nPrice: 0.005 USDC on Base (x402).","x-x402-price-usdc":"0.005","x-x402-amount":"5000","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"x-audience":"business","x-sample-url":"https://agents.writerslogic.com/api/v1/samples/print-estimate","security":[{"x402":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["widthPx","heightPx"],"properties":{"widthPx":{"type":"integer","description":"Image width in pixels.","minimum":1,"maximum":1000000},"heightPx":{"type":"integer","description":"Image height in pixels.","minimum":1,"maximum":1000000},"unit":{"type":"string","enum":["in","mm","cm"],"description":"Unit for print size, bleed and margin (default in)."},"printWidth":{"type":"number","description":"Trim width in unit.","minimum":0.001,"maximum":100000},"printHeight":{"type":"number","description":"Trim height in unit.","minimum":0.001,"maximum":100000},"bleed":{"type":"number","description":"Bleed added on each side of the trim, in unit (default 0).","minimum":0,"maximum":10000},"margin":{"type":"number","description":"Safe margin inside the trim on each side, in unit (default 0).","minimum":0,"maximum":10000},"targetPpi":{"type":"number","description":"The resolution you require, in pixels per inch.","minimum":1,"maximum":100000},"channels":{"type":"integer","description":"Channels per pixel for the raw size (default 3).","minimum":1,"maximum":8},"bitsPerChannel":{"type":"integer","enum":[1,8,16,32],"description":"Bits per channel (default 8)."},"claimedEffectivePpi":{"type":"number","description":"An effective ppi you assert; checked against the computed value.","minimum":0,"maximum":10000000},"claimedRawBytes":{"type":"integer","description":"An uncompressed byte count you assert.","minimum":0,"maximum":9000000000000000},"ppiTolerance":{"type":"number","description":"Accepted ppi difference for claimedEffectivePpi (default 0.5).","minimum":0,"maximum":1000}}},"example":{"widthPx":3000,"heightPx":2000,"printWidth":10,"printHeight":6.667,"bleed":0.125,"targetPpi":300,"unit":"in"}}}},"responses":{"200":{"description":"Paid result with provenance","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"unit":{"type":"string"},"effectivePpiX":{"type":"number","description":"Pixels per inch horizontally over trim plus bleed."},"effectivePpiY":{"type":"number","description":"Pixels per inch vertically."},"effectivePpi":{"type":"number","description":"The smaller of the two: the resolution when the image covers the print area."},"aspectPixels":{"type":"number","description":"Pixel width / height."},"aspectPrint":{"type":"number","description":"Trim width / height."},"maxPrintSize":{"type":"object","description":"Largest width and height in unit at targetPpi."},"bleedPixelsRequired":{"type":"object","description":"Pixels needed to cover trim plus bleed at targetPpi (rounded up)."},"safeArea":{"type":"object","description":"Trim minus margins, in unit."},"rawBits":{"type":"number","description":"Exact width x height x channels x bits."},"rawBytes":{"type":"number","description":"rawBits / 8 rounded up; uncompressed, unpadded, no header."},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]}}}},"400":{"description":"Invalid request (no payment consumed)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Invalid X-API-KEY","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Payment required or invalid","content":{"application/json":{"schema":{"type":"object","description":"x402 v2 PaymentRequired (also base64 in the PAYMENT-REQUIRED header)","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"code":{"type":"string"},"resource":{"type":"object"},"accepts":{"type":"array","items":{"type":"object"}},"extensions":{"type":"object"}}}}}},"502":{"description":"Upstream failure; the payment is released or not settled","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"links":{"docs":"https://agents.writerslogic.com/docs/print-estimate/","docsJson":"https://agents.writerslogic.com/docs/print-estimate.json","sample":"https://agents.writerslogic.com/api/v1/samples/print-estimate","openapi":"https://agents.writerslogic.com/openapi.json","catalog":"https://agents.writerslogic.com/api/v1/catalog","verifyProvenance":"https://agents.writerslogic.com/api/v1/verify-provenance","index":"https://agents.writerslogic.com/docs/index.json"}}