Print Ready API

Process DTF Artwork Programmatically

Scan, fix, vectorize, and mock up DTF artwork straight from your own app, store, or fulfilment pipeline. Same processing engine as the DTFWiz web tools, over a plain REST API. Available on the Business plan.

Authentication

All API requests require an API key passed in the x-api-key header. Keys are tied to your DTFWiz account, require an active Business plan, and count toward your daily limit. Treat a key like a password: it carries your billing, so keep it server-side and never ship it in browser or app code.

// Pass your key as a request header x-api-key: dtf_your_key_here // Or as a Bearer token Authorization: Bearer dtf_your_key_here

Base URL: https://dtfwiz.com/api/v1 · All endpoints accept multipart/form-data

Plan Requirement & Rate Limits

Free · Starter

No API access

Keys cannot be created

Pro

No API access

Use the web tools instead

Business

Full API access

High daily ceiling, contact us to raise it

The API is Business-only. Entitlement is checked live on every request, not just when the key is created. If the Business plan lapses or the account is suspended, existing keys stop working immediately and return a 402. Reactivating the plan brings the same keys back with no need to reissue them.

Daily limits reset on a rolling 24-hour window. Need a higher ceiling? Contact us.

Error Responses

401Missing, invalid, or revoked API key
402Business plan no longer active, so the key is inactive. Body carries code: "plan_inactive".
403Account suspended
429Daily limit reached, or the vectorize queue is full (code: "queue_full")
400Bad request: missing required fields or invalid values
413Image too large, see per-endpoint size limits
500Server error, retry or contact support
// Error response shape { "error": "Invalid API key." } // Some errors carry a machine-readable code { "error": "API access requires an active Business plan…", "code": "plan_inactive", "plan": "free" }

Endpoints

POST

Scan Artwork

/api/v1/scan

Analyze a DTF artwork file and get a detailed JSON quality report. Detects DPI, background type, alpha fringe, speck noise, edge quality, and more.

Parameters

imageFilerequiredPNG, JPEG, or WebP file
print_width_inchesnumberoptionalTarget print width in inches (default: 12)
Returns:JSON — { dpi, background, alpha, transparency_fix, ink_coverage_percent, speck_count, is_jpeg, edge_quality, issues[], suggestions[] }. transparency_fix.recommended tells you whether soft pixels should be removed (fix_alpha_threshold) or halftoned (fix_halftone): "remove" | "halftone" | "either" | "none", with a plain-English reason. alpha.soft_rim_px is the average width in pixels of the semi-transparent band around the artwork — normal anti-aliasing is about 1px wide, while haze, glows and blown-out AI edges run far wider. Judge soft pixels on that rather than alpha.semi_transparent_percent: intricate artwork carries more anti-aliased edge simply because it has more edge, so the percentage reads high on files that are perfectly clean. alpha.has_fringe and transparency_fix already account for this.

Example

curl -X POST https://dtfwiz.com/api/v1/scan \
  -H "x-api-key: dtf_your_key_here" \
  -F "image=@artwork.png" \
  -F "print_width_inches=12"
POST

Fix Artwork

/api/v1/fix

Apply one or more fixes to a DTF artwork file. Remove edge fringe, trim transparent borders, remove noise specks, and resize — all in one call. Returns a clean PNG.

Parameters

imageFilerequiredPNG, JPEG, or WebP file
fix_alpha_thresholdbooleanoptional"true" to cut semi-transparent edge fringe
alpha_thresholdnumberoptionalAlpha cutoff 0–255 (default: 144). Lower = more aggressive.
fix_halftonebooleanoptional"true" to convert soft fades and glows into fully-opaque halftone dots instead of removing them. The opposite remedy to fix_alpha_threshold; use the scan's transparency_fix.recommended to pick. If both are sent, halftone wins and the alpha threshold is skipped. Dots are created after any resize, at final output resolution.
halftone_lpinumberoptionalHalftone dot frequency in lines per inch, 15–65 (default: 35). Lower = bigger dots.
print_width_inchesnumberoptionalTarget print width; sizes the halftone dots for the physical print (default assumes 300 DPI artwork)
fix_trimbooleanoptional"true" to trim transparent border pixels
fix_despecklebooleanoptional"true" to remove isolated noise pixels
resize_width_pxnumberoptionalResize output to this pixel width (maintains aspect ratio)
resize_height_pxnumberoptionalResize output to this pixel height (use both for exact dimensions)
Returns:Binary PNG image (Content-Type: image/png)

Example

curl -X POST https://dtfwiz.com/api/v1/fix \
  -H "x-api-key: dtf_your_key_here" \
  -F "image=@artwork.png" \
  -F "fix_alpha_threshold=true" \
  -F "fix_trim=true" \
  -F "fix_despeckle=true" \
  -o fixed.png
POST

Remove Background

/api/v1/remove-bg

AI-powered background removal using PhotoRoom. Returns a clean PNG with transparent background. Works on complex artwork, logos, and photos. Typical response: 3–5 seconds.

Parameters

imageFilerequiredPNG or JPEG file (max 25MP)
Returns:Binary PNG image with transparent background (Content-Type: image/png)

Example

curl -X POST https://dtfwiz.com/api/v1/remove-bg \
  -H "x-api-key: dtf_your_key_here" \
  -F "image=@photo.jpg" \
  -o transparent.png
POST

AI Upscale

/api/v1/upscale

Upscale low-resolution artwork by 2× or 4× using Real-ESRGAN. Recovers fine detail lost in compression or small source files. Returns a URL to the upscaled image.

Parameters

imageFilerequiredPNG or JPEG file. Inputs over the GPU budget are shrunk to it automatically (up to 4× the budget in pixels, 2× linear); larger files get a 413 { code: "image_too_large", maxPixels, pixels }
scalenumberoptional2 or 4 (default: 4)
Returns:JSON — { output_url: string, scale: number, preShrunk: boolean, from?: {width,height}, to?: {width,height} }

Example

curl -X POST https://dtfwiz.com/api/v1/upscale \
  -H "x-api-key: dtf_your_key_here" \
  -F "image=@low_res.png" \
  -F "scale=4"
GET

Upscale Limits

/api/v1/upscale

Read the effective input caps before uploading. maxPixels / maxPixels4x are the largest inputs accepted per scale including the auto-shrink allowance; budget / budget4x are the sizes the AI actually runs at (anything above is shrunk to it first). Admin-tunable, so read at runtime rather than hardcoding. autoShrink: true means your app no longer needs to pre-shrink.

Parameters

Returns:JSON — { maxPixels, maxPixels4x, budget, budget4x, autoShrink: true, shrinkAllowance: 4, scales: [2, 4] }

Example

curl https://dtfwiz.com/api/v1/upscale \
  -H "x-api-key: dtf_your_key_here"
GET

Vectorize Queue Status

/api/v1/vectorize

Conversions run one at a time on the server. Check the live queue before converting so your app can show a loader for a short wait or its own message for a long one.

Parameters

Returns:JSON — { queue: { converting: boolean, waiting: number, max_waiting: number } }

Example

curl https://dtfwiz.com/api/v1/vectorize \
  -H "x-api-key: dtf_your_key_here"
POST

Convert to Vector (SVG)

/api/v1/vectorize

Traces artwork into a clean, infinitely scalable SVG tuned for DTF: exact color palettes, smooth edges, no speck noise. Auto color mode picks the right number of colors for the art. Typical response: 3–15 seconds plus any queue wait.

Parameters

imageFilerequiredPNG, JPEG, or WebP file (max 25MB)
colorsstringoptional"auto" (default — server picks 4–20), a number 1–20 (1 = single-color silhouette), or "unlimited"
detailstringoptional"smoother", "balanced" (default), or "precise" (best for sharp text)
shape_stylestringoptional"stacked" (default, overlapping layers — easy to edit) or "cutout" (flat pieces)
speck_sizenumberoptionalRemove blobs under this many px across, 0–16 (default: 4)
smooth_bandsbooleanoptional"false" to skip color-band smoothing (default: true)
edge_cleanupbooleanoptional"false" to keep semi-transparent edge pixels (default: true)
print_width_inchesnumberoptionalWrites the SVG at a physical size so RIP software imports it print-ready
Returns:SVG document (Content-Type: image/svg+xml). X-Paths, X-Colors-Used, X-Trace-Ms, X-Queue-Ms headers carry the stats. If the queue is full: 429 JSON with code "queue_full" and the live queue snapshot — map it to your own messaging.

Example

curl -X POST https://dtfwiz.com/api/v1/vectorize \
  -H "x-api-key: dtf_your_key_here" \
  -F "image=@artwork.png" \
  -F "colors=auto" \
  -o artwork.svg
GET

List Mockup Garments

/api/v1/mockup/templates

Lists the available garment photos and their named placements (Center, Left Chest, Full Front, ...). Use the ids or names in POST /v1/mockup.

Parameters

Returns:JSON — { templates: [{ id, name, category, preview_url, width_px, height_px, placements: [{ id, name }] }] }

Example

curl https://dtfwiz.com/api/v1/mockup/templates \
  -H "x-api-key: dtf_your_key_here"
POST

Generate Mockup

/api/v1/mockup

Renders your design onto a real garment photo and returns the finished mockup PNG at full resolution. Pick the garment and placement by id or by name.

Parameters

imageFilerequiredThe design. Transparent PNG recommended.
template_idstringoptionalGarment id from GET /v1/mockup/templates. Omit to use the first garment.
garmentstringoptionalOr match a garment by name, e.g. "black tee" (case-insensitive)
placement_idstringoptionalPlacement id from the template listing
placementstringoptionalOr match a placement by name, e.g. "left chest" (case-insensitive)
scalenumberoptionalDesign size inside the print area, 0.1 to 2 (default: 1)
Returns:Binary PNG mockup (Content-Type: image/png). X-Template and X-Placement headers echo what was used.

Example

curl -X POST https://dtfwiz.com/api/v1/mockup \
  -H "x-api-key: dtf_your_key_here" \
  -F "image=@design.png" \
  -F "garment=black tee" \
  -F "placement=left chest" \
  -o mockup.png

Ready to integrate?

Create a free API key to start scanning and fixing DTF artwork in your own app. Free plan includes 100 requests per day.

Get your free API key